JavaFX中的ObservableValue类型
来源:互联网 发布:linux默认命令行启动 编辑:程序博客网 时间:2024/06/05 07:02
刚开始,我发现JavaFX没有onFocusing,或者onFocused之类事件。我在一个窗口里安置了两个TableView,需要对其中获得焦点的进行操作。TableView中与Focuse相关的方法有getFocuseModel,但是得到的TableViewFocusModel与我的需求并无关系。这个问题困扰了我一段时间。
偶然发现Node的一大堆方法中,有一个不太起眼的focusProperty(),返回ReadOnlyBooleanProperty对象。ReadOnlyBooleanProperty对象实现了多个接口,其中有 ObservableValue。 ObservableValue中定义了三个方法:
void addListener(ChangeListener<? super T> listener) void removeListener(ChangeListener<? super T> listener) T getValue()
OK!这样问题就解决了。
propertyTable.focusedProperty().addListener(new ChangeListener<Boolean>(){public void changed(ObservableValue<? extends Boolean> boolVal,Boolean oldVal, Boolean newVal) {if (newVal == true)...;}} );
还有照方抓药的地方还有很多。比如Accordion控件,有时候需要知道其中哪个TitledPane是打开的。TitledPane有isExpanded()方法可以判断其状态,但是不够实时。留意一下,TitledPane有个属性--expandedProperty(),问题就简单了:
class PaneChangeListener implements ChangeListener<Boolean> {TitledPane trigger;public PaneChangeListener(TitledPane tp){this.trigger = tp;}@Overridepublic void changed(ObservableValue<? extends Boolean> paramObservableValue,Boolean paramT1, Boolean paramT2) {final TitledPane cascaded;if (trigger.equals(generalPane)) {cascaded = detailPane;}else {cascaded = generalPane;}new Timer().schedule(new TimerTask(){@Overridepublic 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<Boolean>() { public void changed(ObservableValue<? extends Boolean> ov, Boolean t, Boolean t1) { System.out.println(firstNameProperty().get() + " invited: " + t1); } });
运行时,TableView中的Invited字段一有改变,console就会出现对应的消息提示。
- JavaFX中的ObservableValue类型
- ObservableValue javafx
- JavaFX中的资源载入
- javafx中的集合
- JavaFX中的资源载入
- 关于javaFX中的TableView
- javafx中的控制器和fxml
- JavaFx中文入门教程--JavaFx中的语句和表达式
- JavaFx中文入门教程--JavaFx中的类和对象
- JavaFx
- JavaFX
- JavaFX
- javaFX
- JavaFx
- JAVAFX
- javafx
- JavaFX
- JavaFX
- android错误:Unable to execute dex: java.nio.BufferOverflowException.Check
- php中静态变量(static)与自定义常量的使用
- 手机支付宝面临的风险和应对(X)---支付安全如何组建团队
- 14--3成绩处理函数
- PV,VG,LV的关系和操作
- JavaFX中的ObservableValue类型
- 敏捷在业界成功了吗?
- 如何在关闭vim文件后,屏幕上还显示之前文件的内容
- python中的sum函数.sum(axis=1)
- Hdu 4305 Lightning - 生成树计数 - 行列式求值
- 页码js,支持ajax无刷新翻页
- -all_load -force_load -ObjC
- glPolygonOffset的用法
- java RMI原理解析