4

私はJavaFXが初めてなので、ご容赦ください。一部の列がチェックボックスになるTableViewを作成しようとしています。私の意図は、これらをモデル オブジェクトのブール プロパティにバインドすることです。モデル オブジェクトには、SimpleBooleanProperty として定義されたプロパティがあり、getter/setter およびプロパティ メソッドがあります。一部のブール列をテーブル内の単なるテキストとしてバインドしているため、テーブルがモデルオブジェクトを「認識」していることを確認しました。確かに、テーブルには期待どおりに「true」または「false」が表示されます。ただし、どちらの方向にもデータをバインドするためのチェックボックスを取得できません。以下にいくつかのサンプルコードを含めました。

public class DataModel {
  private SimpleBooleanProperty prop1;
  private SimpleBooleanProperty prop2;

  public boolean getProp1() {
    return prop1.get();
  }

  public setProp1(boolean value) {
    prop1.set(value);
  }

  public prop1() {
    return prop1;
  }

  ...
}

UI モデルのロジック:

...
private ObjectProperty<ObservableList<DataModel>> listProperty;
...
List<DataModel> list = new ArrayList<DataModel>();
... add some DataModel objects to list

final ObservableList<DataModel> obsList = FXCollections.observableArrayList(list);
listProperty.set(obsList);

UI ロジック:

...
TableView table = new TableView<DataModel>();
table.setEditable(true);

TableColumn<DataModel, String> boolAsStringCol = new TableColumn<DataModel, String>("Prop1");
boolAsStringCol.setCellValueFactory(new PropertyValueFactory<DataModel, String>("prop1"));

TableColumn<DataModel, Boolean> boolAsCbxCol = new TableColumn<DataModel, Boolean>("Prop2");
boolAsCbxCol.setCellValueFactory(new PropertyValueFactory<DataModel, Boolean>("prop2"));
boolAsCbxCol.setCellFactory(CheckBoxTableCell.forTableColumn(boolAsCbxCol));
boolAsCbxCol.setEditable(true);

table.getColumns().add(boolAsStringCol);
table.getColumns().add(boolAsCbxCol);
...

チェックボックスを切り替えることはできますが、プロパティをチェックボックスにバインドしているようには見えません。ブレークポイントを設定すると、チェックボックスをオンまたはオフにしたときにセッターが呼び出されません。また、オブジェクトの作成時にプロパティを true に初期化すると、テーブルのレンダリング時にチェック済みとして表示されません。

どんな提案でも大歓迎です。これは機能するはずですが、機能しません。

ありがとう。

4

2 に答える 2

2

DataModel のコードに次の行を追加する必要があるかもしれません

    public SimpleBooleanProperty prop1Property() {return prop1;}
    public SimpleBooleanProperty prop2Property() {return prop2;}
于 2013-07-14T08:16:56.473 に答える
0

それ以外の

boolAsCbxCol.setCellFactory(CheckBoxTableCell.forTableColumn(boolAsCbxCol));

使用する

boolAsCbxCol.setCellFactory(CheckBoxTableCell.forTableColumn(boolAsCbxCol::getCellData));

使用するファクトリメソッドは実際にはその引数を無視しているため、バグhttps://bugs.openjdk.java.net/browse/JDK-8186287

于 2018-01-26T16:44:01.010 に答える