首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JPasswordField焦点在JOptionPane上的MacOS

JPasswordField焦点在JOptionPane上的MacOS
EN

Stack Overflow用户
提问于 2015-04-24 05:40:29
回答 2查看 155关注 0票数 0

使用JOptionPaneJDialog中显示JPasswordField的概念已经被问到并得到了回答,但由于某些原因,我无法在Java7 (Oracle)下关注Mac上的JPasswordField。下面的代码在Windows上工作,并使用ComponentListener将焦点设置为JPasswordField on componentShown。我甚至尝试过用invokeLater包装它,尽管我不认为这是必需的,因为我是在EDT上执行它的。

代码语言:javascript
复制
private String passwordPrompt(String p) {
  String thePassword = null;
  final JPasswordField pf = new JPasswordField();
  JOptionPane op = new JOptionPane(pf, JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION);
  JDialog d = op.createDialog(p);
  d.addComponentListener(new ComponentListener() {
    @Override
    public void componentShown(ComponentEvent e) {
      SwingUtilities.invokeLater(new Runnable(){
        @Override
        public void run() {
          pf.requestFocusInWindow();
        }
      });
    }
    @Override
    public void componentHidden(ComponentEvent e) {}

    @Override
    public void componentResized(ComponentEvent e) {}

    @Override
    public void componentMoved(ComponentEvent e) {}
  });

  if (uIcon != null) {
    d.setIconImage(new ImageIcon(uIcon).getImage());
  }
  d.setLocationRelativeTo(T);
  d.setVisible(true);

  if (op.getValue() == JOptionPane.OK_OPTION) {
    thePassword = new String(pf.getPassword());
  }
  if ((thePassword == null) || thePassword.isEmpty()) {
    thePassword = null;
  }

  d.dispose();
  return thePassword;
}

该函数基本上提示用户输入密码,但当对话框显示时,我希望关注JPasswordField。我是不是做错了什么,或者我是不是碰到了Mac的怪癖之一?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-24 06:08:50

使用WindowFocusListener,这似乎适用于Windows和Mac (小牛10.9.5/Java 8)

代码语言:javascript
复制
    final JPasswordField pf = new JPasswordField(10);
    JOptionPane op = new JOptionPane(pf, JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION);
    JDialog d = op.createDialog("Test");
    d.addWindowFocusListener(new WindowAdapter() {
        @Override
        public void windowGainedFocus(WindowEvent e) {
            pf.requestFocusInWindow();
        }
    });
    d.pack();
    d.setLocationRelativeTo(null);
    d.setVisible(true);
票数 1
EN

Stack Overflow用户

发布于 2015-04-24 05:48:17

看看对话焦点。它使用可能对您有用的HierarchyListener。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29839559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档