В настоящее время я разрабатываю приложение Java FX, которое включает TableView
. В этом TableView
я хочу использовать редактируемый CheckBoxTableCell
. Сначала у меня были все компоненты, добавленные в Java-код, используя макет МиГ. С этой конфигурацией все редактировалось (размер столбцов, порядок столбцов, флажок). Когда я передал весь код FXML с помощью Scene Builder, все работало отлично, за исключением TableView. Я не мог понять, как установить CellFactory и CellValueFactory в файле FXML (я видел несколько примеров, но не смог заставить его работать). Поэтому я решил установить эти заводы в методе initialize()
:Java FX TableView не редактируется с помощью FXML
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);
Вот FXML код генерируется Scene Builder
<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 правильно работает.
Если бы кто-нибудь мог указать мне в правильном направлении, я был бы очень благодарен.
Убедитесь, что ваши, что ваш контроллер указан в FXML файл, контроллер реализует Initializable, voteCol помечаются @FXML –
я не выполнил Инициализируемый, спасибо! Но какой метод инициализации мне нужно использовать для какого кода? (Есть @FXML 'initialize()' и 'initialize (расположение URL, ресурсы ResourceBundle)' –
см. Ответ ниже –