2011-01-11 48 views
4

我需要幫助工作getFocusOwner()。我有一個我在Java中製作的Sudoku遊戲,並且想要將箭頭鍵導航添加到程序中。我做了一些研究,發現使用焦點系統是最好的方法(如果不是,請給我一個更好的方法,我可以研究它)。getFocusOwner與自定義類

好吧,爲了測試目的,我試圖將焦點設置爲SetField,這是一個擴展JTextField的自定義類(Custom,因爲我想禁用任何不是數字的輸入)。它已被設置爲可以聚焦。我在網格中間的SetField上調用了requestFocusInWindow(),並將焦點設置爲該組件。當我嘗試檢索具有焦點的組件時,會出現問題。

這是我在做什麼,測試getFocusOwner()方法:無論我在嘗試這是什麼零部件

sGrid[40].requestFocusInWindow(); 

    try{ 
     System.out.println(this.getFocusOwner().getClass().getSimpleName()); 
    } catch(NullPointerException e){ 
     e.printStackTrace(); 
    } 

,我總是得到空指針異常。我嘗試了JButtons,JLabels,甚至在我的程序中使用JPanels。雖然重點被設置爲組件。我可以看到目標SetField中的插入符號閃爍。有什麼我做錯了嗎?預先感謝您的幫助。

回答

1

剛剛發現了問題。對於其他有問題的人,請嘗試使用(Window).getMostRecentFocusOwner()。這對我有效。

1
  1. 取而代之的是自定義組件只允許數字,只是我們的JFormattedTextField。
  2. 您是否需要確定哪個組件具有焦點,爲什麼不添加KeyListener,MouseListener?我不確定你在做什麼,但看起來很奇怪。
+0

我所做的只是通過打印出它返回的組件的簡單名稱來測試getFocusOwner方法。我想我必須得到哪個組件具有焦點,這樣我才能確定在按下箭頭鍵後焦點將會到達哪裏。 我會研究JFormattedTextField。無論如何,我目前的解決方案工作得並不好。 – SkylineAddict 2011-01-11 02:41:00

1

我想添加箭頭鍵導航到程序。

您應該使用Key Bindings。創建一個基本的「ChangeFocusAction」。您將需要4個此類的實例,您可以將其映射到KeyStroke。

假設您有81個文本字段的數組,您的Action可以使用整數值來創建,該值告訴Action如何更改焦點。例如:

右= -1
左= 1
向上= -9
向下= 9

的ActionEvent的源將包含具有焦點的文本字段。然後,您搜索arry以查找該文本字段的偏移量。然後,將上面的int值添加到索引並請求該組件的焦點。

+0

這正是我想要做的,但我需要獲得首先關注焦點的組件? – SkylineAddict 2011-01-11 02:37:31