Ist es möglich, das Anwendungssymbol mit JavaFX zu ändern, oder muss dies mit Swing erfolgen?
Angenommen, Ihre Bühne ist "stage" und die Datei befindet sich im Dateisystem:
stage.getIcons().add(new Image("file:icon.png"));
Wie in dem Kommentar unten beschrieben, müssen Sie, wenn es in einem enthaltenden Glas eingeschlossen ist, stattdessen die folgende Vorgehensweise verwenden:
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("icon.png")));
Ich habe es versucht und es funktioniert total. Der Code lautet:
stage.getIcons().add(
new Image(
<yourclassname>.class.getResourceAsStream( "icon.png" )));
icon.png befindet sich im selben Ordner wie die Quelldateien.
Volles Programm für Starter :) Dieses Programm setzt das Stack Overflow Icon.
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class StackoverflowIcon extends Application {
@Override
public void start(Stage stage) {
StackPane root = new StackPane();
// set icon
stage.getIcons().add(new Image("/path/to/stackoverflow.jpg"));
stage.setTitle("Wow!! Stackoverflow Icon");
stage.setScene(new Scene(root, 300, 250));
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Screnshot ausgeben
Für JavaFX 8 aktualisiert
Keine Notwendigkeit, den Code zu ändern. Es funktioniert immer noch gut. Getestet und verifiziert in Java 1.8 (1.8.0_45). Der Pfad kann auf local oder remote gesetzt werden. Beide werden unterstützt.
stage.getIcons().add(new Image("/path/to/javaicon.png"));
OR
stage.getIcons().add(new Image("https://example.com/javaicon.png"));
Ich hoffe es hilft. Vielen Dank!!
sie können es in fxml hinzufügen. Bühnenebene
<icons>
<Image url="@../../../my_icon.png"/>
</icons>
Wenn Sie über einen Bilderordner verfügen und das Symbol in diesem Ordner gespeichert ist, verwenden Sie diesen Ordner
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("/images/comparison.png")));
wenn Sie es direkt aus Ihrem Paket verwenden, ist dies keine gute Praxis
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("comparison.png")));
und wenn Sie über eine Ordnerstruktur verfügen und Ihr Symbol darin verwendet wird
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("../images/comparison.png")));
Mit dieser Codezeile können Sie Ihrer Anwendung einfach ein Symbol hinzufügen
stage.getIcons (). add (neues Bild ("Bildpfad"));
Was halten Sie davon, ein neues Paket, dh image.icons, in Ihrem SRC-Verzeichnis zu erstellen und Ihre .png-Bilder dorthin zu verschieben? Dann musst du nur noch schreiben:
Image image = new Image("/image/icons/nameOfImage.png");
primaryStage.getIcons().add(image);
Diese Lösung funktioniert perfekt für mich, aber ich bin mir nicht sicher, ob sie korrekt ist (Anfänger hier).
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("/icon.png")));
Wenn sich Ihr icon.png in der Ressource befindet, denken Sie daran, ein '/' zu setzen, bevor es sonst nicht funktioniert
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("/icon.png" )));
Mit dieser Methode können Sie mehr als ein Symbol mit unterschiedlichen Größen hinzufügen. Die Bilder sollten unterschiedliche Größen des gleichen Bildes haben, und die beste Größe wird ausgewählt. eg. 16x16, 32,32
stage.getIcons().add(new Image(ClassLoader.getSystemResourceAsStream("images/icon.png")));
bilderordner müssen sich im Ressourcenordner befinden.
Wenn Sie die JAR-Datei ausführen, ändert der von Michael Berry angegebene Code das Symbol in der Titelleiste und in der Taskleiste. Das Verknüpfungssymbol kann nicht geändert werden.
Wenn Sie ein mit com.zenjava kompiliertes natives Programm ausführen, müssen Sie dem Programmsymbol einen Link hinzufügen:
<plugin>
<groupId>com.zenjava</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>8.8.3</version>
<configuration>
...
<bundleArguments>
<icon>${project.basedir}/src/main/resources/images/filename.ico</icon>
</bundleArguments>
</configuration>
</plugin>
Dadurch wird der Verknüpfung und der Taskleiste ein Symbol hinzugefügt.
Icons zur Laufzeit umschalten:
Zusätzlich zu den Antworten hier stellte ich fest, dass Sie, sobald Sie Ihrer Anwendung zum ersten Mal ein Symbol zugewiesen haben, es nicht mehr umschalten können, indem Sie einfach ein neues Symbol zu Ihrer Bühne hinzufügen (dies ist hilfreich, wenn Sie das Symbol Ihrer Anwendung umschalten müssen App von Ein/Aus aktiviert/deaktiviert).
Um ein neues Symbol zur Laufzeit festzulegen, verwenden Sie getIcons (). Remove (0), bevor Sie versuchen, ein neues Symbol hinzuzufügen. Dabei ist 0 der Index des Symbols, das Sie überschreiben möchten, wie hier gezeigt:
//Setting icon by first time (You can do this on your start method).
stage.getIcons().add(new Image(getClass().getResourceAsStream("enabled.png")));
//Overriding app icon with a new status (This can be in another method)
stage.getIcons().remove(0);
stage.getIcons().add(new Image(getClass().getResourceAsStream("disabled.png")));
Um von anderen Methoden oder Klassen aus auf die Bühne zuzugreifen, können Sie ein neues statisches Feld für die Bühne in Ihrer Hauptklasse erstellen und von der start () -Methode aus darauf zugreifen, indem Sie eine statische Methode einkapseln, auf die Sie von überall in Ihrer App zugreifen können .
public class MainApp extends Application {
private static Stage stage;
public static Stage getStage() { return stage; }
@Override public void start(Stage primaryStage) {
stage = primaryStage
stage.getIcons().add(new Image(getClass().getResourceAsStream("enabled.png")));
}
}
public class AnotherClass {
public void setStageTitle(String newTitle) {
MainApp.getStage().setTitle(newTitle);
MainApp.getStage().getIcons().remove(0);
MainApp.getStage().getIcons().add(new Image(getClass().getResourceAsStream("disabled.png")));
}
}
Ich habe dies in meiner Bewerbung verwendet
Image icon = new Image(getClass().getResourceAsStream("icon.png"));
window.getIcons().add(icon);
Hier ist das Fenster die Bühne.
stage.getIcons().add(new Image("/images/logo_only.png"));
Es ist eine gute Angewohnheit, Bilderordner in Ihrem SRC-Ordner zu erstellen und Bilder davon zu erhalten.
stage.getIcons (). add (neues Bild (("nospaniol/ui/icons/nospaniol.png")));
Wenn Sie Invalid URL or resource not found
erhalten haben, legen Sie Ihr icon.png im "bin" -Ordner Ihres Arbeitsbereichs ab.