2017-02-05 10 views
0

私はグラフィックノードとして埋め込まComboBoxButtonを持っている:ComboBoxのため埋め込みコンボボックスアクションをボタンアクションと別に処理するにはどうすればよいですか?

<Button alignment="CENTER_RIGHT" contentDisplay="RIGHT" mnemonicParsing="false" onAction="#handleQuickNote" text="QuickNote"> 
    <graphic> 
     <ComboBox fx:id="cboQuickNoteList" prefWidth="5.0" /> 
    </graphic> 
</Button> 

デフォルトの動作では、項目が選択されたときにボタンのonHandleメソッドをトリガーするように思われます。

ComboBoxで別のリスナーを使用しようとしましたが、ボタンの機能が終了した後に呼び出されたようです。

ボタンのハンドラ:

@FXML 
private void handleQuickNote() { 
    // Attempt to create new "QuickNote Transaction" 
    Global.transactionListController.addTransaction("QuickNote"); 
} 

コンボボックスのリスナー:

// Add listener to the ComboBox to override the button function 
    cboQuickNoteList.valueProperty().addListener((observable, oldValue, newValue) -> { 
     if (newValue != null) { 
      // Create new QuickNotes transaction 
      QuickNoteController newQuickNoteTransaction = new QuickNoteController(); 
      newQuickNoteTransaction.setQuickNote(newValue); 
     } 
    }); 

がどのように項目がコンボボックスから選択された場合にボタンのハンドラをキャンセルするに行きますか?

+0

あなたがボタン内にコンボボックスを持っていない理由:initializeメソッド内

? – ItachiUchiha

+0

私のアプリケーションの設計と機能に合っています。私はそれらを分けることができますが、ComboBoxをボタン内に保つことを好むでしょう。 – Zephyr

+1

あなたの機能が望んでいるものがわかりませんが、あなたが現在持っているものにもっと良い解決策が必要であると確信しています。 AFAIT、あなたの現在のアプローチでは、ボタンかComboBoxをクリックしたいかどうかを知る方法がないようです。さらに、ボタンのアクションハンドラが最初に呼び出されるため、フィルタリングするのがさらに難しくなります。 – ItachiUchiha

答えて

1

ComboBoxonActionイベントがあります。これにより、Buttonも受信できなくなります。

cboQuickNoteList.setOnAction(ActionEvent::consume); 
+0

これは完璧だった、@ fabian。ありがとうございました! – Zephyr

関連する問題