2013-08-20 39 views
0

我已經在框架上向JTable添加了鍵列表。 現在對kepressed我的代碼在輸入鍵上編輯JTable中的特定單元格並顯示光標

  if (ke.getKeyCode()==10) 
      { 
       int rowIndex = jTable2.getSelectedRow(); 
       int colIndex = jTable2.getSelectedColumn(); 
       jTable2.editCellAt(rowIndex, colIndex); 
       ke.consume(); 

這樣做編輯的細胞,但直到我點擊它的鼠標

+1

爲什麼?編輯由'TabelModel#isEditable'和'TableCellEditor#isCellEditable'控制。 – MadProgrammer

回答

4

不要使用KeyListener的光標不顯示!

Swing旨在使用密鑰綁定(請參見How to Use Key Bindings上的Swing教程)。那就是你將一個Action綁定到KeyStroke。

默認:

  1. Enter鍵將小區選擇移動到下一行
  2. F2鍵將放置一個細胞在編輯模式下

所以,你要更換使用F2鍵的操作執行Enter鍵的默認操作。這很容易通過使用密鑰綁定完成:

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

此外,對於所有Swing組件的默認綁定列表檢查Key Bindings

+0

+1 yes ......................... – mKorbel

0

嘗試添加機器人爲F2的keyPressed:

if (ke.getKeyCode()==10) 
    { 
     int rowIndex = jTable2.getSelectedRow(); 
     int colIndex = jTable2.getSelectedColumn(); 
     jTable2.editCellAt(rowIndex, colIndex); 
     ke.consume(); 

     Robot pressF2 = null; 
     try { 
      pressF2 = new Robot(); 
     } catch (AWTException ex) { 
      System.err.println(ex.getMessage()); 
     } 
     pressF2.keyPress(KeyEvent.VK_F2); 
    } 

我希望這項工作。

相關問題