我有一个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);
}
这是我的DialogBox的构造函数。
JFXPanel fxPanel = new JFXPanel();
testBox = new DialogBox(jdialog);
fxPanel.setScene(new Scene(testBox));
jdialog.add(fxPanel);
jdialog.setVisible(true);
如何检索TextField和ComboBox中的值?我可以稍微回想起一个很久以前的课程,在该课程中,教授提到了一种涉及调用类(在本例中为Navigator)的技术,该技术实现接口,然后将自身传递给DialogBox类以检索值。不幸的是我什么都没找到,也记不清它是如何完成的。
最佳答案
假设对话框是模态的,基本上,一旦按下btnOk
或btnCancel
按钮,您需要更改某种状态标志,可以查询该状态标志以确定如何关闭对话框...
// 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();
}
这意味着您将需要创建这两个字段作为实例变量