Skip to content

XDean/JavaFX-EX

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

78 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

JavaFX Extension

Build Status codecov.io


Bean

BeanConvertUtil

JavaFX为基本类型和String包装了对应的Property。但当我们遇到诸如Property<Integer>时,其与 IntegerProperty(Property<Number>)无法相互转换。BeanConvertUtil包装了BidirectionalBinding并拓展了相应的Binding转换,方便将Property转换为对应的包装Property,将ObservableValue转换为对应的包装Binding。如:

IntegerBinding toIntegerBinding(ObservableValue<? extends Number>)
IntegerProperty toInteger(Property<Integer>)

BeanUtil

MapProperty

一个常见的情况是,当属性变换时需要对其进行取值和计算,计算结果再通知其他属性。遗憾的是JavaFX的Bindings工具类仅提供了常用的基本包装,BeanUtil下的map相关方法提供了通用的解决方案:

MapableValue<T>是对map方法封装后的ObservableValue对象,方便map的链式调用

<F, T> MapableValue<T> map(ObservableValue<F>, Function<F, T>)

同时提供了ObservableList的map实现(SetMap暂未实现):

<F, T> ObservableList<T> map(ObservableList<F>, Function<F, T>, Function<T, F>)

通过map方法,我们可以将两个不同类型的List绑定到一起:

<F, T> void bind(ObservableList<F>, ObservableList<T>, Function<F, T>, Function<T, F>)

NestProperty

另一个常见的情况是,“属性”的属性仍然是“属性”,当我们关心一个Property的值的一个Property时,嵌套的依赖关系显得十分棘手,BeanUtilnestPropnestValue解决了这个问题:

<F, T> Property<T> nestProp(ObservableValue<F>, Function<F, Property<T>>)
<F, T> ObservableValue<T> nestValue(ObservableValue<F>, Function<F, ObservableValue<T>>)

另外,nestWrap方法正在研究中,希望通过动态代理来实现返回一个F本身,而对F的所有getXXX, setXXX, XXXProperty方法都可以动态的调回nestProp以及nestValue方法。当前仅支持标准的Property返回,任何返回Property的未知子类的xxxProperty方法将会导致ClassCastException

<T> T nestWrap(ObservableValue<T>, Class<T>)

Layout

提供一些链式调用方法,实质上可以由XDean/Java-EX提供的TaskUtil替代。

Support

DragSupport & ResizeSupport

快捷支持拖拽组件以及改变大小,直接调用bindunbind方法即可。

Skin

统一管理应用风格,通过bindunbind绑定到SkinManagerchangeSkin更换风格,getSkinList获取支持的风格列表。

UndoRedo

通用的撤销重做支持。通过向UndoRedoSupport中添加Undoable来记录操作。任何实现Undoable的对象皆可以作为一个操作单元,Undoable提供了数个工厂方法以方便创建。同时UndoRedoSupport也提供了诸多bind方法以快捷的将JavaFX组件绑定到其上。推荐使用UndoUtil中的weak方法以防止内存泄漏。

FXML2Controller

在定义完FXML文件后,第一步就是创建对应的Controller类。FXML2Controller自动从FXML文件提取controller、id、action信息创建对应java文件,以防止漏写、错写,提高速度。目前由于代码未加工,需要手动修改代码来指定FXML文件。

Releases

No releases published

Packages

No packages published

Languages