2011-12-17 118 views
1

我有我的java swing形式4個JTextfields。問題是我需要通過Java代碼而不是使用Tab鍵將Focus從一個JTextField移動到另一個JTextField。重點獲得和焦點丟失事件

如果通過JTextField2獲得焦點意味着需要選擇JTextField2中的內容。我不知道如何做這個PLZ把你正確的代碼與這個問題聯繫起來

+6

* 「PLZ把你的正確的代碼」 *請把你的* *在[SSCCE(HTTP的形式最好的嘗試:// sscce.org/)。添加您在閱讀[如何使用焦點子系統](http://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html)和[JTextField](http:// docs。 oracle.com/javase/7/docs/api/javax/swing/JTextField.html)docs(特別注意'select'上的任何發現)也不會傷害。還要注意這不是一條短信,所以它是'請'而不是'plz'。 – 2011-12-17 11:53:16

+1

@sjohnfernandas - 你是否真的閱讀答案,因爲你不接受或迴應他們(這和你的其他問題)?如果你繼續這樣做,人們會停止幫助你... – 2011-12-27 14:57:09

回答

1

,可能是有點複雜

你必須包裝和耽誤您ActionActionListenerinvokeLater(),並且把裏面的(最safiest方式是設置有如下的代碼行)

  • JTextField2.setText(JTextField2.getText);

  • JTextField2.selectAll();

編輯@Andrew湯普森

private FocusListener fcsListener = new FocusListener() { 

     @Override 
     public void focusGained(FocusEvent e) { 
      dumpInfo(e); 
     } 

     @Override 
     public void focusLost(FocusEvent e) { 
      //dumpInfo(e); 
     } 

     private void dumpInfo(FocusEvent e) { 
      System.out.println("Source : " + name(e.getComponent())); 
      System.out.println("Opposite : " + name(e.getOppositeComponent())); 
      System.out.println("Temporary: " + e.isTemporary()); 
      Component c = e.getComponent();//works for editable JComboBox too 
      if (c instanceof JFormattedTextField) { 
       ((JFormattedTextField) c).selectAll(); 
      } else if (c instanceof JTextField) { 
       ((JTextField) c).selectAll(); 
      }//both methods not correct required setText(getText()) inside invokeLater 
     } 

     private String name(Component c) { 
      return (c == null) ? null : c.getName(); 
     } 
    }; 
+0

'JTextField2.setText(JTextField2.getText);'這不是沒有任何效果,或進入無限循環? – 2011-12-17 11:55:14

+0

如果你在EDT內部運行任何東西,或者從後臺任務中週期性地更新另一個JComponent(帶有附加Listener),那麼你可能會失去焦點,並且你必須強制Focus這兩行代碼包裝在invokeLater中,爲我工作的所有TextComponent不包括JTextPane – mKorbel 2011-12-17 12:48:32

+0

@Andrew Thompson請參閱我的編輯 – mKorbel 2011-12-17 13:13:07

相關問題