2013-08-06 55 views
0

我有一個文本框,我想顯示一個對話框,當文本框是焦點增益。所以我寫了下面的代碼。但是當設置對話框時,對話框會再次出現。我試圖調試並檢查換行符。那個時候如果我的對話框中看到那麼多的執行不會發生之前放置txt2.requestFocus()不執行多的時間,但在正常模式下,它使對話框出現兩次執行多時間......Java:文本字段FocusListener focusGained執行兩次,爲什麼?

txt1.addFocusListener(new FocusListener(){ 

    @Override 
    public void focusGained(FocusEvent e) { 

     myform f = new myform(null,true); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
     if("OK".equals(f.button_state)){ 
      txt2.requestFocus(); 
     } 
    } 

    @Override 
    public void focusLost(FocusEvent e) {     
    } 

}); 

。但我不相信。因爲我需要保持光標在txt1

你有什麼想法..>

回答

1
  • 的FocusListener不是代碼合適的地方modifyied容器的創建,其中

  • 重點是相當異步的,那麼有沒有一些保證適當的排序的方法

  • Swing GUI創作必須包裝到invokeLater中,更多請參見Oracle教程 - 初始線程

  • 僅此代碼剪斷將作品的FocusListener

。裹成的invokeLater

if("OK".equals(f.button_state)){ 
    txt2.requestFocus(); 
} 
  • setVisible(true);myform裹成invokLater,但我認爲,必須在準備(每JComponents添加,初始化,使用和應用LayoutManagerpacked),否則沒有保證什麼,有您只能致電

。包裹成invokeLater

f.setVisible(true); 
if("OK".equals(f.button_state)){ 
     txt2.requestFocus(); 
}