博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaFX中ObservableValue类型
阅读量:5079 次
发布时间:2019-06-12

本文共 2562 字,大约阅读时间需要 8 分钟。

刚开始,我发现JavaFX没有onFocusing,或者onFocused之类事件。我在一个窗口里安置了两个TableView,需要对其中获得焦点的进行操作。TableView中与Focuse相关的方法有getFocuseModel,但是得到的TableViewFocusModel与我的需求并无关系。这个问题困扰了我一段时间。

偶然发现Node的一大堆方法中,有一个不太起眼的focusProperty(),返回ReadOnlyBooleanProperty对象。ReadOnlyBooleanProperty对象实现了多个接口,其中有 ObservableValue。 ObservableValue中定义了三个方法:

void addListener(ChangeListener
listener) void removeListener(ChangeListener
listener) T getValue()

 

OK!这样问题就解决了。

propertyTable.focusedProperty().addListener(new ChangeListener
(){ public void changed(ObservableValue
boolVal, Boolean oldVal, Boolean newVal) { if (newVal == true) ...; } } );

 

还有照方抓药的地方还有很多。比如Accordion控件,有时候需要知道其中哪个TitledPane是打开的。TitledPane有isExpanded()方法可以判断其状态,但是不够实时。留意一下,TitledPane有个属性——expandedProperty(),问题就简单了:

class PaneChangeListener implements ChangeListener
{ TitledPane trigger; public PaneChangeListener(TitledPane tp){ this.trigger = tp; } @Override public void changed( ObservableValue
paramObservableValue, Boolean paramT1, Boolean paramT2) { final TitledPane cascaded; if (trigger.equals(generalPane)) { cascaded = detailPane; } else { cascaded = generalPane; } new Timer().schedule(new TimerTask(){ @Override public void run() { cascaded.setExpanded(!trigger.isExpanded()); } }, 1); } }

 

上面是我写过的一个类,在一个Accordion控件中,使其中的两个TitlePane总是此开彼合。使用方法如下:

generalPane.expandedProperty().addListener(new PaneChangeListener(generalPane));detailPane.expandedProperty().addListener(new PaneChangeListener(detailPane));

 

Ensemble2中的例子,ensemble.samples.controls.table.TableCellFactorySample

,内部Entity类Person中的字段,就是Property类型:

public static class Person {        private BooleanProperty invited;        private StringProperty firstName;    ...    }

 

一般的entity类不需要这么定义。这么定义是为了进一步监听数据改变,比如这个例子有如下代码:

this.invited.addListener(new ChangeListener
() { public void changed(ObservableValue
ov, Boolean t, Boolean t1) { System.out.println(firstNameProperty().get() + " invited: " + t1); } });

 

运行时,TableView中的Invited字段一有改变,console就会出现对应的消息提示。

转载于:https://www.cnblogs.com/lngrvr/p/JavaFX_Property_introduce.html

你可能感兴趣的文章
现在运行着金山词霸,ctrl+L用不了
查看>>
[转] Eclipse 编辑相关快捷键
查看>>
安装关系型数据库MySQL 安装大数据处理框架Hadoop
查看>>
一分钟了解网站性能测试
查看>>
HDU3589-雅可比符号
查看>>
python常见编码错误集合
查看>>
Spring Boot笔记—多线程系列(三)—配置参数详解
查看>>
Maven工程webinfo下面的JSP页面无法加载.js、.css文件的解决方案
查看>>
php 的文件操作类
查看>>
php 重要函数归集
查看>>
Js 小技巧
查看>>
Mono for Android 学习一 环境的搭建
查看>>
正则表达式工具RegexBuddy使用教程(原创自Zjmainstay)
查看>>
Spring @Async 应用于出现循环依赖的 Bean 报错的解决方案
查看>>
JS 事件介绍
查看>>
flex弹性布局操练2
查看>>
【vijos P1034】家族(并查集)
查看>>
java类中元素初始化顺序详解
查看>>
LeetCode - 121. Best time to buy and sell stock
查看>>
JUnit单元测试教程(翻译自Java Code Geeks)
查看>>