Die Anleitung zu JavaFX Alert Dialog

View more categories:

1- JavaFX Alert

Die Klasse  Alert (die Warnung) ist eine Sub-Klasse der Klasse  Dialog und bietet die Unterstützung für die vorher gebauten  dialog zur leichten Anzeige um den Benutzer einen Feedback zu erinern. Deshalb ist die Klasse Alert  den Benutzer die seinem Bedarf meist entsprechende Klasse (umgekehrt mit der direkten Benutzung von Dialog).Außerdem wenn Sie den Benutzer erinern, die Text oder die Auswahlsliste zu typen (list of options), ist es besser, durch  TextInputDialog und das entsprechende  ChoiceDialog zu benutzen
Alert ist nach dem Default ein Fenster mit der Modalität (modelity) als  Modelity.WINDOW_MODAL. Allerdings können Sie durch die Methode   alert.initModality(Modality) ​​​​​​​benutzen.
Nach dem Default ist das Fenster zur Öffnung eines Alert ein Vater-Fenster des  Alert.
Sie können die Erklärung über Modelity in die folgenden Unterricht lesen
  • TODO Link!
Folgend ist das die Illustration der Struktur vom Alert-Fenster:

Header Region (die Region von  Header):

Die Region ist für die Anzeige einer kürzen Benachrichtigung und des Icon

Content Region (Die Region der Inhalt):

Nach dem Default zeigt Content Region ein  Label an, für das Sie die Textinhalt durch die Methode  alert.setContentText(String) einstellen können. Sie können eine Node in der Content Region durch alert.getDialogPane().setContent(Node) ​​​​​​​anzeigen.

Footer Region (Die Region Footer):

Die Region ist für die Anzeige der Button. Sie können die angezeigten Button anpassen

2- Information Alert

Information Alert  ist ein dialog-Fenster um die Information anzuzeigen. Unten ist das das Foto über ein Standard Information Alert 
Das Foto über ein Information Alert mit dem Default- Header Text 
Das Foto des  Information Alert hat keine  Header Text:

Zum Beispiel

InformationAlertExample.java
package org.o7planning.javafx.alert;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class InformationAlertExample extends Application {

	// Show a Information Alert with header Text
	private void showAlertWithHeaderText() {
		Alert alert = new Alert(AlertType.INFORMATION);
		alert.setTitle("Test Connection");
		alert.setHeaderText("Results:");
		alert.setContentText("Connect to the database successfully!");

		alert.showAndWait();
	}

	// Show a Information Alert with default header Text
	private void showAlertWithDefaultHeaderText() {
		Alert alert = new Alert(AlertType.INFORMATION);
		alert.setTitle("Test Connection");

		// alert.setHeaderText("Results:");
		alert.setContentText("Connect to the database successfully!");

		alert.showAndWait();
	}

	// Show a Information Alert without Header Text
	private void showAlertWithoutHeaderText() {
		Alert alert = new Alert(AlertType.INFORMATION);
		alert.setTitle("Test Connection");

		// Header Text: null
		alert.setHeaderText(null);
		alert.setContentText("Connect to the database successfully!");

		alert.showAndWait();
	}

	@Override
	public void start(Stage stage) {

		VBox root = new VBox();
		root.setPadding(new Insets(10));
		root.setSpacing(10);

		Button button1 = new Button("Information Alert");
		Button button2 = new Button("Information Alert with default Header Text");
		Button button3 = new Button("Information Alert without Header Text");

		button1.setOnAction(new EventHandler<ActionEvent>() {

			@Override
			public void handle(ActionEvent event) {
				showAlertWithHeaderText();
			}
		});

		button2.setOnAction(new EventHandler<ActionEvent>() {

			@Override
			public void handle(ActionEvent event) {
				showAlertWithDefaultHeaderText();
			}
		});

		button3.setOnAction(new EventHandler<ActionEvent>() {

			@Override
			public void handle(ActionEvent event) {
				showAlertWithoutHeaderText();
			}
		});

		root.getChildren().addAll(button1, button2, button3);

		Scene scene = new Scene(root, 450, 250);
		stage.setTitle("JavaFX Information Alert (o7planning.org)");
		stage.setScene(scene);

		stage.show();

	}

	public static void main(String args[]) {
		launch(args);
	}

}

3- Warning Alert

