JavaFX-使用fxml创建自定义对话框

JavaFX-使用fxml创建自定义对话框,javafx,dialog,Javafx,Dialog,我是javafx新手,我尝试创建自定义对话框/警报。问题是,我正在使用Scene Builder设计GUI,我想在每次加载fxml文件时修改对话框(即更改标题、标签文本等),所以我想知道是否有方法发送参数和修改舞台/场景,或者其他任何方法可以实现这一点 更具体地说,假设我想在程序中的任何地方处理一个错误,因此我加载一个新的fxml文件来表示我创建的错误对话框,并根据需要处理的错误类型修改其中的组件,类似于,例如,JOptionPane.showMessageDialog(…)在swing中。对于

我是javafx新手,我尝试创建自定义对话框/警报。问题是,我正在使用Scene Builder设计GUI,我想在每次加载fxml文件时修改对话框(即更改标题、标签文本等),所以我想知道是否有方法发送参数和修改舞台/场景,或者其他任何方法可以实现这一点


更具体地说,假设我想在程序中的任何地方处理一个错误,因此我加载一个新的fxml文件来表示我创建的错误对话框,并根据需要处理的错误类型修改其中的组件,类似于,例如,JOptionPane.showMessageDialog(…)在swing中。

对于您描述的用例,您可以只使用API或作为其一部分的专用类

对于您提出的更一般的问题:

我想知道是否有办法发送参数并更改舞台/场景

方法是使用文档中描述的机制

简而言之,为加载FXML文件所需的UI类型创建一个子类,并定义所需的属性,例如

public class ExceptionPane extends BorderPane {

    private final ObjectProperty<Exception> exception ;

    public ObjectProperty<Exception> exceptionProperty() {
        return exception ;
    }

    public final Exception getException() {
        return exceptionProperty().get();
    }

    public final void setException(Exception exception) {
        exceptionProperty().set(exception);
    }

    @FXML
    private final TextArea stackTrace ;
    @FXML
    private final Label message ;

    public ExceptionPane() throws Exception {

        FXMLLoader loader = new FXMLLoader(getClass().getResource("path/to/fxml"));
        loader.setRoot(this);
        loader.setController(this);

        loader.load();

        exception.addListener((obs, oldException, newException) -> {
            if (newException == null) {
                message.setText(null);
                stackTrace.setText(null);
            } else {
                message.setText(newException.getMessage());
                StringWriter sw = new StringWriter();
                newException.printStackTrace(new PrintWriter(sw));
                stackTrace.setText(sw.toString());
            }
        });
    }
}



为什么不使用or?James_D,因为我需要所有不同的设计,而且每个信息都应该用另一种语言(不是英语)非常确定他们可以做到这一点,但我会添加一个答案来解决更一般的问题。非常有帮助。谢谢:)。这是旧版本的fxml吗?如果我将其放入文件中,我的场景生成器将无法打开fxml。它抱怨外汇:prefix@MaxiWu这是有效的FXML。我知道早期版本的Scene Builder在
方面有问题;我已经有一段时间没有尝试使用场景生成器了。你们有什么版本?我用的是GLUON最新的版本。也许我遗漏了一些重要的东西,我对其进行了修改,并且scenebuild工作正常。
try {
    // some code...
} catch (Exception exc) {
    ExceptionPane excPane = new ExceptionPane();
    excPane.setException(exc);
    Stage stage = new Stage();
    stage.setScene(new Scene(excPane));
    stage.show();
}