2011-12-17 111 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