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. 返回 ObservableValue 是没有意义的,因为 bean 无法触发更改事件。因此,我想避免所有 ObservableValue 开销,该怎么做?
  2. 因为 javabean 不会自己触发事件,所以我需要一些老式的 resfresh 事件,比如 fireCellUpdate。是这样的方法吗?
4

1 回答 1

2

对于第一点,我认为你不能。

对于第二点,我认为你也不能。反正不是直接的。我认为最好的解决方案是使用JavaBeanStringProperty来包装firstname属性并在fireValueChangedEvent()每次要更新单元格时调用。

于 2012-07-09T12:55:01.963 回答