When programming a graphical user interface (GUI) there are occasions where you’ll need a simple popup dialog to communicate with the user. In Swing (the predecessor of JavaFX) there is a convenient class called JOptionPane for such dialogs. A similar class doesn’t exist in JavaFX 2.x (yet).
Fortunately, the authors of JavaFX published some user interface controls they are currently working on. Those controls might be added in a future version of JavaFX.
One of those ui controls is a class called Dialogs.java
which is exactly what we need.
How To Use the Dialogs
- Download the newest javafx-dialogs-x.x.x.jar file from my GitHub Page. I put all necessary classes, css files and images inside this jar.
- Add the jar file to your project (usually inside a lib subfolder).
- Add the jar file to the project’s classpath: In Eclipse right-click on the jar file | Build Path | Add to Build Path. Now Eclipse knows about the library.
- Then add one of the following lines:
Information Dialog
Dialogs.showInformationDialog(stage, "I have a great message for you!", "Information Dialog", "title");
Warning Dialog
Dialogs.showWarningDialog(stage, "Careful with the next step!", "Warning Dialog", "title");
Error Dialog
Dialogs.showErrorDialog(stage, "Ooops, there was an error!", "Error Dialog", "title");
You may also provide an exception:
Dialogs.showErrorDialog(stage, "Ooops, there was an error!", "Error Dialog With Exception", "title", new FileNotFoundException("Could not find file blabla.txt"));
Confirm Dialog
DialogResponse response = Dialogs.showConfirmDialog(stage, "Do you want to continue?", "Confirm Dialog", "title");
You may provide DialogOptions
like this:
DialogResponse response = Dialogs.showConfirmDialog(stage, "Are you ok with this?", "Confirm Dialog With Options", "title", DialogOptions.OK_CANCEL);
The response will either be DialogResponse.YES
, DialogResponse.NO
, DialogResponse.CANCEL
, DialogResponse.OK
, or DialogResponse.CLOSED
.
Input Dialog
String input = Dialogs.showInputDialog(stage, "Please enter your name:", "Input Dialog", "title");
If you provide some choices, a combobox will be displayed:
List<String> choices = new ArrayList<>(); choices.add("a"); choices.add("b"); choices.add("c"); String input = Dialogs.showInputDialog(stage, "Choose your color:", "Input Dialog With Choices", "title", "b", choices);
Custom Dialog
Since JavaFX dialogs version 0.0.3 there is support for custom dialogs (thanks to Guldner for providing the patch).
Here is an example of how to use custom dialogs to create a login form:
GridPane grid = new GridPane(); grid.setHgap(10); grid.setVgap(10); grid.setPadding(new Insets(0, 10, 0, 10)); final TextField username = new TextField(); username.setPromptText("Username"); final PasswordField password = new PasswordField(); password.setPromptText("Password"); grid.add(new Label("Username:"), 0, 0); grid.add(username, 1, 0); grid.add(new Label("Password:"), 0, 1); grid.add(password, 1, 1); String usernameResult; String passwordResult; CallbackmyCallback = new Callback () { @Override public Void call(Void param) { usernameResult = username.getText(); passwordResult = password.getText(); return null; } }; DialogResponse resp = Dialogs.showCustomDialog(stage, grid, "Please log in", "Login", DialogOptions.OK_CANCEL, myCallback); System.out.println("Custom Dialog: User clicked: " + resp); //You must check the resp, since input fields' texts are returned regardless of what button was pressed. (ie. If user clicked 'Cancel' disregard the input) System.out.println("Custom Dialog: Fields set from custom dialog: " + usernameResult + "/" + passwordResult);