2012-08-11 40 views
5

我用JavaFX Scene Builder將一個ChoiceBox放入fxml中。哪個ChoiceBox-事件可供選擇?

FXML有一個控制器分配給它。

我的問題是:如果我想知道更改的值,我需要註冊哪個事件?

onInputMethodTextChanged="#languageSelectionModified" 

這不符合下面的代碼

public void languageSelectionModified(Event event) { 
    ChoiceBox<String> box = (ChoiceBox<String>) event.getSource(); 
    System.out.println(box.getValue()); 
} 

和初始點擊這僅適用於工作(即打開列表,而不是選擇項目時):

onMouseClicked="#languageSelectionModified" 

雖然鼠標事件永遠不會是一個好的選擇,因爲觸摸或鍵盤是輸入法的情況下,它仍然證明可以到達System.out。

我是絕對不知道在哪裏的東西documentated(默認Java的API中,他們都沒有)

回答

4

添加監聽到你的@FXML在你的控制器注入choicebox:

choicebox.getSelectionModel().selectedItemProperty().addListener(choiceboxSelectionChangeListener); 

你也可以結合到所選擇的項目:

label.textProperty().bind(choicebox.getSelectionModel().selectedItemProperty()); 

以下是在用於FXML定義的組合框的控制器鉤住一個收聽者的example。 ChoiceBox的邏輯幾乎完全相同。

+0

感謝您的回覆!這很好。所以沒有辦法通過'正常的'FXML事件來做到這一點。如果您可以告訴我可以在哪裏查找FXML文件的現有(可定義的)事件,我將您的答案標記爲回答我的問題。 – Gundon 2012-08-11 22:40:53

+0

不,您無法使用JavaFX 2.0至2.2在FXML中查找此事件。 – jewelsea 2012-08-11 22:52:49

+0

即使choicebox的值由代碼設置(在我的情況下,我有一個選項可以填充子選擇框的形式),選擇模型事件也會觸發,我希望有一種乾淨的方法來區分「用戶驅動的更改」和代碼驅動的。 – Mikeb 2015-07-28 16:39:13