JavaFX の実装戦略について 1 つ一般的な質問をしたいと思います。おそらくswingをGUIとして使用する多くのクラスとオブジェクトを含むJavaプロジェクトがすでにあるとしましょう。JavaFX を GUI として使用したいと考えています。これらのオブジェクトを素敵な JFX UI で表示したいと考えています。しかし、JavaFX とそのバインディングなどを使用するには、クラスで JavaFX スタイル プロパティを利用する必要があります。問題は、すでに持っている「古い」クラスとビジネス オブジェクトをどうすればよいかということです。少なくとも表示するものを新しい JFX フォームに書き直す必要がありますか? ただし、これらのオブジェクトは、データベースやファイルの永続化などの他の目的にも使用されます。単純なビジネス オブジェクトで JFX プロパティを使用するのは適切ではないようです。対応する JFX の「兄弟」で BO をラップする必要がありますか? (このアイデアは、.NET WPF MVVM パターンの "ViewModel" のままです。) 誰かがこれに対処する正しい方法を教えてもらえますか? ありがとうございました。
2 に答える
0
質問が少し古いことは知っていますが、記録のためだけです:
Person
次のようなモデル クラスがあるとします。
public class Person {
private String firstname;
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
}
次のように JavaFX のラッパー クラスを作成できます。
public class PersonFx {
private final StringProperty firstname = new SimpleStringProperty();
private final Person person;
public PersonFx(Person person) {
this.person = person;
firstname.setValue(person.getFirstname());
firstname.addListener((observable, oldValue, newValue) ->
person.setFirstname(newValue));
}
public String getFirstname() {
return firstname.get();
}
public StringProperty firstnameProperty() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname.set(firstname);
}
}
へのすべての変更PersonFx
は、ラップされた に反映されPerson
ます。
@Test
public void test(){
Person person = new Person();
PersonFx personFx = new PersonFx(person);
personFx.setFirstname("luke");
assertEquals("luke", personFx.getFirstname());
assertEquals("luke", person.getFirstname());
personFx.firstnameProperty().set("han");
assertEquals("han", personFx.getFirstname());
assertEquals("han", person.getFirstname());
}
于 2015-03-15T23:30:25.090 に答える