2012-12-30 80 views
3

我碰到這樣的代碼:SetFocusable方法或聚焦組件的Java

public class Board extends JPanel implements ActionListener{ 


    public Board(){ 

    setFocusable(true); 

    } 

} 

如果我setFocusable是真實的,究竟是什麼方法做JPanel的對象?關注組件的概念是什麼?

基於Java API,這種方法位於組件類,超類JPanel的。方法描述狀態「將此組件的可聚焦狀態設置爲指定值,該值將覆蓋組件的默認可聚焦性。」這個描述聽起來對我來說太過於技術性和高層次的行話(他們在夏天剛剛完成了一個Java課程)。有時候,我認爲這些方法描述不是針對所有具有不同Java知識水平的人寫的。有人可以用平庸的語言解釋方法描述嗎?

回答

6

focusable標誌指示組件是否可以獲得焦點,如果它被要求這樣做。 JPanel組件在默認情況下是可調焦的,因此當您將其設置爲true時,不會有任何更改。

不是可聚焦不能獲得焦點的組件。

一個例子

比方說,你已經實現與多個文本字段一個對話框,你希望用戶輸入一些文字。當用戶開始輸入時,一個文本字段需要有應用程序的焦點:它將是接收鍵盤輸入的字段。

當您實現焦點遍歷(用戶從一個文本字段跳轉到另一個文本字段(例如通過使用tab按鈕)時,用戶可以「跳轉」到下一個文本字段。該應用程序將試圖獲得下一個領域的重點,以準備接收文本。當下一個字段不可聚焦時,該請求將被拒絕,並且下一個字段將被測試。例如,您不希望標籤獲得焦點,因爲您無法輸入文本。

默認情況下,true的焦點標記設置爲Component類。當你構建從Component類派生的對象(例如,當你建立你的JPanel),該Component類的構造函數被調用,並設置默認的可聚焦標誌true

那些希望覆蓋此默認派生類可以調用的方法setFocusable更改默認的,就像你在你的例子一樣。

注意setFocusable不將焦點設置本身,它只是給到可能獲得焦點的組件的能力。

+0

我不明白你在說什麼。它仍然聽起來太技術。我很欣賞這個答覆。爲什麼人們會給出一個組件焦點而不是不給它? – Nicholas

+2

@Nicholas我更新了答案。我希望這個例子會更清晰。通常情況下,如果您需要對某個組件進行某些操作,則可以讓組件獲得關注的能力。請注意,setFocusable本身不會設置焦點,它只是提供了將焦點集中到組件的功能。 –

+0

現在這個例子讓我更清楚,現在我讀了它是如何在特定情況下應用的。謝謝!我要在JTextFields上測試這個方法。 – Nicholas

0

setFocusable()實際上是一個從組件類的揮杆方法。

public void setFocusable(boolean focusable) 

它可以讓組件(在你的情況,JPane升這延伸組件)獲得的越來越集中的權力。它實際上並未將組件設置爲重點。它只是表示Component是否可以被聚焦,因爲它包含一個要傳遞的布爾參數。