在模型类中使用JavaFX bean属性是否正确?
我想知道在模型类中使用属性是否能够更容易地使用视图组件绑定它们是一个好习惯.我不担心将来这些库的可用性,因为我的程序将在JRE8或更高版本上运行,但在模型类中使用JavaFX库的性质让我持怀疑态度,我担心当前和未来的不兼容性,特别是因为我想使用Hibernate来持久保存这些属性.
注意:我使用纯JavaFX环境,在我的应用程序中永远不需要Swing兼容性.
我想观察一些java bean类的某些字段所做的更改.
该字段是枚举类型.
要绑定字段和相应的ui控件我将PropertyChangeListener按照此处所述使用
但似乎javaFX没有等效的枚举属性类型.像javafx.beans.property.EnumProperty
我试图使用的东西StringProperty,ObjectProperty但它不起作用.
更新:添加了sscce
Observable.java
package sample;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
public class Observable {
protected PropertyChangeSupport propertyChangeSupport = null;
public Observable() {}
public void setObservableObject (Observable observable) {
propertyChangeSupport = new PropertyChangeSupport(observable);
}
public void addPropertyChangeListener(PropertyChangeListener listener){
System.out.println("added PropertyChangeListener");
propertyChangeSupport.addPropertyChangeListener(listener);
}
}
Run Code Online (Sandbox Code Playgroud)
Item.java
package sample;
public class Item extends Observable {
public enum State {
INIT, STARTED
}
private String name;
private State state = …Run Code Online (Sandbox Code Playgroud) 基础
我有一个由JPA(EclipseLink)管理的mysql数据库(实体和控制器+持久性单元).GUI是基于JavaFX的.
信息
我看到这篇文章:
和这个示例代码
问题
目前我正在使用我的适配器(不是真正的适配器模式)将JPAEntity转换为JavaFX Bean
public <T, S> Function<T, S> getRefactor() {
return o -> {
Object rtn = null;
//adapt **o** it to JavaFX bean
return (S) rtn;
};
}
Run Code Online (Sandbox Code Playgroud)
我想,这不是最好的解决方案.
问题 没有混合模式!我相信在服务器端使用javafx属性是疯狂的,即使是超级懒惰的实现.
有一个灵活的解决方案可以获得JavaFX Bean的所有好处,例如双向绑定,并保留未更改的JPA实体代码?
EDITED
即目前我有JPAEntity + JPAController和FXClass,"代表"JPAEntity.
JPAEntity是一种旧式POJO,包含要写入DB的数据.
FXClass具有javafx属性,包含在FX环境中显示的数据.
所以...我正在使用一个中间层将两者进行通信.
提前致谢
我正在编写一个新的应用程序,我选择使用Java来提高灵活性.它是一个GUI应用程序,所以我将使用JavaFX.这是我第一次使用Java,但我有使用C#的经验.
我熟悉JavaFX Properties,它们看起来像是前端和后端之间双向绑定的好方法.
我的代码使用来自开源API的类,我想将这些类的成员转换为JavaFX Properties(String => StringProperty等).我相信这对于引用这些成员的任何对象都是透明的.
这样做可以吗?这是处理现有类的建议方式吗?我如何处理Enum类型?例如,枚举成员的值已更改,我应该如何将枚举成员连接到前端?
谢谢 :)
我刚学的JavaFX 8.看来,如果你想显示在控制的东西,比方说TableColumn,你需要的东西是实例ObservableValue,例如SimpleStringProperty。
因此,在常用Person对象中,我可能有一个SimpleStringPropertyfor“ firstName”,然后可以将其用作的值TableColumn,如下所示:
TableColumn<Person, String> firstNameCol =
new TableColumn<Person, String>("First Name");
firstNameCol.setCellValueFactory(
new PropertyValueFactory<Person, String>("firstName"));
Run Code Online (Sandbox Code Playgroud)
但是,Person这就是我所谓的“域”类-我的模型可以自由引用和使用的类。我不希望我的域和模型层知道/依赖于使用JavaFX显示应用程序这一事实。
我认为模型/域在这方面应保持纯正性吗?如果是这样,使用JavaFX完成此操作的最佳方法是什么?例如,我是否应该以某种方式为我的域对象编写适配器类以与它们一起呈现ObservableValues?
javafx ×5
java ×3
javafx-8 ×2
model ×2
api ×1
hibernate ×1
jpa ×1
persistence ×1
properties ×1