2010-11-10 89 views
0

我想将单元格焦点转移到JTable中的某个特定单元格上,例如当单元格(2,3)上的焦点和按下回车键时,焦点应该转移到单元格(2,5 )是跳过一个单元格(2,4)。转移焦点在JTable中

为此,我使用JTable类的changeSelection()方法,但它不工作。

回答

0

也许你可以在光标移动由默认的UI实现完成的地方找到答案。 jdk1.6.0_10 \ src \ javax \ swing \ plaf \ basic \ BasicTableUI.java 我认为这是您正在寻找的主角选择索引。

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