0

我有一个包含表名的 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,但这不适用于按钮,单元格会被选中,但不会切换。有什么帮助吗?

4

1 回答 1

2

尝试

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()有效,但只是偶尔,因为它在“未来某个未指定的时间”运行可运行文件。因此,您需要指定编辑命令应该运行的时间,例如我的代码示例中的时间线。编辑命令延迟了 0.1 秒。

于 2012-08-17T08:52:56.713 回答