2014-03-26 51 views
1

我有一個登錄表單與2個JTextFields - 一個「elbtUser」另一個「通過」(用戶名和密碼),一切正常。如果用戶名保持空白並且單擊傳遞,則我想要顯示如下所示的消息,否則按鈕將啓用。它有效,但消息在無盡的循環中不斷重複。如何恢復形成突圍?JPasswordField addFocusListener不工作正確不斷重複消息

pass.addFocusListener(new FocusAdapter() { 
    @Override 
    public void focusGained(FocusEvent arg0) { 
     if(elbtUser.getText().equals("")) { 
      JOptionPane.showMessageDialog(null, "username cannot be empty");  
     } 
     else { 
      btnLogin.setEnabled(true); 
     } 
    } 
}); 

回答

0

我不能說100%的確定性,但我猜對話框關閉後文本字段重新獲得焦點並觸發動作監聽器。如果是這種情況,請嘗試以下兩種情況中的一種:

1)添加變量以保持狀態,並在對話框應顯示時顯示。一旦獲得焦點,然後在elbtUser獲得焦點時重置。 2)你可以在顯示對話框後強制elbtUser請求焦點,elbtUser.requestFocus();

//編輯..我只是試圖(1),因爲它似乎更容易和它的作品,

 pass.addFocusListener(new FocusAdapter() { 
     @Override 
     public void focusGained(FocusEvent arg0) { 
      if(elbtUser.getText().equals("")) { 

       //do this *BEFORE* displaying the dialog!!! 
       elbtUser.requestFocus(false); 

       JOptionPane.showMessageDialog(null, "username cannot be empty"); 

      } 
      else { 

      } 
     } 
    }); 
+0

嘿丹感謝的是,現在工作得很好。 – Gman