Antworten:
Angenommen, Ihre Bühne ist "Bühne" und die Datei befindet sich im Dateisystem:
stage.getIcons().add(new Image("file:icon.png"));
Gemäß dem Kommentar unten müssen Sie stattdessen den folgenden Ansatz verwenden, wenn es in ein enthaltendes Glas eingewickelt ist:
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("icon.png")));
stage.getIcons().add( new Image( <yourclassname>.class.getResourceAsStream( "icon.png" )));
Werken.
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.
Vollständiges Programm für den Anfang :) Dieses Programm setzt das Symbol für StackOverflowIcon.
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
Aktualisiert für JavaFX 8
Der Code muss nicht geändert werden. Es funktioniert immer noch gut. Getestet und verifiziert in Java 1.8 (1.8.0_45). Der Pfad kann auf lokal oder remote eingestellt werden. Beide werden unterstützt.
stage.getIcons().add(new Image("/path/to/javaicon.png"));
ODER
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 einen Bilderordner haben und das Symbol darin gespeichert ist, verwenden Sie diesen
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("/images/comparison.png")));
und wenn Sie es direkt aus Ihrem Paket verwenden, was keine gute Praxis ist, verwenden Sie dies
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("comparison.png")));
und wenn Sie eine Ordnerstruktur haben und Ihr Symbol in dieser Verwendung haben
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("../images/comparison.png")));
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("/icon.png")));
Befindet sich Ihre icon.png im Ressourcenverzeichnis und denken Sie daran, ein '/' einzugeben, bevor dies nicht funktioniert
Was halten Sie davon, ein neues Paket, dh image.icons, in Ihrem src-Verzeichnis zu erstellen und Ihre .png-Bilder dorthin zu verschieben? Dann müssen Sie nur 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 immer noch nicht sicher, ob sie korrekt ist (Anfänger hier).
resources
Ordner abzulegen.
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 desselben Bildes haben und die beste Größe wird ausgewählt.
eg. 16x16, 32,32
stage.getIcons().add(new Image(ClassLoader.getSystemResourceAsStream("images/icon.png")));
Der Bilderordner muss sich im Ressourcenordner befinden.
Mit dieser Codezeile können Sie Ihrer Anwendung ganz einfach ein Symbol hinzufügen
stage.getIcons (). add (neues Bild ("Bildpfad"));
stage.getIcons().add(new Image("/images/logo_only.png"));
Es ist eine gute Angewohnheit, einen Bilderordner in Ihrem src-Ordner zu erstellen und Bilder daraus abzurufen.
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.
Symbole zur Laufzeit umschalten:
Zusätzlich zu den Antworten hier habe ich festgestellt, 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 wäre hilfreich, wenn Sie das Symbol Ihrer 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 auf die Bühne zuzugreifen, können Sie ein neues statisches Feld für die Bühne in Ihrer Hauptklasse erstellen, um von der start () -Methode darauf zugreifen zu können, 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")));
}
}
Eine andere einfache Möglichkeit, ein eigenes Symbol in die Titelleiste von JavaFX einzufügen, besteht darin, das Bild mit der folgenden Methode zu Ihrer Primärstufe hinzuzufügen:
Image ico = new Image("resources/images/iconLogo.png");
stage.getIcons().add(ico);
Stellen Sie sicher, dass Sie javafx.scene.image.Image importieren (wenn Sie eine Idee wie Netbeans verwenden, sollte dies automatisch für Sie erledigt werden).
Ich habe es versucht und es funktioniert:
stage.getIcons().add(new Image(getClass().getResourceAsStream("../images/icon.png")));