2014-10-13 13 views
14

Gibt es in JavaFX eine Möglichkeit, verschiedene Anwendungssymbole für die Titelleiste und die Betriebssystem-Taskleiste festzulegen?JavaFX. Legen Sie verschiedene Symbole für die Titelleiste und die Betriebssystem-Taskleiste fest.

Das Problem ist, dass das Symbol in der System-Taskleiste viel größer als das Symbol in der Titelleiste ist und sie nicht richtig vom System angepasst werden können.

Ich möchte verschiedene Bilder für die verschiedenen Symbolgrößen verwenden. Ähnlich wie in einer ICO-Datei.

Wenn ich zweimal stage.getIcons().add(...) aufrufen, wird das vorherige Bild immer für beide Balken verwendet.

Ich konnte auch eine bereits vorhandene .ico-Datei (die verschiedene Größen unterstützt) für diesen Zweck nicht verwenden.

+0

Anstatt stage.getIcons(). Add() mehr als einmal aufzurufen, versuchen Sie, alle Ihre Bilder gleichzeitig zu setzen. stage.getIcons(). addAll (Bild1, Bild2, Bild3); –

Antwort

2

Es gibt einen Weg mit zwei verschiedenen Stufen, aber es kann seine Probleme haben (nur unter Windows 7 getestet). Im folgenden Beispiel wird Java 8/JavaFX 8 verwendet.

Dieser Code legt das Symbol fest, das beim Start von JavaFX in der Taskleiste der Primärstufe angezeigt wird, macht die Bühne jedoch unsichtbar (transparent, null). Es öffnet dann ein neues und sichtbares Fenster mit einem anderen Symbol.

Da dies nur ein untergeordnetes Fenster ist und nicht das echte, muss das hide-Ereignis an die versteckte Phase delegiert werden, um die Anwendung zu schließen. Möglicherweise müssen mehr Ereignisse delegiert werden, z. B. das Fenster minimieren.

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