JavaFX中事件机制和Swing、Android、前端JavaScript等等都差不多,这里简单介绍一下。
要注意的是,实际上,JavaFX中除了绑定事件监听器,很多包含数据的控件还能通过数据绑定实现交互(这也是JavaFX相比传统GUI框架的改进之处),数据绑定将在后续章节介绍。
下面代码给按钮绑定一个点击监听,按钮点击时handle
方法会回调,并打印一些信息。
Button button1 = new Button("btn1");
button1.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("Button clicked!");
}
});
fpRootPane.getChildren().add(button1);
除了按钮这样的组件,还有像文本框这样的组件,我们可以监听它们的数据改变。包含数据的组件中,有一些类似textProperty
的属性,我们可以在其上进行监听。
这里我们创建一个简单的布局,包含一个TextField
和一个Label
。
textfield.textProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
label.setText(newValue);
}
});
textProperty()
返回一个StringProperty
对象,我们可以在其上绑定数据监听器。上面代码中,我们实现的就是在TextField
中修改其值时,Label
中也能同步修改。
监听鼠标事件是通过在一个组件(通常是一个容器Pane或者全局根组件上)设置鼠标监听器实现的。
fpRootPane.setOnMouseClicked(new EventHandler<Event>() {
@Override
public void handle(Event event) {
MouseEvent me = (MouseEvent) event;
switch (me.getButton()) {
case PRIMARY:
System.out.println("左键点击了");
break;
case MIDDLE:
System.out.println("中键点击了");
break;
case SECONDARY:
System.out.println("右键点击了");
break;
case NONE:
System.out.println("其它未知状况");
break;
}
}
});
上面代码我们监听的是鼠标点击事件,我们通过switch...case...
判断用户点击的是哪一个键。
监听键盘事件和鼠标事件也是类似的,设置对应的键盘监听器就可以了。
fpRootPane.setOnKeyPressed(new EventHandler<Event>() {
@Override
public void handle(Event event) {
KeyEvent ke = (KeyEvent) event;
System.out.println(ke.getCode());
}
});
这里我们设置了一个键盘按下监听器,回调时打印出键盘对应的keyCode
。