0

我有一个 Navigator 类和一个从 GridPane 继承的自定义 DialogBox 类。

    public DialogBox(final JDialog jdialog) {
    Label lblKeyName = new Label("Enter New Key");
    Label lblKeyType = new Label("Select Key Type");
    TextField txtKeyName = new TextField();
    ComboBox cboKeyType = new ComboBox();
    txtKeyName.getText();
    Button btnOk = new Button("OK");
    Button btnCancel = new Button("Cancel");

    btnOk.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent event) {
            //TODO: Somehow return the values in the ComboBox and TextField
        }           
    });

    btnCancel.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent event) {
            jdialog.setVisible(false);
        }           
    });

    txtKeyName.prefWidth(300);
    cboKeyType.prefWidth(300);

    this.add(lblKeyName, 0, 0);
    this.add(lblKeyType, 0, 1);
    this.add(txtKeyName, 1, 0);
    this.add(cboKeyType, 1, 1);
    this.add(btnOk, 0, 2);
    this.add(btnCancel, 1, 2);
}

这是我的对话框的构造函数。

    JFXPanel fxPanel = new JFXPanel();
    testBox = new DialogBox(jdialog);
    fxPanel.setScene(new Scene(testBox));
    jdialog.add(fxPanel);
    jdialog.setVisible(true);

如何检索 TextField 和 ComboBox 中的值?我可以稍微回忆一下很久以前的课程,教授提到了一种涉及调用类(在本例中为 Navigator)实现接口然后将自身传递给 DialogBox 类以检索值的技术。不幸的是,我没有找到任何东西,也不记得它是如何完成的。

4

1 回答 1

1

假设对话框是模态的,基本上,一旦btnOkbtnCancel按钮被按下,您需要更改某种状态标志,您可以询问以确定对话框是如何关闭的......

// This will also handle the use case where the user presses the "x" button...
private boolean wasCancelled = true;

//...

public boolean wasCancelled() {
    return wasCancelled;
}

在您的动作侦听器中,您需要适当地设置状态。

btnOk.setOnAction(new EventHandler<ActionEvent>() {
    @Override
    public void handle(ActionEvent event) {
        wasCancelled = false;
        jdialog.setVisible(false);
    }           
});

btnCancel.setOnAction(new EventHandler<ActionEvent>() {
    @Override
    public void handle(ActionEvent event) {
        wasCancelled = true;
        jdialog.setVisible(false);
    }           
});

现在,一旦对话框返回,您需要检查此标志...

jdialog.add(fxPanel); 
jdialog.setVisible(true);
if (!jdialog.wasCancelled()) {
    //...
}

然后,您需要提供“getter”方法以允许调用者从对话框中提取值...

public String getKey() {
    return txtKeyName.getText();
}

public String getType() {
    return cboKeyType.getSelectionModel().getValue();
}

这意味着您需要将这两个字段创建为实例变量

于 2013-11-12T00:13:39.207 回答