Включить редактирование только для выбранной строки в таблице - PullRequest
0 голосов
/ 10 июня 2018

Я довольно новичок в JavaFX.У меня есть таблица с несколькими столбцами и Edit button в каждой строке.Всякий раз, когда я нажимаю на 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 ;
            });

и действие моей кнопки выглядит как

 EditButton.setOnAction((ActionEvent event)->{                  
                    TableRow row = cell.getTableRow();
                    tableBuilding.requestFocus();
                    tableBuilding.getSelectionModel().select(row.getIndex());            
                        int i=tableBuilding.getSelectionModel().getSelectedIndex();
                        tableBuilding.edit(i,colName);                                                          
                });

1 Ответ

0 голосов
/ 10 июня 2018

Для этого может быть более элегантное решение, но вы можете просто установить TableView редактируемый прямо перед вызовом tableView.edit(int, TableColumn), а затем установить его обратно не редактируемым, когда редактирование либо зафиксировано, либо отменено.Или вы можете сделать этот набор \ сбросить редактируемые вещи для каждого конкретного TableColumn.

Например, в вашем Button обработчике действий:

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);
});

И затем для 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...