Der schlimmste Feind des Entwicklers ist und bleibt der Benutzer. Besonders die unerfahrenen Benutzer bringen gerne die UI und die Validierung an ihre Grenzen….
Bestes Beispiel ist ein komplexer Vorgang mit unzähligen Masken, wie eine Bestellung oder eine Installation. Der Benutzer denkt, dass er mit einem „Klick“ auf das „X“ jede Aktion storniert oder auch nicht. Der erfahrene Softwareentwickler fragt an dieser Stelle nochmals mit einem Ja-Nein-Dialog nach:
Nichts besonders, nur ein kleiner Button in der Mitte!
// kleiner Button Button btn = new Button(); btn.setText("Hallo AxxG-User"); btn.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { System.out.println("Hallo AxxG-User-Btn funktioniert"); primaryStage.setTitle("Es ist " + new Date()); } }); StackPane root = new StackPane(); root.getChildren().add(btn); Scene scene = new Scene(root, 300, 250); primaryStage.setTitle("Hallo AxxG"); primaryStage.setScene(scene); primaryStage.show();
Hier wird es Interessant. Mit der folgenden Methode fangen wir das Beenden-Event der Oberfläche ab.
primaryStage.setOnCloseRequest();
Innerhalb dieser Methode erstelle ich ein Dialog-Fenster mit einem Label und zwei Buttons.
primaryStage.setOnCloseRequest( new EventHandler<WindowEvent>() { @Override public void handle(WindowEvent event) { //Stage init final Stage dialog = new Stage(); dialog.initModality(Modality.APPLICATION_MODAL); // Frage - Label Label label = new Label("Wollen Sie wirklich das Programm beenden?"); // Antwort-Button JA Button okBtn = new Button("Ja"); okBtn.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { dialog.close(); } }); // Antwort-Button NEIN Button cancelBtn = new Button("Nein"); cancelBtn.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { primaryStage.show(); dialog.close(); } });
Wenn man die Teile zusammenfügt, kommt dieses Programm zustande:-)
import java.util.Date; import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.geometry.Pos; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.layout.HBox; import javafx.scene.layout.StackPane; import javafx.scene.layout.VBox; import javafx.stage.Modality; import javafx.stage.Stage; import javafx.stage.WindowEvent;
/** * * @author AxxG * @see http://blog.axxg.de */ public class WollenSieWirklich extends Application {
@Override public void start(final Stage primaryStage) { primaryStage.setOnCloseRequest( new EventHandler<WindowEvent>() {
@Override public void handle(WindowEvent event) { //Stage init final Stage dialog = new Stage(); dialog.initModality(Modality.APPLICATION_MODAL);
// Frage – Label Label label = new Label("Wollen Sie wirklich das Programm beenden?");
// Antwort-Button JA Button okBtn = new Button("Ja"); okBtn.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { dialog.close(); } });
// Antwort-Button NEIN Button cancelBtn = new Button("Nein"); cancelBtn.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { primaryStage.show(); dialog.close(); } });
// Layout fuer Button HBox hbox = new HBox(); hbox.setSpacing(10); hbox.setAlignment(Pos.CENTER); hbox.getChildren().add(okBtn); hbox.getChildren().add(cancelBtn);
// Layout fuer Label und hBox VBox vbox = new VBox(); vbox.setAlignment(Pos.CENTER); vbox.setSpacing(10); vbox.getChildren().add(label); vbox.getChildren().add(hbox);
// Stage befuellen Scene scene = new Scene(vbox); dialog.setScene(scene); dialog.show(); } });
// Start-Stage "normale" Stage befuellen
// kleiner Button Button btn = new Button(); btn.setText("Hallo AxxG-User"); btn.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { System.out.println("Hallo AxxG-User-Btn funktioniert"); primaryStage.setTitle("Es ist " + new Date()); } });
StackPane root = new StackPane(); root.getChildren().add(btn);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Hallo AxxG"); primaryStage.setScene(scene); primaryStage.show(); }
/** * The main() method is ignored in correctly deployed JavaFX application. * main() serves only as fallback in case the application can not be * launched through deployment artifacts, e.g., in IDEs with limited FX * support. NetBeans ignores main(). * * @param args the command line arguments */ public static void main(String[] args) { launch(args); } } [/java]
Copyright © 2012 AxxG – Alexander Gräsel
Kommentar verfassen