在 javafx.scene.control 套件路徑下,如下元件有更動屬性都會產生異動事件(Change Event),
TextField/CheckBox/ComboBox/RadioButton/ChoiceBox/Slider/ListView
可對元件屬性註冊異動事件處理器(Change Event Handler),接收異動事件,進行處理。
註冊異動事件處理器寫法,和註冊動作事件處理器寫法不同,
須利用.xxxProperty()方法先取得元件屬性,
再利用.addListener 方法為屬性添加異動監聽器,寫法如下:
textField.textProperty().addListener((observable, oldValue, newValue) -> {
System.out.println("value changed from " + oldValue + " to " + newValue);
});
或
textField.textProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue observable,
String oldValue, String newValue) {
System.out.println("value changed from " + oldValue + " to " + newValue);
}
});
註1: 至於其他元件的異動事件處理器註冊,須搭配各元件的屬性取法不同,寫法如下:
checkBox.selectedProperty().addListener(...)
comboBox.valueProperty().addListener(...)
radioButton.selectedProperty().addListener(...)
choiceBox.getSelectionModel().selectedItemProperty().addListener(...)
slider.valueProperty().addListener(...)
listView.getSelectionModel().selectedItemProperty().addListener(...)
註2: JavaFX 有 javafx.event.ActionEvent 動作事件類別及物件,但沒有異動事件類別。
元件一旦有動作事件,通常屬於高階離散事件,立即一次性處理完即可,
故設計上註冊處理器寫法較簡單,只允許對元件呼叫如下方法,掛上單一動作監聽器。
setOnAction(event -> {...});
註3: 元件屬性一旦有異動事件,通常屬於低階連續事件,須要密集多次處理狀態變化,
故設計上註冊處理器寫法較細緻彈性,可對屬性呼叫如下方法,掛上多個異動監聽器。
addListener(
new javafx.beans.value.ChangeListener(
(ob, oldV, newV) -> {...}
)
);
how to write change event handlers for JavaFX components
訂閱:
張貼留言 (Atom)
start versus restart for docker containers
Docker start vs restart :差異快速看懂 docker start 與 docker restart 都能讓容器跑起來, 但語意與清理範圍完全不同。 1.指令行為比較 指令 行為說明 適用狀態 ...
沒有留言:
張貼留言