package io.uploader.drive.gui.dlg; import org.apache.commons.lang3.StringUtils; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.Node; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.BorderPane; import javafx.scene.layout.HBox; import javafx.scene.layout.VBox; import javafx.scene.text.Text; import javafx.stage.Modality; import javafx.stage.Stage; import javafx.stage.StageStyle; // http://stackoverflow.com/questions/8309981/how-to-create-and-show-common-dialog-error-warning-confirmation-in-javafx-2 public class MessageDialogs { private MessageDialogs () { super () ; throw new IllegalStateException () ; } ; public enum Response { NO, YES, CANCEL }; public enum MessageType { NONE, INFO, WARNING, CONFIRM, ERROR }; private static Response buttonSelected = Response.CANCEL; private static ImageView icon = new ImageView(); private final static String logo = "/images/DriveUploader32.png"; static class Dialog extends Stage { public Dialog(String title, Stage owner, Scene scene, String iconFileName) { super () ; setTitle(title); initStyle(StageStyle.UTILITY); initModality(Modality.WINDOW_MODAL); initOwner(owner); setResizable(false); setScene(scene); if (StringUtils.isEmpty(iconFileName)) { icon.setImage(new Image(getClass().getResourceAsStream(logo))); } else { icon.setImage(new Image(getClass().getResourceAsStream(iconFileName))); } } public void showDialog() { sizeToScene(); showAndWait(); } } static class Message extends Text { public Message(String msg) { super(msg); setWrappingWidth(250); } } public static Response showConfirmDialog(Stage owner, String message, String title) { return showConfirmDialog (owner, message, title, MessageType.CONFIRM) ; } private static String getIconName (MessageType type) { String iconName = null ; switch (type) { case ERROR: iconName = "/icons/Error32.png" ; break; case INFO: iconName = "/icons/Info32.png" ; break; case WARNING: iconName = "/icons/Warning32.png" ; break; case CONFIRM: iconName = "/icons/Confirm32.png" ; break; default: break; } return iconName ; } public static Response showConfirmDialog(Stage owner, String message, String title, MessageType type) { VBox vb = new VBox(); Scene scene = new Scene(vb); final Dialog dial = new Dialog(title, owner, scene, getIconName (type)); vb.setPadding(new Insets(10, 10, 10, 10)); vb.setSpacing(10); Button yesButton = new Button("Yes"); yesButton.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent e) { dial.close(); buttonSelected = Response.YES; } }); Button noButton = new Button("No"); noButton.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent e) { dial.close(); buttonSelected = Response.NO; } }); BorderPane bp = new BorderPane(); HBox buttons = new HBox(); buttons.setAlignment(Pos.CENTER); buttons.setSpacing(10); buttons.getChildren().addAll(yesButton, noButton); bp.setCenter(buttons); HBox msg = new HBox(); msg.setSpacing(15); msg.getChildren().addAll(icon, new Message(message)); vb.getChildren().addAll(msg, bp); dial.showDialog(); return buttonSelected; } public static void showMessageDialog(Stage owner, String message, String title) { showMessageDialog(owner, new Message(message), title, MessageType.NONE); } public static void showMessageDialog(Stage owner, String message, String title, MessageType type) { showMessageDialog(owner, new Message(message), title, type); } public static void showMessageDialog(Stage owner, Node message, String title, MessageType type) { VBox vb = new VBox(); Scene scene = new Scene(vb); final Dialog dial = new Dialog(title, owner, scene, getIconName (type)); vb.setPadding(new Insets(10, 10, 10, 10)); vb.setSpacing(10); Button okButton = new Button("OK"); okButton.setAlignment(Pos.CENTER); okButton.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent e) { dial.close(); } }); BorderPane bp = new BorderPane(); bp.setCenter(okButton); HBox msg = new HBox(); msg.setSpacing(5); msg.getChildren().addAll(icon, message); vb.getChildren().addAll(msg, bp); dial.showDialog(); } }