将焦点转移到JTable中

时间:2010-11-10 08:04:18

标签: swing jtable

我希望将细胞焦点转移到JTable中的特定细胞,就像聚焦细胞(2,3)和按下回车键后,焦点应该转移到跳过的细胞(2,5)一个细胞(2,4)。

为此,我使用的是JTable类的方法changeSelection(),但它无效。

2 个答案:

答案 0 :(得分:0)

也许您可以在默认UI实现完成光标移动的位置找到答案。   jdk1.6.0_10的\ src \的javax \摇摆\ PLAF \基本\ BasicTableUI.java 我认为这是你正在寻找的领先选择指数。

答案 1 :(得分:0)

是否应仅从确切的细胞(2,3)或第3列的所有细胞转移焦点?无论如何,这是一个似乎做你要求的例子。虽然请注意此示例对TableCellEditor采取以下假设:

  • TableCellEditor应该在每次调用#getTableCellEditorComponent时返回相同的组件(因为我们向它添加了KeyListener)
  • 当要求输入不在表中的值时,TableCellEditor可能不会失败(如果在安装过程中TableModel为空)

    table.setSurrendersFocusOnKeystroke(true);
    table.getCellEditor(2, 3).getTableCellEditorComponent(table, null, false, 2, 3).addKeyListener(new KeyAdapter()
    {
        @Override
        public void keyPressed(KeyEvent e)
        {
            if (e.getKeyCode() == KeyEvent.VK_ENTER && table.getSelectedRow() == 2 && table.getSelectedColumn() == 3)
            {
                selectCell(2, 5);
                table.editCellAt(2, 5);
                focusEditedCell();
                e.consume();
            }
        }
    
    
       private void selectCell(int row, int col)
       {
            table.setRowSelectionInterval(row, row);
            table.setColumnSelectionInterval(col, col);
       }
    
    
       private void focusEditedCell()
       {
           Component c = table.getEditorComponent();
           if (c != null)
           {
              c.requestFocusInWindow();
           }
       }
    });