我目前正在开发包含TableView
的Java FX应用程序。在此TableView
中,我想使用可编辑的CheckBoxTableCell
。
首先,我使用MiG Layout在Java代码中添加了所有组件。使用该配置,一切都是可编辑的(列的大小,列的顺序,复选框)。当我使用Scene Builder将所有代码传输到FXML时,除了TableView之外,一切正常。我无法弄清楚如何在FXML文件中设置CellFactory和CellValueFactory(我已经看过几个例子,但无法让它工作)。所以我决定用initialize()
方法设置这些工厂:
voteCol.setCellValueFactory(new Callback<CellDataFeatures<DataItem, Boolean>, ObservableValue<Boolean>>() {
@Override
public ObservableValue<Boolean> call(
CellDataFeatures<DataItem, Boolean> arg0) {
return arg0.getValue().voteProperty();
}
});
voteCol.setCellFactory(new Callback<TableColumn<DataItem, Boolean>, TableCell<DataItem, Boolean>>() {
@Override
public TableCell<DataItem, Boolean> call(
TableColumn<DataItem, Boolean> arg0) {
return new CheckBoxTableCell<DataItem, Boolean>();
}
});
voteCol.setEditable(true);
dataTableView.setEditable(true);
这是由Scene Builder生成的FXML代码
<TableView fx:id="dataTableView" editable="true"
mouseTransparent="true" pickOnBounds="false" prefHeight="-1.0"
prefWidth="-1.0" AnchorPane.bottomAnchor="41.0"
AnchorPane.leftAnchor="10.0" AnchorPane.rightAnchor="10.0"
AnchorPane.topAnchor="80.0">
<columns>
<TableColumn fx:id="voteCol" maxWidth="5000.0" minWidth="10.0"
prefWidth="32.0" text="Vote" visible="true" />
...
</columns>
<columnResizePolicy>
<TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
</columnResizePolicy>
</TableView>
DataItem的数据绑定工作正常。
如果有人能指出我正确的方向,我会非常感激。
答案 0 :(得分:0)
很可能从未调用过初始化。
确保您的Controller实现Initializable
接口,initialize()
方法具有正确的签名:
public class MyController implements Initializable {
@Override
public void initialize(URL location, Resources resources) {
//....
}
}