JAVAFX-5事件总结
事件监听
在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事件总结的更多相关文章
- Java开发桌面程序学习(11)——javafx 鼠标点击,右击,双击
javafx 鼠标事件 给某个控件设置鼠标点击监听器,三个条件分别判断为单击,右击还是双击 单击判断 event.getButton()==MouseButton.PRIMARY 右击判断 event ...
- Lambda应用场景和使用实例
Java 8已经推出一段时间了,Lambda是其中最火的主题,不仅仅是因为语法的改变,更重要的是带来了函数式编程的思想.这篇文章主要聊聊Lambda的应用场景及其相关使用示例. Java为何需要Lam ...
- Java 8里面lambda的最佳实践
Java 8已经推出一段时间了,越来越多开发人员选择升级JDK,这条热门动弹里面看出,JDK7最多,其次是6和8,这是好事! 在8 里面Lambda是最火的主题,不仅仅是因为语法的改变,更重要的是带来 ...
- 大数据实习之spark
Apache Spark是一个围绕速度.易用性和复杂分析构建的大数据处理框架. 与 Hadoop 和 Storm 等其他大数据和 MapReduce 技术相比,Spark 有如下优势. 首先,Spar ...
- 理解和运用Java中的Lambda
前提 回想一下,JDK8是2014年发布正式版的,到现在为(2020-02-08)止已经过去了5年多.JDK8引入的两个比较强大的新特性是Lambda表达式(下文的Lambda特指JDK提供的Lamb ...
- JNI详解---从不懂到理解
转载:https://blog.csdn.net/hui12581/article/details/44832651 Chap1:JNI完全手册... 3 Chap2:JNI-百度百科... 11 C ...
- 问题记录:JavaFx 鼠标滑轮滚动事件监听!
问题描述: 在listview的item里面添加鼠标拖拽排序功能.代码如下: setOnMouseDragged(event -> { //设定鼠标长按0.3秒后才可拖拽 防止误操作 isCan ...
- 利用JavaFx开发RIA桌面应用-事件监听
1 事件监听 最近利用javaFX开发桌面客户端,碰到需要给各种UI控件添加事件监听,在这里做一个简单的小结,供日后参考. 2 分类处理 在JavaGUI 和Android中,事件通常通过实现list ...
- JavaFX桌面应用开发-鼠标事件和键盘事件
鼠标相关事件的操作初始代码 package application; import javafx.application.Application;import javafx.event.ActionE ...
- JavaFX桌面应用开发-Button(按钮)与事件
1:Button样式的操作原始代码: package application; import javafx.application.Application;import javafx.scene.Gr ...
随机推荐
- 将摄像头的读入的人像放入背景视频中_with_OpenCV_in_Python
import cv2 import numpy as np import time cap = cv2.VideoCapture(0) background_capture = cv2.VideoCa ...
- Tomcat Java.OutOfMemoryError : PermGen Space异常
背景:前些日子更新公司多年前一个旧平台发布到Tomcat上之后,频繁收到网站许多模块无法正常使用的反汇. 测试过程中发现平台发布一段时间后,访问相关网页出现如下500页面 解决方案:PermGen s ...
- 【ASP.NET MVC 学习笔记】- 02 Attribute
本文参考:http://www.cnblogs.com/willick/p/3208427.html 1.特性(Attribute)对程序中的元素进行标注,比如类.字段.方法.属性等. 2.在.NET ...
- JMeter性能测试,完整入门篇
1. Jmeter简介 Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件.相比Loadrunner而言,JMeter小巧轻便且免费,也越来越流行成为了主流的性能测试工具 ...
- LeetCode 695. Max Area of Island (岛的最大区域)
Given a non-empty 2D array grid of 0's and 1's, an island is a group of 1's (representing land) conn ...
- C#的常见算法(面试)
一.求以下表达式的值,写出您想到的一种或几种实现方法: 1-2+3-4+--+m //方法一,通过顺序规律写程序,同时也知道flag标志位的重要性. static int F1(int m) { ; ...
- angular 1.5.3各种模块使用(一)
1.angular cookie的用法:(1)引入angular-cookies(2)注入ngCookies这模块(3)想要更改cookies存储位置的话要添加内置服务$cookiesProvider ...
- Lua与javascript的差异
Lua与javascript的差异 2010-03-08 Lua模拟器js方案 1.语法级模拟 lua与js语言差异 1.1注释 js 为//,lua为--. 1.2变量 js利用var来声明全局变量 ...
- Xilinx ISE 14.1利用Verilog产生clock
<一>建立如下的Verilog Module module myClock( input clock ); endmodule <二>建立 Verilog Test Fixtu ...
- 暑假练习赛 003 B Chris and Road
B - Chris and Road Crawling in process... Crawling failed Time Limit:2000MS Memory Limit:262144K ...