Java Tutorial #58

JavaFX Alert und Dialog-Boxen

2023-05-27 | credit: Danny/ adobe.stock

Thema in Kurzform

Alert- und Dialog-Boxen sind aufpoppende Fenster, die dem Nutzer Informationen geben oder zu einer Interaktion auffordern. 

Informations-Box

Die einfachste Alert-Box ist die Info-Box. Diese gibt einen optionalen Header, eine Textinformation und einen "OK"-Button aus. Super simpel: 

JavaFX Dialog-Box Information OK

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. 

  • Mit der Methode setTitle() legen wir dabei den Titel der Box fest.
  • setHeaderText() legt den Header-Bereich fest und lässt sich auch ganz ausblenden, wenn anstatt des Strings das Argument null eingetragen wird.  
  • Den eigentlichen Text-Inhalt legt man mit setContentText() fest.
  • showAndWait() zeigt die fertige Dialogbox und wartet auf die Reaktion des Nutzers. 

Warning Box

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:

JavaFX Warning Dialog

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

Error Box

Mit Alert.AlertType.ERROR lassen sich Alert-Boxen vom Typ Error erzeugen: 

Java Error Dialog Fenster

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

Bestätigungs-Dialog

Die bisherigen Alert-Boxen waren lediglich Hinweise (Information, Warnung, Fehler). Die nun folgende ermöglicht erstmals eine Auswahlmöglichkeit des Nutzers: 

Java Confirmation Dialog

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. 

Mehrfach-Auswahl

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:

Java Confirmation Dialog

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. 

Text Eingabe-Fenster

Um dem User die Möglichkeit zu geben, Text an das Programm zu senden, steht die Klasse TextInputDialog zur Verfügung:

Java Text-Eingabefeld

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

Passwort-Eingabe

Zu guter letzt zeigen wir dir noch eine Dialog-Box zur Eingabe von Passwörtern: 

JavaFX Passwort Fenster

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 🙂

Werbung

Java lernen

Werde zum Java Profi!

PHP Lernen

Lerne serverbasierte Programmierung

JavaScript lernen

Skille dein Webcoding

FALCONBYTE.NET

Handmade with 🖤️

© 2018-2023 Stefan E. Heller

Impressum | Datenschutz | Changelog

Falconbyte Youtube Falconbyte GitHub facebook programmieren lernen twitter programmieren lernen discord programmieren lernen