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);
}

これは、DialogBox のコンストラクターです。

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

TextField と ComboBox の値を取得するにはどうすればよいですか? 少し前のクラスで、教授が呼び出しクラス (この場合はナビゲーター) がインターフェイスを実装し、それ自体を DialogBox クラスに渡して値を取得するという手法について言及したことを少し思い出すことができます。残念ながら、私は何も見つけておらず、それがどのように行われたかを思い出せません.

4

1 に答える 1

1

ダイアログがモーダルであると仮定すると、基本的に、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();
}

これは、これら 2 つのフィールドをインスタンス変数として作成する必要があることを意味します。

于 2013-11-12T00:13:39.207 に答える