JavaFX:当我按Enter键时,在表格视图中启用编辑列

时间:2018-09-06 16:50:02

标签: java javafx

我有一个带有可编辑列的表格视图,该列名为“ monto”,在单击鼠标进行编辑时效果很好,但是当我按下“ enter”时,我需要启用编辑功能。

 private TableView<Personal> myTable;
 private TableColumn<Personal,Double> columnaMonto;
 ... //Code when user edit with the mouse
         columnaMonto.setOnEditCommit(
            new EventHandler<TableColumn.CellEditEvent<Personal, Double>>() {
                @Override
                public void handle(TableColumn.CellEditEvent<Personal, Double> event) {
                    int pos = event.getTablePosition().getRow();
                    ((Personal)event.getTableView().getItems().get(
                            event.getTablePosition().getRow())
                    ).setImporte(event.getNewValue());

                    myTable.requestFocus();
                    myTable.getSelectionModel().select(pos + 1);
                    myTable.getFocusModel();
               }
           }
    );

这是我的尝试:

    myTable.setOnKeyReleased(evt -> {
        if (evt.getCode() == KeyCode.ENTER) {
            System.out.println("Enter is OK!!");

           TablePosition focusedCellPosition = myTable.getFocusModel().getFocusedCell();
           System.out.println(focusedCellPosition.getRow());
           myTable.requestFocus();
           myTable.edit(focusedCellPosition.getRow(), columnaMonto);
        }
   });

问题是总是选择编辑(例如双击),只有在用户按Enter时我才需要这样做。 另一个问题是滚动条无法正常工作在同一位置。Example Img

谢谢,对不起,我很难用英语解释。

1 个答案:

答案 0 :(得分:0)

myTable.addEventFilter(KeyEvent.KEY_PRESSED, new EventHandler<KeyEvent>() {
        @Override
        public void handle(KeyEvent event) {

            if( event.getCode() == KeyCode.ENTER) {
                return;
        }

            // switch to edit mode on keypress, but only if we aren't already in edit mode
            if( myTable.getEditingCell() == null) {
                if( event.getCode().isLetterKey() || event.getCode().isDigitKey()) {

                    TablePosition focusedCellPosition = myTable.getFocusModel().getFocusedCell();
                    myTable.edit(focusedCellPosition.getRow(), focusedCellPosition.getTableColumn());
                }
            }
        }
});

此代码在按字母键或数字键时可以正常工作。您的单元格将被编辑。对于输入键,您可以编写条件或逻辑。

相关问题