Thema in Kurzform
Alert- und Dialog-Boxen sind aufpoppende Fenster, die dem Nutzer Informationen geben oder zu einer Interaktion auffordern.
Die einfachste Alert-Box ist die Info-Box. Diese gibt einen optionalen Header, eine Textinformation und einen "OK"-Button aus. Super simpel:
Alert alert = new Alert(Alert.AlertType.INFORMATION);
alert.setTitle("Information Dialog");
alert.setHeaderText("Header-Bereich"); // oder null
alert.setContentText("You can be whoever you wanna be here");
alert.showAndWait();
Wie du siehst, wird die Info-Box erzeugt, indem wir ein neues Alert-Objekt mit der statischen Variable Alert.AlertType.INFORMATION erzeugen.
Eine Alert-Box als Warnhinweis lässt sich ähnlich einfach erstellen wie eine Info-Box. Wir müssen bei der Objekterzeugung einfach nur das Argument Alert.AlertType.WARNING in die runden Klammern setzen:
Alert alert = new Alert(Alert.AlertType.WARNING);
alert.setTitle("Warning Dialog");
alert.setHeaderText("Header-Bereich"); // oder null
alert.setContentText("The sunny place for shady people. A crowded room where nobody goes");
alert.showAndWait();
Mit Alert.AlertType.ERROR lassen sich Alert-Boxen vom Typ Error erzeugen:
Alert alert = new Alert(Alert.AlertType.ERROR);
alert.setTitle("Error Dialog");
alert.setHeaderText("Header-Bereich"); // oder null
alert.setContentText("Love you now, but not tomorrow");
alert.showAndWait();
Die bisherigen Alert-Boxen waren lediglich Hinweise (Information, Warnung, Fehler). Die nun folgende ermöglicht erstmals eine Auswahlmöglichkeit des Nutzers:
Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
alert.setTitle("Confirmation Dialog");
alert.setHeaderText("Header-Bereich"); // oder null
alert.setContentText("Dallas? Korben Dallas?");
Optional<ButtonType> result = alert.showAndWait();
if (result.get() == ButtonType.OK){
// ... User klickt auf OK
} else {
// ... User klickt auf CANCEL
}
Wie du siehst, kann der Nutzer auf OK oder Abbrechen klicken. Seine Auswahl wird dann durch eine if/ else-Struktur im Code entsprechend verarbeitet.
Manchmal reichen zwei Auswahl-Buttons nicht aus. Für solche Fälle gibt es die Möglichkeit, dem CONFIRMATION-Fenster zusätzliche Buttons hinzuzufügen:
Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
alert.setTitle("Confirmation Dialog with Custom Actions");
alert.setHeaderText("Header-Bereich"); // oder null
alert.setContentText("Option auswählen");
ButtonType buttonTypeOne = new ButtonType("1");
ButtonType buttonTypeTwo = new ButtonType("2");
ButtonType buttonTypeThree = new ButtonType("3");
ButtonType buttonTypeCancel = new ButtonType("keine", ButtonBar.ButtonData.CANCEL_CLOSE);
alert.getButtonTypes().setAll(buttonTypeOne, buttonTypeTwo, buttonTypeThree, buttonTypeCancel);
Optional<ButtonType> result = alert.showAndWait();
if (result.get() == buttonTypeOne){
// User klickt den ersten Button
}
else if (result.get() == buttonTypeTwo) {
// User klickt den zweiten Button
}
else if (result.get() == buttonTypeThree) {
// User klickt den dritten Button
}
else {
// User klickt den "keine"(chancel)-Button
}
Diese Alert-Box unterscheidet sich technisch von den bisherigen, da wir 4 Objekte vom Typ ButtonType erstellen und diese dann der Alert-Box mit der Methode getButtonTypes().setAll hinzufügen. Am Ende wird mit einer Verzweigungsstruktur geprüft, welcher der 4 Buttons vom User geklickt wurde.
Um dem User die Möglichkeit zu geben, Text an das Programm zu senden, steht die Klasse TextInputDialog zur Verfügung:
TextInputDialog dialog = new TextInputDialog();
dialog.setTitle("Text Input Dialog");
dialog.setHeaderText("Header-Bereich"); // oder null
dialog.setContentText("Gib einen Text ein");
Optional<String> result = dialog.showAndWait();
if (result.isPresent()) {
System.out.println("Eingabe: " + result.get());
}
}
Zu guter letzt zeigen wir dir noch eine Dialog-Box zur Eingabe von Passwörtern:
Dialog<String> dialog = new Dialog<>();
dialog.setTitle("Passwort-Eingabe");
dialog.setHeaderText("Bitte gib das Passwort ein");
dialog.getDialogPane().getButtonTypes().addAll(ButtonType.OK, ButtonType.CANCEL);
PasswordField pwd = new PasswordField();
HBox content = new HBox();
content.setAlignment(Pos.CENTER_LEFT);
content.setSpacing(10);
content.getChildren().addAll(new Label("Passwort:"), pwd);
dialog.getDialogPane().setContent(content);
dialog.setResultConverter(dialogButton -> {
if (dialogButton == ButtonType.OK) {
return pwd.getText();
}
return null;
});
Optional<String> result = dialog.showAndWait();
if (result.isPresent()) {
System.out.println(result.get());
}
Der Code ist hier etwas komplexer, wir verbauen nämlich eine HBox mit einem klassischen PasswordField in den Content-Bereich der Dialog-Box.
Aber auch das bekommen wir gut hin 🙂
Java Basics
[Java einrichten] [Variablen] [Primitive Datentypen] [Operatoren] [if else] [switch-case] [Arrays] [Schleifen]
Objektorientierung
[Einstieg] [Variablen ] [Konstruktor] [Methoden] [Rekursion] [Statische Member] [Initializer] [Pass-by-value] [Objektsammlungen] [Objektinteraktion] [Objekte löschen]
Klassenbibliothek
[Allgemeines] [String ] [Math] [Wrapper] [Scanner] [java.util.Arrays] [Date-Time-API]
Vererbung
[Einstieg Vererbung] [Konstruktoren bei Vererbung ] [Der protected Zugriffsmodifikator] [Abstrakte Klassen und Methoden] [Polymorphie in Java] [Typumwandlung] [Die Klasse Object] [Die toString()-Methode] [Objekte vergleichen] [Was ist ein Interface?]