2012-04-12 8 views

risposta

152

Assumendo che il palco è "palcoscenico" e il file è sul filesystem:

stage.getIcons().add(new Image("file:icon.png")); 

Come per il commento qui sotto, se è avvolto in un barattolo contenente avrete bisogno di utilizzare il seguente approccio, invece:

stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("icon.png"))); 
+5

Inoltre, se l'icona deve essere installata come collegamento all'applicazione e si utilizza WebStart come tecnologia di distribuzione, è possibile che si desideri impostare le icone/collegamento/impostazioni del desktop appropriate nel file jnlp: http: // docs. oracle.com/javase/7/docs/technotes/guides/javaws/developersguide/syntax.html – jewelsea

+9

È possibile aggiungere più immagini di dimensioni diverse e JavaFX sceglierà quello che si adatta meglio. Perché hai diverse dimensioni nella barra delle applicazioni e diverse nella barra del titolo. – drzymala

+9

Penso che 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 classpath, questo non funzionava per me. Una delle altre soluzioni che utilizza 'stage.getIcons(). Add ( new Image ( .class.getResourceAsStream (" icon.png ")));' funziona. –

58

Ho provato questo e funziona completamente. Il codice è:

stage.getIcons().add(
    new Image(
     <yourclassname>.class.getResourceAsStream("icon.png"))); 

icon.png si trova nella stessa cartella dei file di origine.

-2

Un altro modo semplice per inserire il proprio icona sulla barra del titolo in JavaFX è quello di aggiungere l'immagine al vostro fase primaria utilizzando il seguente metodo:

Image ico = new Image("resources/images/iconLogo.png"); 
stage.getIcons().add(ico); 

Assicurati che il tuo importazione javafx.scene.image.Image (se usi un ide come netbeans questo dovrebbe essere fatto automaticamente per te).

+34

non è quello ** esattamente * * cosa è stato pubblicato sopra? – XXL

53

Programma completo per i principianti :) Questo programma imposta l'icona di sovraccarico dello stack.

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

uscita screnshot

JavaFX Screenshot

aggiornato per JavaFX 8

Non c'è bisogno di 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")); 

enter image description here

Speranza che aiuta. Grazie!!

+0

Questo supporto svg? – qed

+0

@qed, non penso che SVG sia supportato, ma non ne sono sicuro al 100%. Puoi testarlo. –

1
stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("/icon.png"))); 

Se l'icon.png è nelle risorse dir e ricordarsi di mettere un '/' prima che altrimenti non funzionerà

0

Ho provato questo e funziona:

stage.getIcons().add(new Image(getClass().getResourceAsStream("../images/icon.png"))); 
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 avere dimensioni diverse della stessa immagine e verrà scelta la dimensione migliore. eg. 16x16, 32,32

5

Se si dispone di dispone di una cartella immagini e l'icona viene salvato in che uso questo

stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("/images/comparison.png"))); 

e se si sta utilizzando direttamente dal vostro pacchetto che non è un buon uso pratica questo

stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("comparison.png"))); 

e se si dispone di una struttura di cartelle e hai il tuo icona all'interno che utilizzano

stage.getIcons().add(new Image(<yourclassname>.class.getResourceAsStream("../images/comparison.png"))); 
2

Cosa ne pensi della creazione di un nuovo pacchetto i.e image.icons nella tua directory src e di spostare lì le immagini .png? Che non vi resta che scrivere:

Image image = new Image("/image/icons/nameOfImage.png"); 
primaryStage.getIcons().add(image); 

Questa soluzione funziona per me perfettamente, ma ancora non sono sicuro se è corretto (principiante qui).

5

è possibile aggiungerlo in fxml. Piano Piano

<icons> 
    <Image url="@../../../my_icon.png"/> 
</icons> 
0
stage.getIcons().add(new Image("/images/logo_only.png")); 

E 'buona abitudine di fare la cartella immagini nella cartella src e ottenere immagini da esso.

+0

Questa risposta è completamente inutile poiché [un'altra risposta] (https://stackoverflow.com/a/10122335/8283469) ha già spiegato la stessa cosa. –

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

cartella immagini deve essere nella cartella delle risorse.

+1

Questa risposta è completamente inutile poiché [un'altra risposta] (https://stackoverflow.com/a/10122335/8283469) ha già spiegato la stessa cosa. –

0

Ho usato questo nella mia domanda

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

Qui finestra è il palcoscenico.