JTextField焦点问题 [英] Problem to focus JTextField
问题描述
(仅在Ubuntu中出现问题,在Windows中可以正常工作,在其他Linux环境中不知道)
(Problem occur in Ubuntu only. Works fine in Windows. I don't know in other Linux environments)
我已经使用ComponentListener的方法来调用焦点在JTextField中的一个对话框中,但是对于这种情况,只是不行,我不知道为什么。它显示文本字段中的焦点,并快速切换到按钮。运行并看到:
I have used the approach of the ComponentListener to call focus in JTextField within a dialog, but for this case is just not working, I don't know why. It shows the focus in the text field and fast change to the button. Run and see:
import java.awt.Component;
import java.awt.GridLayout;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class User {
private String username = "";
private String password = "";
public User() {
// default constructor
}
public User(String username, String password) {
this.username = username;
this.password = password;
}
/** Create a panel containing the componet and tha label. */
public JPanel createLabeledComponent(JLabel label, Component comp) {
GridLayout layout = new GridLayout(2, 1);
JPanel panel = new JPanel(layout);
panel.add(label);
panel.add(comp);
label.setLabelFor(comp);
return panel;
}
public void showEditDialog() {
JLabel usernameLbl = new JLabel(username);
final JTextField usernameField = new JTextField();
usernameField.setText(username);
JPanel usernamePnl = createLabeledComponent(usernameLbl, usernameField);
JLabel passwordLbl = new JLabel(password);
JPasswordField passwordField = new JPasswordField(password);
JPanel passwordPnl = createLabeledComponent(passwordLbl, passwordField);
Object[] fields = { "User:", usernamePnl, "Password:", passwordPnl };
JOptionPane optionPane = new JOptionPane(fields, JOptionPane.PLAIN_MESSAGE,
JOptionPane.OK_CANCEL_OPTION, null, null);
JDialog dialog = optionPane.createDialog("User Data");
dialog.addComponentListener(new ComponentAdapter() {
@Override
public void componentShown(ComponentEvent e) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
usernameField.requestFocusInWindow();
}
});
}
});
dialog.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new User().showEditDialog();
}
});
}
}
任何想法如何解决?
- 更新
不幸的是,同样的行为。
Everything running on EDT now. Sadly with the same behavior.
顺便说一句,使用JOptionPane构造函数的最后一个参数(Object initialValue)不起作用。
By the way, either using the last argument (Object initialValue) of the JOptionPane constructor doesn't work.
推荐答案
我记得有一个类似的问题,我使用这个页面底部找到的解决方案:
I remember having a similar problem, I used the solution found at the bottom of this page:
http://bugs.sun.com/bugdatabase/view_bug.do? bug_id = 5018574
这篇关于JTextField焦点问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!