java - 关注 JTextField 的问题

标签 java ubuntu dialog focus

(问题仅在 Ubuntu 中出现。在 Windows 中工作正常。我不知道在其他 Linux 环境中)

我已经使用 ComponentListener 的方法在对话框中调用 JTextField 中的焦点,但对于这种情况,它不起作用,我不知道为什么。它在文本字段中显示焦点并快速更改按钮。运行看看:

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();
        }
    });
    }

}

知道如何解决这个问题吗?

--更新

现在一切都在 EDT 上运行。可悲的是,同样的行为。

顺便说一句,要么使用 JOptionPane 构造函数的最后一个参数(Object initialValue)不起作用。

最佳答案

我记得有过类似的问题,我使用了本页底部的解决方案:

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5018574

关于java - 关注 JTextField 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2632785/

相关文章:

java - 传输错误::Jgit::git-upload-pack 不允许

java - 如何循环遍历二维数组并在满足条件时显示索引?

linux - Ubuntu sudo错误

facebook - 如何使用自定义 Facebook 对话框,如本示例

java - 如何链接这两个鼠标事件? JavaFX

java - 无法启动简单的 Spring Boot 项目

安卓 SDK Java : not found

python - 按列组合 CSV 文件

ajax - Primefaces - AjaxStatus - 对话框位于覆盖层后面

jqueryui 打开多个对话框;应该只打开一个