Я пытаюсь создать редактируемую таблицу с помощью построителя сцены javaFX, но я не могу заставить ее запускать событие On Edit Commit, после редактирования ячейки (заканчивающейся вводом ввода) поле ввода становится пустым, но по-прежнему закрывает ячейку и остается, пока я не закрою его, выбрав его и нажав esc.
Код для моего контроллера выглядит следующим образом:
public class PlaylistsWindowController extends AbstractController implements EventHandler<WindowEvent> {
private Set<Song> libary;
private final ObservableList<SongWraper> libaryTableData = FXCollections.observableArrayList();
private final String LIBADRESS = "data\\libary.sav";
@FXML
TableColumn<SongWraper, String> titleColumn;
@FXML
TableColumn<SongWraper, String> artistColumn;
@FXML
TableColumn<SongWraper, String> genreColumn;
@FXML
TableColumn<SongWraper, String> serieColumn;
@FXML
TableColumn<SongWraper, Integer> pointGainColumn;
@FXML
TableColumn<SongWraper, Integer> pointLossColumn;
@FXML
TableView<SongWraper> libaryTable;
@Override
public void initialize(URL arg0, ResourceBundle arg1) {
/*Code creating the libaryTableData*/
configLibaryTable();
}
private void configLibaryTable(){
titleColumn.setCellValueFactory(new PropertyValueFactory<SongWraper, String>("title"));
artistColumn.setCellValueFactory(new PropertyValueFactory<SongWraper, String>("artistName"));
serieColumn.setCellValueFactory(new PropertyValueFactory<SongWraper, String>("serieName"));
genreColumn.setCellValueFactory(new PropertyValueFactory<SongWraper, String>("genre"));
pointGainColumn.setCellValueFactory(new PropertyValueFactory<SongWraper, Integer>("pointGain"));
pointLossColumn.setCellValueFactory(new PropertyValueFactory<SongWraper, Integer>("pointLossColumn"));
libaryTable.setItems(libaryTableData);
libaryTable.setEditable(true);
libaryTableEditCommit();
}
private void libaryTableEditCommit(){
titleColumn.setCellFactory(TextFieldTableCell.<SongWraper>forTableColumn());
titleColumn.setOnEditCommit(
new EventHandler<TableColumn.CellEditEvent<SongWraper, String>>(){
@Override
public void handle(CellEditEvent<SongWraper, String> t){
((SongWraper) t.getTableView().getItems().get(t.getTablePosition().getRow())
).setTitle(t.getNewValue());
}
}
);
}
И FXML:
<AnchorPane prefHeight="600.0" prefWidth="800.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="gui.PlaylistsWindowController">
<!-- TODO Add Nodes -->
-------unreleated code-------
<TableView id="table" fx:id="libaryTable" editable="true" prefHeight="272.0" prefWidth="494.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="24.0">
<columns>
<TableColumn prefWidth="75.0" text="Title" fx:id="titleColumn" />
<TableColumn maxWidth="5000.0" minWidth="10.0" prefWidth="91.0" text="Artist" fx:id="artistColumn" />
<TableColumn maxWidth="5000.0" minWidth="10.0" prefWidth="91.0" text="Serie" fx:id="serieColumn" />
<TableColumn prefWidth="75.0" text="Genre" fx:id="genreColumn" />
<TableColumn prefWidth="75.0" text="Point Gain" fx:id="pointGainColumn" />
<TableColumn prefWidth="75.0" text="Point Lost" fx:id="pointLossColumn" />
</columns>
</TableView>
-------unreleated code-------
</AnchorPane>
Кто-нибудь знает причину этой проблемы и как ее исправить?