Icona dell'applicazione JavaFX


Risposte:


234

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")));

5
Inoltre, se l'icona deve essere installata come collegamento dell'applicazione e si utilizza WebStart come tecnologia di distribuzione, è possibile che si desideri impostare le impostazioni icona / collegamento / desktop appropriate nel file jnlp
jewelsea

9
È possibile aggiungere più immagini di dimensioni diverse e JavaFX sceglierà quella più adatta. Perché hai diverse dimensioni nella barra delle applicazioni e diverse nella barra del titolo.
drzymala,

11
Penso che questo funzioni solo quando il file si trova nel file system, per la situazione più comune in cui l'icona è racchiusa nel file jar e nel percorso di classe, questo non funzionava per me. Una delle altre soluzioni che utilizzano stage.getIcons().add( new Image( <yourclassname>.class.getResourceAsStream( "icon.png" )));opere.
k_o_

3
Per favore, no, almeno su Ubuntu (Unity) l'icona è usata solo per la decorazione della finestra, ma non per il lanciatore. Per rendere visibile l'icona (anziché il brutto punto interrogativo), dovrai specificare il .dektopfile appropriato . Vedi la mia descrizione qui
dzim

1
questo cambia solo l'icona sulla barra del titolo, cioè in alto a sinistra nella finestra. come cambiare l'icona dell'applicazione quando è sul desktop come collegamento? e sulla barra delle applicazioni?
TejpalBh

74

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.


3
'<yourclassname> .class' potrebbe essere sostituito da 'getClass ()'
Jim Fred,

71

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

Screenshot di JavaFX

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"));

inserisci qui la descrizione dell'immagine

Spero che sia d'aiuto. Grazie!!


Questo supporta svg?
qed

1
@qed, non penso che SVG sia supportato, ma non sono sicuro al 100%. Puoi provarlo.
Madan Sapkota,

Ho appena provato a utilizzare un file .svg per l'icona dell'applicazione JavaFX. Non ha funzionato. Non è stato fornito alcun errore, ma JavaFX ha usato il suo logo predefinito invece di quello personalizzato.
Simon Diemert,

8

puoi aggiungerlo in fxml. Livello del palcoscenico

<icons>
    <Image url="@../../../my_icon.png"/>
</icons>

7

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")));

2
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à


2

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).


Non è buona pratica inserire risorse nei pacchetti java. Si consiglia di metterli nella resourcescartella.
Thibstars l'

1
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


1
stage.getIcons().add(new Image(ClassLoader.getSystemResourceAsStream("images/icon.png")));

la cartella delle immagini deve trovarsi nella cartella delle risorse.


4
Questa risposta è del tutto superflua poiché un'altra risposta ha già spiegato lo stesso.
L. Guthardt,

1

Puoi facilmente mettere l'icona nella tua applicazione usando questa riga di codice

stage.getIcons (). add (nuova immagine ("percorso immagine"));


0
stage.getIcons().add(new Image("/images/logo_only.png"));

È buona norma creare una cartella di immagini nella cartella src e ottenere immagini da essa.


Questa risposta è del tutto superflua poiché un'altra risposta ha già spiegato lo stesso.
L. Guthardt,

0

L'ho usato nella mia applicazione

Image icon = new Image(getClass().getResourceAsStream("icon.png"));
window.getIcons().add(icon);

Qui la finestra è il palcoscenico.


0

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.


0

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")));
    }
}

-1

Se hai Invalid URL or resource not foundmesso il tuo icon.png nella cartella "bin" nell'area di lavoro.


-2

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).


40
non è esattamente quello che è stato pubblicato sopra?
XXL

-2

Ho provato questo e funziona:

stage.getIcons().add(new Image(getClass().getResourceAsStream("../images/icon.png")));

in realtà, no: i punti non sono supportati nella ricerca delle risorse, leggi il documento api
kleopatra
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.