Warning Alert ist so gleich wie ein Information Alert, außer seinem Icon und Benutzungszweck. Warning Alert wird benutzt um den Benutzer die Risiken oder potentialen Probleme zu warnen troztdem sie passieren nicht.
Das Foto eines Standard-  Warning Alert :
Das Foto eines Warning Alert mit der Default- Header Text:
Das Foto eines Warning Alert ohne die  Header Text:

Zum Beispiel

WarningAlertExample.java
package org.o7planning.javafx.alert;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class WarningAlertExample extends Application {

	// Show a Warning Alert with header Text
	private void showAlertWithHeaderText() {
		Alert alert = new Alert(AlertType.WARNING);
		alert.setTitle("Warning alert");
		alert.setHeaderText("Battery Status:");
		alert.setContentText("The battery charge is low!");

		alert.showAndWait();
	}

	// Show a Warning Alert with default header Text
	private void showAlertWithDefaultHeaderText() {
		Alert alert = new Alert(AlertType.WARNING);
		alert.setTitle("Warning alert");

		// alert.setHeaderText("Battery Status:");
		alert.setContentText("The battery charge is low!");

		alert.showAndWait();
	}

	// Show a Warning Alert without Header Text
	private void showAlertWithoutHeaderText() {
		Alert alert = new Alert(AlertType.WARNING);
		alert.setTitle("Warning alert");

		// Header Text: null
		alert.setHeaderText(null);
		alert.setContentText("The battery charge is low!");

		alert.showAndWait();
	}

	@Override
	public void start(Stage stage) {

		VBox root = new VBox();
		root.setPadding(new Insets(10));
		root.setSpacing(10);

		Button button1 = new Button("Warning Alert");
		Button button2 = new Button("Warning Alert with default Header Text");
		Button button3 = new Button("Warning Alert without Header Text");

		button1.setOnAction(new EventHandler<ActionEvent>() {

			@Override
			public void handle(ActionEvent event) {
				showAlertWithHeaderText();
			}
		});

		button2.setOnAction(new EventHandler<ActionEvent>() {

			@Override
			public void handle(ActionEvent event) {
				showAlertWithDefaultHeaderText();
			}
		});

		button3.setOnAction(new EventHandler<ActionEvent>() {

			@Override
			public void handle(ActionEvent event) {
				showAlertWithoutHeaderText();
			}
		});

		root.getChildren().addAll(button1, button2, button3);

		Scene scene = new Scene(root, 450, 250);
		stage.setTitle("JavaFX Warning Alert (o7planning.org)");
		stage.setScene(scene);

		stage.show();

	}

	public static void main(String args[]) {
		launch(args);
	}

}

4- Error Alert

Error Alert ist so gleich wie Informtion Alert und  Warning Alert, außer das Icon und der Benutzungszweck. Error Alert wird benutzt um ein passiertes Problem zu melden
Um ein  Error Alert zu erstellen sollen Sie AlertType.ERROR ​​​​​​​benutzen.
* Error Alert *
Alert alert = new Alert(AlertType.ERROR);

alert.setTitle("Error alert");
alert.setHeaderText("Can not add user");
alert.setContentText("The 'abc' user does not exists!");

alert.showAndWait();
Wenn der Fehler in der Praxis passiert, zeigen Sie ein Error Alert für den Benutzer an, das die kürzen Information umfasst. Und es kann auch die detailierte Information über den Fehler einschließen. In diesem Fall sollen Sie die anpassende Inhalt für Content Region einstellen

Zum Beispiel

ErrorAlertExample2.java
package org.o7planning.javafx.alert;

import java.io.PrintWriter;
import java.io.StringWriter;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class ErrorAlertExample2 extends Application {

	private void showError(Exception e) {
		Alert alert = new Alert(AlertType.ERROR);
		alert.setTitle("Error alert");
		alert.setHeaderText(e.getMessage());

		VBox dialogPaneContent = new VBox();

		Label label = new Label("Stack Trace:");

		String stackTrace = this.getStackTrace(e);
		TextArea textArea = new TextArea();
		textArea.setText(stackTrace);

		dialogPaneContent.getChildren().addAll(label, textArea);

		// Set content for Dialog Pane
		alert.getDialogPane().setContent(dialogPaneContent);

		alert.showAndWait();
	}

	private void doSomething() {
		try {
			// An error has occurred here.
			int a = 100 / 0;
		} catch (Exception e) {
			showError(e);
		}
	}

	private String getStackTrace(Exception e) {
		StringWriter sw = new StringWriter();
		PrintWriter pw = new PrintWriter(sw);
		e.printStackTrace(pw);
		String s = sw.toString();
		return s;
	}

	@Override
	public void start(Stage stage) {

		VBox root = new VBox();
		root.setPadding(new Insets(10));
		root.setSpacing(10);

		Button button1 = new Button("Error Alert");

		button1.setOnAction(new EventHandler<ActionEvent>() {

			@Override
			public void handle(ActionEvent event) {
				doSomething();
			}
		});

		root.getChildren().addAll(button1);

		Scene scene = new Scene(root, 450, 250);
		stage.setTitle("JavaFX Error Alert (o7planning.org)");
		stage.setScene(scene);

		stage.show();

	}

	public static void main(String args[]) {
		launch(args);
	}

}

