浅谈JavaFX事件机制
2014-01-28 11:44
197 查看
声明: 本博客文章原创类别的均为个人原创,版权所有。转载请注明出处: http://blog.csdn.net/ml3947,另外本人的个人博客:http://www.wjfxgame.com。
之前有人问到过JavaFX中,如何监听窗口大小的变化。所以,我觉得有必要新开一篇文章来讲解一下JavaFX的事
件机制以及与Java GUI 和 Android事件的区别。
在Java GUI 和Android中,事件通常通过实现listener的接口函数,并通过addXXXListener 或者setOnXXXListener的形式来设置接口函数来实现事件的执行。在Java
GUI中,也有部分通过适配器模式来让用户选
择性的覆盖事件函数(以免留下许多不需要的空方法)。
然而在JavaFX中,只有极少数的事件是遵循Java GUI和Android的模式,例如,按钮的点击事件:
其实我在以前的文章中,不止说过一次,JavaFX最重要的特性就是属性绑定。
这意味着什么?我相信很多读者可能也有一些明白了。
也就是说,JavaFX中,所有跟属性有关的事件,将一概不会通过"控件.setOnXXXX"这种形式执行。而是通过属性绑定来监听属性的改变,来执行事件。
例如,我们需要监听窗口大小的改变:
大家可以看到,我们通过给stage的widthProperty添加ChangeListener来执行属性改变的事件,同时
ChangeListener里会回调一个属性改变前的值和属性改变后的值。
再举个例子, 我们要监听CheckBox的选中事件, 在Android中我们监听CheckBox的选中事件是通过
CheckBox.setOnCheckedChangeListener(.....)来执行的。由于JavaFX属性绑定的特性,同样事件监听如下:
只需要监听selectedProperty属性即可。
其实,大家在初学使用JavaFX的时候,可能会非常不适应属性绑定机制,会像Java和Android一样,在API文档找setOnXXXX等形式的事件函数。但属性绑定机制,毫无疑问是JavaFX的一大利器。
只需要记住,所有跟属性改变相关的事件,都可以根据XXX.xxxxProperty().addListener的形式来执行事件。熟悉这个,将对我们的JavaFX开发产生很大便利。
另外补充说明,只要是通过javax.beans.property包中的xxxProperty来定义我们的变量,都可以通过上述形式来监听改变。
这一节就讲到这里了。
----------------------------------------------------------------------------------------
腊月二十八了,还在公司上班中.....
顺便祝大家新年快乐!!
----------------------------------------------------------------------------------------
本博客文章原创类别的均为个人原创,版权所有。转载请注明出处: http://blog.csdn.net/ml3947,另外本人的个人博客:http://www.wjfxgame.com。
之前有人问到过JavaFX中,如何监听窗口大小的变化。所以,我觉得有必要新开一篇文章来讲解一下JavaFX的事
件机制以及与Java GUI 和 Android事件的区别。
在Java GUI 和Android中,事件通常通过实现listener的接口函数,并通过addXXXListener 或者setOnXXXListener的形式来设置接口函数来实现事件的执行。在Java
GUI中,也有部分通过适配器模式来让用户选
择性的覆盖事件函数(以免留下许多不需要的空方法)。
然而在JavaFX中,只有极少数的事件是遵循Java GUI和Android的模式,例如,按钮的点击事件:
Button btn = new Button(); btn.setText("Say 'Hello World'"); btn.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { } });
其实我在以前的文章中,不止说过一次,JavaFX最重要的特性就是属性绑定。
这意味着什么?我相信很多读者可能也有一些明白了。
也就是说,JavaFX中,所有跟属性有关的事件,将一概不会通过"控件.setOnXXXX"这种形式执行。而是通过属性绑定来监听属性的改变,来执行事件。
例如,我们需要监听窗口大小的改变:
primaryStage.widthProperty().addListener(new ChangeListener<Number>() { @Override public void changed(ObservableValue<? extends Number> ov, Number t, Number t1) { System.out.println("Window Size Change:" + t.toString() + "," + t1.toString()); } });
大家可以看到,我们通过给stage的widthProperty添加ChangeListener来执行属性改变的事件,同时
ChangeListener里会回调一个属性改变前的值和属性改变后的值。
再举个例子, 我们要监听CheckBox的选中事件, 在Android中我们监听CheckBox的选中事件是通过
CheckBox.setOnCheckedChangeListener(.....)来执行的。由于JavaFX属性绑定的特性,同样事件监听如下:
CheckBox cb = new CheckBox("CheckBox"); cb.selectedProperty().addListener(new ChangeListener<Boolean>() { @Override public void changed(ObservableValue<? extends Boolean> ov, Boolean t, Boolean t1) { System.out.println("CheckBox: " + " old value--" + t.toString() + " new value--" + t1.toString()); } });
只需要监听selectedProperty属性即可。
其实,大家在初学使用JavaFX的时候,可能会非常不适应属性绑定机制,会像Java和Android一样,在API文档找setOnXXXX等形式的事件函数。但属性绑定机制,毫无疑问是JavaFX的一大利器。
只需要记住,所有跟属性改变相关的事件,都可以根据XXX.xxxxProperty().addListener的形式来执行事件。熟悉这个,将对我们的JavaFX开发产生很大便利。
另外补充说明,只要是通过javax.beans.property包中的xxxProperty来定义我们的变量,都可以通过上述形式来监听改变。
这一节就讲到这里了。
----------------------------------------------------------------------------------------
腊月二十八了,还在公司上班中.....
顺便祝大家新年快乐!!
----------------------------------------------------------------------------------------
本博客文章原创类别的均为个人原创,版权所有。转载请注明出处: http://blog.csdn.net/ml3947,另外本人的个人博客:http://www.wjfxgame.com。
相关文章推荐
- 浅谈JavaFX事件机制
- 浅谈android的事件分发机制
- 浅谈Android 触摸事件分发机制
- 浅谈用java实现事件驱动机制
- 浅谈JavaScript事件机制与事件委托
- 【基础】Cocos2d-x 浅谈事件处理机制
- 浅谈Java与C#的事件处理机制
- 菜鸟学习Cocos2d-x 3.x——浅谈事件处理机制
- 浅谈node的事件机制
- 私人定制javascript事件处理机制(浅谈)
- 浅谈Android事件分发机制(一)点击事件的传递规则
- 浅谈.net事件机制
- 浅谈node.js 回调函数与事件机制
- 浅谈Android事件分发机制
- Android面试补习(六)浅谈Android事件分发机制(对CSDN移动端的填坑意见反馈)
- 浅谈DOM中事件机制
- 浅谈JavaScript的事件机制
- 浅谈事件机制
- 浅谈Android之Activity触摸事件传输机制介绍
- android事件传递机制的浅谈