2014-10-13 21 views
14

C'è un modo in JavaFX per impostare diverse icone dell'applicazione per la barra del titolo e per la barra delle applicazioni del sistema operativo?JavaFX. Impostare icone diverse per la barra del titolo e la barra delle applicazioni del sistema operativo

Il problema è che l'icona visualizzata nella barra delle attività del sistema è molto più grande rispetto all'icona nella barra del titolo e non possono essere ridimensionate correttamente dal sistema.

Vorrei utilizzare immagini diverse per le diverse dimensioni di icona. Simile a quello che fai in un file .ico.

Se chiamo il numero stage.getIcons().add(...) due volte, l'immagine precedente verrà sempre utilizzata per entrambe le barre.

Non ero in grado di utilizzare un file .ico già esistente (che supporta dimensioni diverse) per questo scopo.

+0

Invece di chiamare stage.getIcons(). Add() più di una volta, provare a impostare tutte le immagini contemporaneamente. stage.getIcons(). addAll (Image1, Image2, Image3); –

risposta

2

C'è un modo utilizzando due stadi diversi ma potrebbe avere i suoi problemi (testato solo su Windows 7). L'esempio seguente utilizza Java 8/JavaFX 8.

Questo codice imposta l'icona visualizzata sulla barra delle applicazioni sullo stage primario ricevuto all'avvio di JavaFX ma rende invisibile lo stage (trasparente, dimensione zero). Quindi apre una nuova finestra visibile con un'icona diversa.

Poiché questa è solo una finestra secondaria e non quella reale, l'evento Nascondi deve essere delegato alla fase nascosta per chiudere l'applicazione. Potrebbero esserci altri eventi che devono essere delegati come minimizzare la finestra.

public class Main extends Application { 
    public static void main(String[] args) { 
     Application.launch(args); 
    } 

    @Override 
    public void start(Stage primaryStage) throws Exception { 
     primaryStage.getIcons().add(getImage("taskbar_icon.png")); 
     primaryStage.initStyle(StageStyle.TRANSPARENT); 
     primaryStage.setWidth(0); 
     primaryStage.setHeight(0); 
     primaryStage.show(); 

     Stage visibleStage = new Stage(); 
     visibleStage.initOwner(primaryStage); 
     visibleStage.getIcons().add(getImage("window_icon.png")); 
     visibleStage.setScene(new Scene(...)); 
     visibleStage.setOnHidden(e -> Platform.runLater(primaryStage::hide)); 
     visibleStage.show(); 
    } 
}