5- Confirmation Alert

Confirmation Alert erscheint um dem Benutzer die Bestätigung einer Funktionsdurchführung zu fordern. Nach dem Default hat  Confirmation Alert 2 Auswahl OK oder  Cancel.

Zum Beispiel

ConfirmationAlertExample.java
package org.o7planning.javafx.alert;

import java.util.Optional;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonType;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class ConfirmationAlertExample extends Application {

   private Label label;

   private void showConfirmation() {

      Alert alert = new Alert(AlertType.CONFIRMATION);
      alert.setTitle("Delete File");
      alert.setHeaderText("Are you sure want to move this file to the Recycle Bin?");
      alert.setContentText("C:/MyFile.txt");

      // option != null.
      Optional<ButtonType> option = alert.showAndWait();

      if (option.get() == null) {
         this.label.setText("No selection!");
      } else if (option.get() == ButtonType.OK) {
         this.label.setText("File deleted!");
      } else if (option.get() == ButtonType.CANCEL) {
         this.label.setText("Cancelled!");
      } else {
         this.label.setText("-");
      }
   }

   @Override
   public void start(Stage stage) {

      VBox root = new VBox();
      root.setPadding(new Insets(10));
      root.setSpacing(10);

      this.label = new Label();

      Button button = new Button("Click here to delete file");

      button.setOnAction(new EventHandler<ActionEvent>() {

         @Override
         public void handle(ActionEvent event) {
            showConfirmation();
         }
      });

      root.getChildren().addAll(button, label);

      Scene scene = new Scene(root, 450, 250);
      stage.setTitle("JavaFX Confirmation Alert (o7planning.org)");
      stage.setScene(scene);

      stage.show();

   }

   public static void main(String args[]) {
      launch(args);
   }

}

6- Die Button anpassen

Alert dialog erlaubt Sie bei der Anpassung der angezeigten Button auf die  Footer Region. Unten ist das ein Beispiel

Zum Beispiel

ConfirmationAlertExample2.java
package org.o7planning.javafx.alert;

import java.util.Optional;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonType;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class ConfirmationAlertExample2 extends Application {

	private Label label;

	private void showConfirmation() {

		Alert alert = new Alert(AlertType.CONFIRMATION);
		alert.setTitle("Select");
		alert.setHeaderText("Choose the sport you like:");

		ButtonType football = new ButtonType("Football");
		ButtonType badminton = new ButtonType("Badminton");
		ButtonType volleyball = new ButtonType("Volleyball");

		// Remove default ButtonTypes
		alert.getButtonTypes().clear();

		alert.getButtonTypes().addAll(football, badminton, volleyball);

		// option != null.
		Optional<ButtonType> option = alert.showAndWait();

		if (option.get() == null) {
			this.label.setText("No selection!");
		} else if (option.get() == football) {
			this.label.setText("You like Football");
		} else if (option.get() == badminton) {
			this.label.setText("You like Badminton");
		} else if (option.get() == volleyball) {
			this.label.setText("You like Volleyball");
		} else {
			this.label.setText("-");
		}
	}

	@Override
	public void start(Stage stage) {

		VBox root = new VBox();
		root.setPadding(new Insets(10));
		root.setSpacing(10);

		this.label = new Label();

		Button button = new Button("Click here to select a Sport");

		button.setOnAction(new EventHandler<ActionEvent>() {

			@Override
			public void handle(ActionEvent event) {
				showConfirmation();
			}
		});

		root.getChildren().addAll(button, label);

		Scene scene = new Scene(root, 450, 250);
		stage.setTitle("JavaFX Confirmation Alert (o7planning.org)");
		stage.setScene(scene);

		stage.show();

	}

	public static void main(String args[]) {
		launch(args);
	}

}

View more categories: