1

JavaFX の実装戦略について 1 つ一般的な質問をしたいと思います。おそらくswingをGUIとして使用する多くのクラスとオブジェクトを含むJavaプロジェクトがすでにあるとしましょう。JavaFX を GUI として使用したいと考えています。これらのオブジェクトを素敵な JFX UI で表示したいと考えています。しかし、JavaFX とそのバインディングなどを使用するには、クラスで JavaFX スタイル プロパティを利用する必要があります。問題は、すでに持っている「古い」クラスとビジネス オブジェクトをどうすればよいかということです。少なくとも表示するものを新しい JFX フォームに書き直す必要がありますか? ただし、これらのオブジェクトは、データベースやファイルの永続化などの他の目的にも使用されます。単純なビジネス オブジェクトで JFX プロパティを使用するのは適切ではないようです。対応する JFX の「兄弟」で BO をラップする必要がありますか? (このアイデアは、.NET WPF MVVM パターンの "ViewModel" のままです。) 誰かがこれに対処する正しい方法を教えてもらえますか? ありがとうございました。

4

2 に答える 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 に答える