Hi Freunde,
ich habe ein Problem: Ich möchte ein Programm durch Klick auf einen Button in den Hintergrund versetzen. Ich habe es schon so weit, dass ich das Icon in die System Tray setze, aber wenn ich aus der ActionListener-Methode das Programm "in den Hintergrund verstecken" möchte, dann müsste ich meineStage.hide() ausführen.
Da ich aber in der Klasse FXML-Conroller bin kann ich nicht auf die Stage zugreifen, da die ja nur in der Start-Methode ist. Ich füge den Code an. Wahrscheinlich wird es sich da bei mir nur um eine Wissenslücke handeln.
Ich danke im Voraus vielmals.
Liebe Grüße
Ich habe bewusst nicht den ganzen Code eingefügt, damit es übersichtlicher bleibt.
Hier der Controller:
Die Mainklasse:
ich habe ein Problem: Ich möchte ein Programm durch Klick auf einen Button in den Hintergrund versetzen. Ich habe es schon so weit, dass ich das Icon in die System Tray setze, aber wenn ich aus der ActionListener-Methode das Programm "in den Hintergrund verstecken" möchte, dann müsste ich meineStage.hide() ausführen.
Da ich aber in der Klasse FXML-Conroller bin kann ich nicht auf die Stage zugreifen, da die ja nur in der Start-Methode ist. Ich füge den Code an. Wahrscheinlich wird es sich da bei mir nur um eine Wissenslücke handeln.
Ich danke im Voraus vielmals.
Liebe Grüße
Ich habe bewusst nicht den ganzen Code eingefügt, damit es übersichtlicher bleibt.
Hier der Controller:
Java:
import java.awt.Image;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.Toolkit;
import java.awt.TrayIcon;
import java.awt.event.ActionListener;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.util.Timer;
import java.util.TimerTask;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Alert;
import javafx.scene.control.Button;
import javafx.scene.control.CheckBox;
import javafx.scene.control.Label;
import javafx.scene.control.Alert.AlertType;
public class FXMLController {
@FXML private CheckBox aktivBox;
@FXML private Label letzteAkt;
@FXML private Button ausfuehren;
@FXML private Button anleitung;
@FXML private Button info;
@FXML private Button hintergrund;
@FXML protected void hintergrundKlick(ActionEvent event) {
if (SystemTray.isSupported()) {
SystemTray tray = SystemTray.getSystemTray();
Image image = Toolkit.getDefaultToolkit().getImage("C:\\Users\\oschr\\Desktop\\aa.png");
PopupMenu popup = new PopupMenu();
MenuItem item = new MenuItem("Exit");
popup.add(item);
TrayIcon trayIcon = new TrayIcon(image, "Amr_Trial", popup);
ActionListener listener = new ActionListener() {
@Override
public void actionPerformed(java.awt.event.ActionEvent event) {
System.exit(0);
}
};
ActionListener listenerTray = new ActionListener() {
@Override
public void actionPerformed(java.awt.event.ActionEvent arg0) {
javafx.application.Platform.runLater(new Runnable() {
@Override
public void run() {
meineStage().hide();
}
});
}
};
trayIcon.addActionListener(listenerTray);
item.addActionListener(listener);
try{
tray.add(trayIcon);
}catch (Exception e) {
System.err.println("Can't add to tray");
}
} else {
System.err.println("Tray unavailable");
}
//
}
Die Mainklasse:
Java:
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage meineStage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("sb_AnomalyRefresh.fxml"));
Scene meineScene = new Scene(root, 656, 500);
//den Titel über stage setzen
meineStage.setTitle("Anomaly Refresh by Schrieverkommt");
//die Szene setzen
meineStage.setScene(meineScene);
//und anzeigen
meineStage.show();
}
public static void main(String[] args) {
launch(args);
}
}