事件监听

在RIA 或者说 桌面客户端gui android 开发中,事件的机制是必须的要学习了解的,

分类处理类型

在Java GUI 和swing中,事件通常通过实现listener的接口函数,并通过addXXXListener 或者 setOnXXXListener的形式来设置接口函数来实现事件的执行。

-因此JavaFX的监听分为两种:

  • 控件级别监听 ----->setonxxxxxxx()

  • 属性级别监听 ----->onxxxxxxProperty().addxxxxxxx()

    然而在JavaFX中,只有极少数的事件是遵循Java GUI和Android的模式即控件级别的监听,例如,按钮的点击事件 。还增加了 触摸事件 onTouch() 事件

  • 这里要特别说一下: 如果要一个类实现监听所有的鼠标事件,一般的方法是传参数类值过去,然后判断操作,但是这样不能实现操作

package application;

import javafx.event.EventHandler;
import javafx.scene.input.MouseEvent; public class myHandlert implements EventHandler<MouseEvent> { @Override
public void handle(MouseEvent event) {
System.out.println(event.getSource());
if (event.getSource()=="Button[id=btnEraser, styleClass=button]'橡皮擦'") {
System.out.println(1);
}
if (event.getSource().equals("Button[id=btnBrush, styleClass=button]'画笔'")) {
System.out.println(2);
}
} }
  • 控件级别监听(代码量少可以使用):
Button btn = new Button();
btn.setOnAction(new EventHandler<ActionEvent>() { @Override
public void handle(ActionEvent event) {
doing codeing
}
});
  • 2.实现EventHandler接口,单独类创建事件代码,与主代码分离,我更青睐这种方式,可以统一管理事件,UI与具体事件分离:
Button btn = new Button();
button.addEventHandler(MouseEvent.MOUSE_EXITED, new ShadowEvent(button,false)); public class ShadowEvent implements EventHandler<MouseEvent> { Button button;
DropShadow dropShadow;
boolean select; public ShadowEvent(Button button,DropShadow dropShadow,boolean select){
this.button = button;
this.dropShadow = dropShadow;
this.select = select;
} public ShadowEvent(Button button,boolean select){
this.button = button;
this.select = select;
} public void handle(MouseEvent event) {
if (select){
button.setEffect(dropShadow);
} else {
button.setEffect(null);
} }
}
  • 属性级别监听:

    [] 比如监听checkbox是否选中,这是对selectedProperty这个属性进行监听,因此需要实现ChangeListener接口。
// CatalogCheckPage.java代码片段
checkBox.selectedProperty().addListener(new MyCheckBoxListener(checkBox,buttonOfPreEditionDataPath,textInputOfPreEditionDataPath)); // MyCheckBoxListener.java代码片段
public class MyCheckBoxListener implements ChangeListener<Boolean> { TextField textfield = new TextField();
Button button = new Button();
CheckBox checkBox; public MyCheckBoxListener(CheckBox checkBox,Button button,TextField textfield){
this.checkBox = checkBox;
this.button = button;
this.textfield = textfield;
} public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue){
boolean select = checkBox.isSelected();
// logger.info("checkbox newValue:" + newValue +",oldValue:"+oldValue);
if (!select) {
textfield.setDisable(true);
button.setDisable(true);
} else {
textfield.setDisable(false);
button.setDisable(false);
}
}
}
  • 比如监听窗口大小的改变,这是对Stage类的widthProperty这个属性进行监听,因此需要实现ChangeListener接口,同时ChangeListener里会回调一个“属性改变前的值”和“属性改变后的值
/ MainPage.java代码片段
primaryStage.widthProperty().addListener(new StageChangeListener(primaryStage)); // StageChangeListener.java窗体变化监听,当前用来设置图标
public class StageChangeListener implements ChangeListener<Number> { Stage stage; public StageChangeListener(Stage stage){
this.stage = stage;
} public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) { stage.getIcons().add(ImageUtil.getImage("/image/tools.png"));
}
}

所以在JavaFX中,所有跟属性改变相关的事件,都可以根据 XXX.xxxxProperty().addListener 的形式来进行事件监听。理解这种方式将极大提升我们的开发效率。这样的属性还有很多,根据需要来操作.

