所以我有3列,其中一个表视图是组合框的一列,我创建组合框的列中的方法是作为这样在表视图刷新组合框的一列,JavaFX的
Source = new TableColumn<>("Configure Interface as..");
Source.setCellValueFactory(i -> {
final StringProperty value = i.getValue().optionProperty();
// binding to constant value
return Bindings.createObjectBinding(() -> value);
});
Source.setCellFactory(col -> {
TableCell<TableViewTest, StringProperty> c = new TableCell<>();
ComboBox<String> comboBox = new ComboBox<>(options);
c.itemProperty().addListener((observable, oldValue, newValue) -> {
if (oldValue != null) {
comboBox.valueProperty().unbindBidirectional(oldValue);
}
if (newValue != null) {
comboBox.valueProperty().bindBidirectional(newValue);
}
});
c.graphicProperty().bind(Bindings.when(c.emptyProperty()).then((Node) null).otherwise(comboBox));
return c;
});
该列从驻留在我的TableViewTest类中的getter方法optionProperty()中获取其值。
所以我遇到的问题是我有另一个combobox
(comboBoxA)就是我上面的tableview
表在我的GUI,并当过我改变comboBoxA的价值,我想与列来改变组合框的值。
我可以通过调用被监听comboboxA
Source.setCellValueFactory(i -> {
final StringProperty value = i.getValue().optionTwoProperty();
// binding to constant value
return Bindings.createObjectBinding(() -> value);
});
的选择变化的方法中的下列代码做到这一点,但值不改变,除非是开始向下滚动到附近的底部表。有没有办法强制组合框更改为getter方法optionTwoProperty()中的新值,而不必向下滚动?
编辑
好了,行了
final StringProperty value = i.getValue().optionTwoProperty();
犯规actaully被调用,直到我开始向下滚动。
后的代码更改值。因为你在这里使用我的代码的修改版本http://stackoverflow.com/a/35134148/2991525我测试了这个'comboBoxA.valueProperty()。addListener((a,b,c) - > { for(TableViewTest item:tableview.getItems()){ item.setOption(c); } });',但无法重现错误。 – fabian
事情是我正在使用一个fxml文件,我的代码是在fxml控制器文件中,所以我不必为comboBoxA设置一个侦听器,而只是在选择更改时命名我想调用的方法。用于更改值的代码是'Source.setcellValueFactory'部分 – noobCoder
您可以显示您的声明,以便我们知道事物的类型? (你的模型类也可能有帮助。)为什么你的单元格值是一个绑定的属性?难道你不能把它变成一个'TableColumn'而不是'TableColumn ',这看起来是什么? –