package com.plugin.awesomejava.UIApp; import java.io.PrintWriter; import java.io.StringWriter; import java.util.Optional; import javafx.application.Platform; import javafx.embed.swing.JFXPanel; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.control.Alert; import javafx.scene.control.ButtonType; import javafx.scene.control.Label; import javafx.scene.control.TextArea; import javafx.scene.layout.GridPane; import javafx.scene.layout.Priority; import javax.swing.SwingUtilities; public class JFxBuilder { private DialogObject Dialog = null; public JFxBuilder() { } public JFxBuilder(DialogObject Dialog) { this.Dialog = Dialog; } private void initAndShowGUI() { final JFXPanel fxPanel = new JFXPanel(); Platform.runLater(new Runnable() { @Override public void run() { initFX(fxPanel); if (Dialog != null) { createAlertDialog(Dialog); } } }); } private void initFX(JFXPanel fxPanel) { // This method is invoked on the JavaFX thread Group root = new Group(); Scene scene = new Scene(root); fxPanel.setScene(scene); } private void createAlertDialog(DialogObject dialog) { Alert alert = new Alert(dialog.getType()); alert.setTitle(dialog.getTitle()); alert.setHeaderText(dialog.getHeader()); alert.setContentText(dialog.getContent()); Optional<ButtonType> result = alert.showAndWait(); if (result.get() == ButtonType.OK) { System.exit(0); } else { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); dialog.getexception().printStackTrace(pw); String exceptionText = sw.toString(); Label label = new Label("The exception stacktrace was:"); TextArea textArea = new TextArea(exceptionText); textArea.setEditable(false); textArea.setWrapText(true); textArea.setMaxWidth(Double.MAX_VALUE); textArea.setMaxHeight(Double.MAX_VALUE); GridPane.setVgrow(textArea, Priority.ALWAYS); GridPane.setHgrow(textArea, Priority.ALWAYS); GridPane expContent = new GridPane(); expContent.setMaxWidth(Double.MAX_VALUE); expContent.add(label, 0, 0); expContent.add(textArea, 0, 1); alert.getDialogPane().setExpandableContent(expContent); alert.showAndWait(); } } public void setDialog(DialogObject Dialog) { this.Dialog = Dialog; } public DialogObject getDialog() { return Dialog; } public void Invoke() { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { initAndShowGUI(); } }); } }