2010-11-10 67 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(); 
         } 
        } 
    });