我有一个 ListView,其中包含表名称和一个添加按钮。
tablesListView.setEditable(true);
tablesListView.setCellFactory(TextFieldListCell.forListView());
tablesListView.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);
addTableButton.setOnAction(new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent evt) {
tablesListView.getItems().add("");
tablesListView.getSelectionModel().selectLast();
tablesListView.edit(tablesListView.getSelectionModel().getSelectedIndex());
}
});
因此,当我单击列表中的某个单元格时,它会将其状态切换到 TextField,但这不适用于按钮,该单元格将被选中,但不会切换。有什么帮助吗?
最佳答案
尝试
tablesListView.setEditable(true);
tablesListView.setCellFactory(TextFieldListCell.forListView());
tablesListView.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);
final Timeline animation = new Timeline(
new KeyFrame(Duration.seconds(.1),
new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent actionEvent) {
tablesListView.edit(tablesListView.getSelectionModel().getSelectedIndex());
}
}));
animation.setCycleCount(1);
addTableButton.setOnAction(new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent evt) {
tablesListView.getItems().add("");
tablesListView.getSelectionModel().selectLast();
animation.play();
}
});
实际上 Platform.runLater()
可以工作,但只是偶尔,因为它会在“ future 某个未指定的时间”运行可运行程序。因此,您需要指定编辑命令运行的时间,例如我的代码示例中的时间线。编辑命令推迟0.1秒。
关于java - ListView编辑没有将单元格切换到输入状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11997041/