Java ListView编辑未将单元格切换到输入状态

Java ListView编辑未将单元格切换到输入状态,java,events,listview,javafx,Java,Events,Listview,Javafx,我有一个列表视图,其中有表名和一个add按钮 tablesListView.setEditable(true); tablesListView.setCellFactory(TextFieldListCell.forListView()); tablesListView.getSelectionModel().setSelectionMode(SelectionMode.SINGLE); addTableButton.setOnAction(new EventHandler<ActionE

我有一个列表视图,其中有表名和一个add按钮

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());
    }
});
tableListView.setEditable(true);
TableListView.setCellFactory(TextFieldListCell.forListView());
tableListView.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);
addTableButton.setOnAction(新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent evt){
tableListView.getItems().add(“”);
tableListView.getSelectionModel().selectLast();
编辑(tableListView.getSelectionModel().getSelectedIndex());
}
});
因此,当我单击列表中的某个单元格时,它会将其状态切换到文本字段,但按钮不起作用,单元格会被选中,但不会被切换。有什么帮助吗?

试试看

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();
    }
});
tableListView.setEditable(true);
TableListView.setCellFactory(TextFieldListCell.forListView());
tableListView.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);
最终时间线动画=新时间线(
新关键帧(持续时间.s(.1),
新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent ActionEvent){
编辑(tableListView.getSelectionModel().getSelectedIndex());
}
}));
动画。setCycleCount(1);
addTableButton.setOnAction(新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent evt){
tableListView.getItems().add(“”);
tableListView.getSelectionModel().selectLast();
动画。播放();
}
});

实际上,
Platform.runLater()
起作用,但只是偶尔,因为它会在“将来某个未指定的时间”运行runnable。因此,您需要指定edit命令运行的时间,例如我的代码示例中的时间线。编辑命令延迟了0.1秒。

否,没有帮助。我正在使用jfx factory TextFieldListCell.forListView()doc-@JohnGray不幸的是,它是。。但是您可以通过化妆来美化它,比如编写util类和方法:)。