我有我的java swing形式4个JTextfields。问题是我需要通过Java代码而不是使用Tab键将Focus从一个JTextField移动到另一个JTextField。重点获得和焦点丢失事件
如果通过JTextField2获得焦点意味着需要选择JTextField2中的内容。我不知道如何做这个PLZ把你正确的代码与这个问题联系起来
我有我的java swing形式4个JTextfields。问题是我需要通过Java代码而不是使用Tab键将Focus从一个JTextField移动到另一个JTextField。重点获得和焦点丢失事件
如果通过JTextField2获得焦点意味着需要选择JTextField2中的内容。我不知道如何做这个PLZ把你正确的代码与这个问题联系起来
你可以调用requestFocusInWindow()
作为你想要关注的文本字段。
,可能是有点复杂
你必须包装和耽误您Action或ActionListener为invokeLater()
,并且把里面的(最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();
}
};
'JTextField2.setText(JTextField2.getText);'这不是没有任何效果,或进入无限循环? – 2011-12-17 11:55:14
如果你在EDT内部运行任何东西,或者从后台任务中周期性地更新另一个JComponent(带有附加Listener),那么你可能会失去焦点,并且你必须强制Focus这两行代码包装在invokeLater中,为我工作的所有TextComponent不包括JTextPane – mKorbel 2011-12-17 12:48:32
@Andrew Thompson请参阅我的编辑 – mKorbel 2011-12-17 13:13:07
* “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
@sjohnfernandas - 你是否真的阅读答案,因为你不接受或回应他们(这和你的其他问题)?如果你继续这样做,人们会停止帮助你... – 2011-12-27 14:57:09