JAVAFX-5事件总结的更多相关文章

  1. Java开发桌面程序学习(11)——javafx 鼠标点击,右击,双击

    javafx 鼠标事件 给某个控件设置鼠标点击监听器,三个条件分别判断为单击,右击还是双击 单击判断 event.getButton()==MouseButton.PRIMARY 右击判断 event ...

  2. Lambda应用场景和使用实例

    Java 8已经推出一段时间了,Lambda是其中最火的主题,不仅仅是因为语法的改变,更重要的是带来了函数式编程的思想.这篇文章主要聊聊Lambda的应用场景及其相关使用示例. Java为何需要Lam ...

  3. Java 8里面lambda的最佳实践

    Java 8已经推出一段时间了,越来越多开发人员选择升级JDK,这条热门动弹里面看出,JDK7最多,其次是6和8,这是好事! 在8 里面Lambda是最火的主题,不仅仅是因为语法的改变,更重要的是带来 ...

  4. 大数据实习之spark

    Apache Spark是一个围绕速度.易用性和复杂分析构建的大数据处理框架. 与 Hadoop 和 Storm 等其他大数据和 MapReduce 技术相比,Spark 有如下优势. 首先,Spar ...

  5. 理解和运用Java中的Lambda

    前提 回想一下,JDK8是2014年发布正式版的,到现在为(2020-02-08)止已经过去了5年多.JDK8引入的两个比较强大的新特性是Lambda表达式(下文的Lambda特指JDK提供的Lamb ...

  6. JNI详解---从不懂到理解

    转载:https://blog.csdn.net/hui12581/article/details/44832651 Chap1:JNI完全手册... 3 Chap2:JNI-百度百科... 11 C ...

  7. 问题记录:JavaFx 鼠标滑轮滚动事件监听!

    问题描述: 在listview的item里面添加鼠标拖拽排序功能.代码如下: setOnMouseDragged(event -> { //设定鼠标长按0.3秒后才可拖拽 防止误操作 isCan ...

  8. 利用JavaFx开发RIA桌面应用-事件监听

    1 事件监听 最近利用javaFX开发桌面客户端,碰到需要给各种UI控件添加事件监听,在这里做一个简单的小结,供日后参考. 2 分类处理 在JavaGUI 和Android中,事件通常通过实现list ...

  9. JavaFX桌面应用开发-鼠标事件和键盘事件

    鼠标相关事件的操作初始代码 package application; import javafx.application.Application;import javafx.event.ActionE ...

  10. JavaFX桌面应用开发-Button(按钮)与事件

    1:Button样式的操作原始代码: package application; import javafx.application.Application;import javafx.scene.Gr ...

随机推荐

  1. GET 和 POST 比较整理

    差异 上传文件只能使用 POST GET 传输数据有大小限制 GET 传输的数据类型不灵活:GET是使用url来传输数据,那么比如空格字符以及类似&这样的字符就不方便传输.(当然可以使用发送前 ...

  2. TQ2440--nandflash(K9F2G08U0A)驱动编写

    一.数据手册相关内容 1.地址传输周期 2.命令表 3.在寄存器中,会涉及TACLS,TWRPH0,TWRPH1的设定 这里我们就去看nandflash的数据手册 在这里我们可以清楚的看到,TACLS ...

  3. Maven 结合 IDEA 入门实践

    一.Maven 基本安装 1. 下载 首先来到 http://maven.apache.org/download.cgi ,直接下载以 -bin.zip 结尾的文件,如图 2. 存储位置 将其解压后, ...

  4. json_encode()中文不转码

    php使用json_encode()把数组转换为json的时候,总会把中文进行转码,转码后从json数据上我们无法看出其中的中文文字.php5.4以后,当json_encode()的第二个参数赋值为J ...

  5. LeetCode 370. Range Addition (范围加法)$

    Assume you have an array of length n initialized with all 0's and are given k update operations. Eac ...

  6. 关于Python输出时间戳的问题

    在我们的程序中,有时候想要知道程序的执行时间或者准确的停止时间,这时候就需要我们自己添加一个时间戳,以便我们做出判断和相应的处理. 下面是我亲测并收集的资料,菜鸟一枚,不全之处大神可给予补充和指正. ...

  7. JS插入新的节点

    insertBefore() 语法: insertBefore(newchild,refchild) newchild 插入新的节点 refchild 在此节点前插入新节点 <ul id=&qu ...

  8. 读书笔记-你不知道的JS中-promise

    之前的笔记没保存没掉了,好气,重新写! 填坑-- 现在与将来 在单个JS文件中,程序由许多块组成,这些块有的现在执行,有的将来执行,最常见的块单位是函数. 程序中'将来'执行的部分并不一定在'现在'运 ...

  9. 阿里JAVA开发手册零度的思考理解(二)

    转载请注明原创出处,谢谢! 说在前面 人生的大道上默默地走,就必须要有一盏灯亮着为你引导方向!而这盏灯抑或只是一句话,一句鼓励,一个赞美,一次承认,一次认可,一次相识一次交流-- 上篇文章:阿里JAV ...

  10. Fibonacci Check-up

    Fibonacci Check-up Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...