codestory

Die Anleitung zu JavaFX Alert Dialog

  1. JavaFX Alert
  2. Information Alert
  3. Warning Alert
  4. Error Alert
  5. Confirmation Alert
  6. Die Button anpassen

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
  • Hướng dẫn sử dụng JavaFX Dialog
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);
	}

}

Die Anleitungen JavaFX

Show More