当按下回车键时,关注下一个cellEditor并在JTable中选择其中的所有文本

时间:2014-06-24 09:44:52

标签: java swing jtable key-bindings enter

我希望输入键在JTable上像tab键一样工作。 我知道这个问题已经问了好几次,我使用了这个页面中的解决方案:Use Enter Key Act Like Tab Key on jTable

    KeyStroke tab = KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0);
    KeyStroke enter = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0);
    InputMap im = table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
    im.put(enter, im.get(tab));

解决方案就像魅力一样。但是当使用tab键时,我覆盖了JTable的changeSelection,并覆盖单元格编辑器的getTableCellEditorComponent以在下一个单元格的textField中选择所有文本:

在JTable中

   @Override
   public void changeSelection(int row, int column, boolean toggle, boolean extend) {
       super.changeSelection(row, column, toggle, extend);

       if (editCellAt(row, column)) {
           Component editor = getEditorComponent();
           editor.requestFocusInWindow();
       }
   }

在CellEditor中

    @Override
    public Component getTableCellEditorComponent(JTable table,
            Object value, boolean isSelected, int row, int column) {

           if (isSelected ) {
                SwingUtilities.invokeLater(new Runnable() {

                 @Override
                 public void run() {
                     textField.selectAll();
                 }
                });
          }
          return super.getTableCellEditorComponent(
                table, value, isSelected, row, column);
    }

因此,当我按Tab键时,下一个单元格被聚焦并且其中的文本被选中,但是当我键入enter键时,第一次单元格松散焦点,第二次进入下一个单元格获得焦点和文本在它中被选中。

所以我的问题是:有没有办法让第一个从单元格输入松散焦点并获得下一个焦点(所以它的行为与tab键完全相同)

1 个答案:

答案 0 :(得分:0)

不知道它是否会有所作为,但我只是覆盖了changeSelection(...)方法来进行单元格选择:

if (editCellAt(row, column))
{
    Component editor = getEditorComponent();
    editor.requestFocusInWindow();
    ((JTextComponent)editor).selectAll();
}

发布显示问题的SSCCE,如果没有帮助的话。