2013-04-02 72 views
1

在我的Java Swing應用程序Reuestfocus方法不工作在構造函數。但是,如果我使用requestfocus和按鈕動作偵聽器,它會起作用。我想在表單加載時設置Requestfocus。我不明白這裏有什麼錯。 P.S我用JInternal幀Java的requestFocus()不在構造函數

txtItemName.requestFocusInWindow(); // did not work 
    txtItemName.requestFocus(); // did not work 

public ItemMgt() { 

     initComponents(); 

     SwingUtilities.invokeLater(new Runnable() { 
       @Override 
       public void run() { 
        txtItemName.requestFocus(); // did not work 
       } 
     }); 
    } 

private void formInternalFrameActivated(javax.swing.event.InternalFrameEvent evt) { 
     txtItemName.requestFocus(); // did not work. 
    } 
+0

您在JFrame中使用它嗎? –

+0

@Sudhanshu對不起,我忘了提。我使用內部框架 – amal

+0

當四個組件在可見對象創建之前請求重點關注對象時,您會發生什麼?哪一個應該得到它? – Shark

回答

1

的情況可能是由你的組件是不可見的,所以GUI管理器不能設置重點關注一下。

如在文檔中指定:

(..)成分必須是可顯示,可聚焦,可見及其所有祖先(具有頂層窗口除外)必須是可見該請求被授予。

通常,您應該避免在構造函數中擁有如此健壯的邏輯。您的圖形組件應該先構建。完成後,應根據自己的喜好進行調整。

相反的requestFocus(),它recomended使用requestFocusInWindow()更多請訪問教程:如果您使用的是NetBeans IDE,那麼它很容易How to Use the Focus Subsystem

+0

thnx您的回覆。但是你有什麼想法我該如何解決這個問題? – amal

+0

是的,通過閱讀教程。我不能爲你寫一個快速解決方案,因爲我不知道你如何管理你的GUI。閱讀之後,你肯定能夠通過你自己來解決問題。祝你好運! –

+0

thnx您的幫助。我正在閱讀教程。 – amal

0

。只需確保在文本框之前的所有控件都不可通過在「屬性」窗口中取消選中「可聚焦」屬性來獲得焦點。這將使您的文本框成爲第一個可對焦控件,從而在打開內部框架時可以獲得焦點

+0

如果您確實想使用TAB前往另一個控件,該怎麼辦? –

+1

@弗洛林所有其他控件將在按Tab鍵時收到焦點,如果他們的「可調焦」屬性保持選中狀態 – David