使用FXML无法编辑Java FX TableView

时间:2013-11-29 13:51:15

标签: java checkbox javafx-2 tableview

我目前正在开发包含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的数据绑定工作正常。

如果有人能指出我正确的方向,我会非常感激。

1 个答案:

答案 0 :(得分:0)

很可能从未调用过初始化。

确保您的Controller实现Initializable接口,initialize()方法具有正确的签名:

public class MyController implements Initializable {

   @Override
   public void initialize(URL location, Resources resources) {
       //....
   }
}