2012-07-26 24 views
2

摘要:轉移從一個細胞焦點移到另一個在JTable中對標籤印刷機

在我的桌面應用程序,我加載一個JTable中,並在編輯模式下,如果我按標籤我需要的單元格的焦點上下一個單元格。

問題: 當我編輯一個單元格的值,然後當我按Tab鍵焦點丟失。我在網上做了一些搜索,發現這是因爲在每個Tab上按下Jtable重新加載自己。

可能的解決方案 一個解決方案,我想的是讓細胞的我在工作的指標,同樣是在一個全局變量,然後在選項卡按我能得到下一個單元的指數和把重點放在那個細胞上。 不知何故,它沒有奏效。

請建議。

在此先感謝..

+0

+1用於構建您的問題:-)雖然我不太明白它:您的意思是_focus_下一個單元格是什麼意思?接下來開始編輯?類似於_focus丟失_ - 從哪個組件? _on每個Tab按下Jtable重新加載本身_不,這不是默認行爲。最好編寫一個證明你的問題的SSCCE,那麼簡單的語言誤解就不會成爲解決方案:-) – kleopatra 2012-07-26 10:04:02

回答

4

關閉我的頭頂,我認爲我們有在脊髓癆InputMap & ActionMap定製keystroke實現克服了這個。

我們使用的實現使我們能夠進行「連續」的編輯,也就是,當用戶按下Enter或Tab鍵,我們移動到下一個編輯單元格並開始編輯

InputMap im = table.getInputMap(JTable.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); 
ActionMap am = table.getActionMap(); 

KeyStroke tabKey = KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0); 

Action moveNextCellAction = am.get(im.get(tabKey)); 

ContinousEditAction continousEditAction = new ContinousEditAction(table, moveNextCellAction); 

im.put(tabKey, "Action.tab"); 

am.put("Action.tab", continousEditAction); 

ContinousEditAction負責找到下一個可編輯的單元格。基本上當動作被解僱,你把當前單元格的股票通過JTable.getEditingRow & JTable.getEditingColumn方法(你還需要檢查該表是通過JTable.isEditing編輯模式,否則,你需要使用JTable.getSelectedRow & JTable.getSelectedColumn - 其實你也許可以僥倖逃脫這樣做,但這是我如何處理這個問題)。

從那裏,你想走過的單元格,直到你找到一個可編輯的單元格。

基本上,您希望檢查當前行的末尾,然後移動到下一個行,直到沒有更多行存在爲止,具體取決於您想要執行的操作,可以選擇循環回到表的起始位置(單元格0x0)並行走,直到達到當前位置。

要小心,如果您不小心,最終可能會持續循環:P。

如果你沒有找到任何可編輯的細胞,你可能只是想選擇使用JTable.setRowSelectionInterval & JTable.setRowSelectionInterval下一個可用的電池,其他明智的您可以撥打JTable.editCellAt(nextRow, nextCol)

但是,這一切都歸結爲它是什麼,你要實現。

此外,您還可以使用同樣的想法回車鍵;)

3

標籤通常工作在JTable中,一旦獲得焦點。如果你想按Tab鍵給下面的代碼鍵編輯下一個單元格發佈jTable的事件。

if (evt.getKeyCode() == 9) { 
      jTable1.editCellAt(nextRowIndex, nextColumnIndex); 
    } 
+0

+1智能的做法。 – h2O 2014-01-25 05:25:58

相關問題