Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 仅对表中的选定行启用“编辑”_Java_Javafx - Fatal编程技术网

Java 仅对表中的选定行启用“编辑”

Java 仅对表中的选定行启用“编辑”,java,javafx,Java,Javafx,我对JavaFX相当陌生。我有一个多栏的表格,每行有一个编辑按钮。每当我点击Edit1个单元格时,都会选择编辑该行。一切都很顺利,但问题是每当我选择一行并单击其中一个单元格时,它也会进入编辑模式,尽管我没有单击edit。我想这是因为我已经设置了tableView.setEditable(true),但我只想在单击“编辑”按钮时启用编辑,并且只对该行启用编辑,而不想在双击/单次单击时启用其他行。我看到了,但他们通过弹出窗口解决了这个问题。我不想那样。 在initialize()方法中,我尝试了这种

我对JavaFX相当陌生。我有一个多栏的表格,每行有一个编辑按钮。每当我点击
Edit
1个单元格时,都会选择编辑该行。一切都很顺利,但问题是每当我选择一行并单击其中一个单元格时,它也会进入编辑模式,尽管我没有单击
edit
。我想这是因为我已经设置了
tableView.setEditable(true)
,但我只想在单击“编辑”按钮时启用编辑,并且只对该行启用编辑,而不想在双击/单次单击时启用其他行。我看到了,但他们通过弹出窗口解决了这个问题。我不想那样。 在
initialize()
方法中,我尝试了这种方法,但效果并不理想。谁能告诉我做这件事的正确方法吗

tableBuilding.setRowFactory(tv -> {
                TableRow<ModelBrBuilding> row = new TableRow<>();
                row.addEventFilter(MouseEvent.MOUSE_PRESSED, e -> {
                    if (e.getButton() == MouseButton.SECONDARY) {
                        e.consume();
                    }
                });

               row.addEventFilter(MouseEvent.MOUSE_PRESSED,event -> {
                if ( event.getButton() == MouseButton.PRIMARY   && event.getClickCount() == 2  ) {
                    event.consume();
                }
                });
                return row ;
            });

对此可能有一个更优雅的解决方案,但您只需在调用
TableView.edit(int,TableColumn)
之前设置
TableView
可编辑,然后在提交或取消编辑时将其设置回不可编辑状态。或者您可以在每个特定的
表格列上设置\unset可编辑内容

例如,在
按钮的操作处理程序中:

button.setOnAction(evt -> {
    evt.consume();
    tableView.requestFocus();
    tableView.edit(-1, null); // cancel any current edit if there is one
    tableView.getSelectionModel().select(tableCell.getIndex());
    tableView.setEditable(true);
    tableView.edit(tableCell.getIndex(), tableColumn);
});
然后对于
表格列

EventHandler<TableColumn.CellEditEvent<S, T>> handler = evt -> tableView.setEditable(false);
tableColumn.setOnEditCancel(handler);
tableColumn.setOnEditCommit(handler);
// or you can use the addEventHandler(EventType, EventHandler) method
EventHandler=evt->tableView.setEditable(false);
tableColumn.setOnEditCancel(处理程序);
setOnEditCommit(处理程序);
//或者可以使用addEventHandler(EventType,EventHandler)方法
EventHandler<TableColumn.CellEditEvent<S, T>> handler = evt -> tableView.setEditable(false);
tableColumn.setOnEditCancel(handler);
tableColumn.setOnEditCommit(handler);
// or you can use the addEventHandler(EventType, EventHandler) method