0

私のテーブルビュー:

TableView<Person> = new TableView<Person>();

しかし、人は次のようなものです:

class Person {

    String firstName;

    public getFirstName() {return firstName;}

}

つまり、新しい javafx スタイルのプロパティがありません。これは、私が使用するライブラリによってインスタンス化された既存のクラスです。

次のコードで列を作成します。

TableColumn columnFirstName = new TableColumn("First Name");

columnCodfis.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Person,   String>,ObservableValue<String>>(){
        @Override
        public ObservableValue<String> call(CellDataFeatures<Person, String> arg) {
            if (arg.getValue()==null) return null;
            return new ReadOnlyStringWrapper(arg.getValue().firstName);
        }
    });

それはかなり面倒ですが、うまくいきます。
私の質問は次のとおりです。

  1. Bean は変更イベントを発生させることができないため、ObservableValue を返すことは無意味です。したがって、ObservableValue のオーバーヘッドをすべて回避したいのですが、どうすればよいですか?
  2. javabean 自体はイベントを発生させないため、fireCellUpdate などの昔ながらの resfresh イベントが必要です。そのような方法ですか?
4

1 に答える 1

2

最初の点については、できないと思います。

2点目については、あなたもできないと思います。とにかく直接ではありません。最善の解決策は、JavaBeanStringPropertyfirstnameを使用してプロパティをラップしfireValueChangedEvent()、セルを更新するたびに呼び出すことだと思います。

于 2012-07-09T12:55:01.963 に答える