我有我的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