Risposte:
Supponendo che il tuo stage sia "stage" e che il file sia sul filesystem:
stage.getIcons().add(new Image("file:icon.png"));
Come per il commento qui sotto, se è avvolto in un barattolo contenente dovrai invece usare il seguente approccio:
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("icon.png")));
stage.getIcons().add( new Image( <yourclassname>.class.getResourceAsStream( "icon.png" )));
opere.
Ho provato questo e funziona perfettamente. Il codice è:
stage.getIcons().add(
new Image(
<yourclassname>.class.getResourceAsStream( "icon.png" )));
icon.png si trova nella stessa cartella dei file di origine.
Programma completo per i principianti :) Questo programma imposta l'icona per 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 di output
Aggiornato per JavaFX 8
Non è necessario modificare il codice. Funziona ancora bene. Testato e verificato in Java 1.8 (1.8.0_45). Il percorso può essere impostato su locale o remoto entrambi sono supportati.
stage.getIcons().add(new Image("/path/to/javaicon.png"));
O
stage.getIcons().add(new Image("https://example.com/javaicon.png"));
Spero che sia d'aiuto. Grazie!!
puoi aggiungerlo in fxml. Livello del palcoscenico
<icons>
<Image url="@../../../my_icon.png"/>
</icons>
Se hai una cartella di immagini e l'icona è salvata in quella usa questa
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("/images/comparison.png")));
e se lo stai usando direttamente dal tuo pacchetto che non è una buona pratica, usa questo
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("comparison.png")));
e se hai una struttura di cartelle e hai la tua icona dentro quell'uso
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("../images/comparison.png")));
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("/icon.png")));
Se icon.png è nella directory delle risorse e ricorda di mettere un '/' prima, altrimenti non funzionerà
Cosa ne pensi della creazione di un nuovo pacchetto, ad esempio image.icons nella tua directory src e del trasferimento delle tue immagini .png? Quindi devi solo scrivere:
Image image = new Image("/image/icons/nameOfImage.png");
primaryStage.getIcons().add(image);
Questa soluzione funziona perfettamente per me, ma non sono ancora sicuro che sia corretta (principiante qui).
resources
cartella.
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("/icon.png" )));
È possibile aggiungere più di un'icona con dimensioni diverse utilizzando questo metodo. Le immagini devono essere di dimensioni diverse della stessa immagine e verrà scelta la dimensione migliore.
eg. 16x16, 32,32
stage.getIcons().add(new Image(ClassLoader.getSystemResourceAsStream("images/icon.png")));
la cartella delle immagini deve trovarsi nella cartella delle risorse.
Puoi facilmente mettere l'icona nella tua applicazione usando questa riga di codice
stage.getIcons (). add (nuova immagine ("percorso immagine"));
stage.getIcons().add(new Image("/images/logo_only.png"));
È buona norma creare una cartella di immagini nella cartella src e ottenere immagini da essa.
Se si esegue il file jar, il codice specificato da Michael Berry cambierà l'icona nella barra del titolo e nella barra delle applicazioni. L'icona del collegamento non può essere modificata.
Se si esegue un programma nativo compilato con com.zenjava, è necessario aggiungere un collegamento all'icona del programma:
<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>
Ciò aggiungerà un'icona al collegamento e alla barra delle applicazioni.
Attiva / disattiva icone in runtime:
Oltre alle risposte qui, ho scoperto che una volta che hai assegnato un'icona alla tua applicazione per la prima volta, non puoi attivarla semplicemente aggiungendo una nuova icona al tuo stage (questo sarebbe utile se devi attivare l'icona della tua app da on / off abilitato / disabilitato).
Per impostare una nuova icona durante il runtime, utilizzare getIcons (). Remove (0) prima di provare ad aggiungere una nuova icona, dove 0 è l'indice dell'icona che si desidera sovrascrivere come mostrato qui:
//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")));
Per accedere allo stage da altri metodi o classi puoi creare un nuovo campo statico per lo stage nella tua classe principale in modo da accedervi dallo stesso metodo start () incapsulando in un metodo statico a cui puoi accedere da qualsiasi punto della tua app .
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")));
}
}
Un altro modo semplice per inserire la propria icona nella barra del titolo in JavaFX è aggiungere l'immagine allo stage principale usando il seguente metodo:
Image ico = new Image("resources/images/iconLogo.png");
stage.getIcons().add(ico);
Assicurati di importare javafx.scene.image.Image (se usi un ide come netbeans questo dovrebbe essere fatto automaticamente per te).
Ho provato questo e funziona:
stage.getIcons().add(new Image(getClass().getResourceAsStream("../images/icon.png")));