Hallo, ich habe bisher relativ erfolgreich versucht mein Programm in den System Tray zu packen.
Für mein Problem ist es wichtig zu wissen, dass mein Programm eine HauptStage hat auf der alles wichtige passiert.
Oben habe ich eine Menubar mit den Punkten:
"Start" = bei einem Klick hier drauf kommst du auf die HauptStage zurück (ist ein Label)
"Optionen" = eigentlich unwichtig für das Problem
"About" = bei einem Klick hier drauf kommst du auf eine Info Seite mit Impressum (ebenfalls ein Label)
Und hier noch die Methode addAppToTray(), in welcher mein Problem liegt. Im Popup Menü habe ich die zwei Punkte "About" und "Exit". Exit funktioniert wie man es erwarten würde und bei About möchte ich, dass sich mein Programm im Vordergrund öffnet und mir meine Infoseite anzeigt.
Hier die Methode showStage(), die mir bei Doppelklick auf das Icon das Programm in der Vordergrund holt.
Wie muss ich meine Methode showInfo() füllen damit das funktioniert?
Die HBox für meine Infoseite befindet sich in einem ActionListener, welcher sich in einer Methode befindet die mir das Menü gleich zu Beginn des Programmes erstellt.
Falls mein Problem zu ungenau geschildert ist bitte bescheid sagen, ich kann gerne noch mehr Code liefern falls nötig.
Für mein Problem ist es wichtig zu wissen, dass mein Programm eine HauptStage hat auf der alles wichtige passiert.
Oben habe ich eine Menubar mit den Punkten:
"Start" = bei einem Klick hier drauf kommst du auf die HauptStage zurück (ist ein Label)
"Optionen" = eigentlich unwichtig für das Problem
"About" = bei einem Klick hier drauf kommst du auf eine Info Seite mit Impressum (ebenfalls ein Label)
Und hier noch die Methode addAppToTray(), in welcher mein Problem liegt. Im Popup Menü habe ich die zwei Punkte "About" und "Exit". Exit funktioniert wie man es erwarten würde und bei About möchte ich, dass sich mein Programm im Vordergrund öffnet und mir meine Infoseite anzeigt.
Java:
private void addAppToTray() {
try {
java.awt.Toolkit.getDefaultToolkit();
if (!java.awt.SystemTray.isSupported()) {
System.out.println("No system tray support, application exiting.");
Platform.exit();
}
java.awt.SystemTray tray = java.awt.SystemTray.getSystemTray();
URL imageLoc = new URL(iconImageLoc);
java.awt.Image image = ImageIO.read(imageLoc);
java.awt.TrayIcon trayIcon = new java.awt.TrayIcon(image);
trayIcon.addActionListener(event -> Platform.runLater(this::showStage));
java.awt.MenuItem openItem = new java.awt.MenuItem("About");
openItem.addActionListener(event -> Platform.runLater(this::showInfo));
java.awt.MenuItem exitItem = new java.awt.MenuItem("Exit");
exitItem.addActionListener(event -> {
Platform.exit();
tray.remove(trayIcon);
});
final java.awt.PopupMenu popup = new java.awt.PopupMenu();
popup.add(openItem);
popup.addSeparator();
popup.add(exitItem);
trayIcon.setPopupMenu(popup);
tray.add(trayIcon);
} catch (java.awt.AWTException | IOException e) {
System.out.println("Unable to init system tray");
e.printStackTrace();
}
}
Hier die Methode showStage(), die mir bei Doppelklick auf das Icon das Programm in der Vordergrund holt.
Java:
private void showStage() {
if (stage != null) {
stage.show();
stage.toFront();
}
}
Wie muss ich meine Methode showInfo() füllen damit das funktioniert?
Die HBox für meine Infoseite befindet sich in einem ActionListener, welcher sich in einer Methode befindet die mir das Menü gleich zu Beginn des Programmes erstellt.
Falls mein Problem zu ungenau geschildert ist bitte bescheid sagen, ich kann gerne noch mehr Code liefern falls nötig.