【问题标题】:JDialog is not getting focussedJDialog 没有得到关注
【发布时间】:2012-10-03 15:03:42
【问题描述】:

我已经完成了下面的代码,但有些我无法将注意力集中在 JDialog 上:( loginDialog.requestFocusInWindow() 返回 false。有什么方法可以专注于 JDialog 吗? LoginDialog.this.txt_PASSWORD.requestFocusInWindow() 也返回 false。

Esc 按钮按下事件也不起作用

    this.loginDialog  = new JDialog();                  
    this.loginDialog.setTitle(applicationName+Keys.BLANK+Keys.DASH+Keys.BLANK+Messages.getMessage(IMessageKeys.LOGIN));
    this.loginDialog.setModal(true);        
    this.loginDialog.setLayout(new BorderLayout());
    this.loginPanel=getLoginPane();
    this.buttonPanel=getButtonPanel();
    this.infoLabel.setText(Keys.BLANK);
    this.loginDialog.add(this.infoLabel,BorderLayout.NORTH);
    this.loginDialog.add(this.loginPanel,BorderLayout.CENTER);
    this.loginDialog.add(this.buttonPanel,BorderLayout.SOUTH);
    this.loginDialog.setSize(370, 236);
    this.loginDialog.setResizable(false);
    this.loginDialog.setLocationRelativeTo(null);
    objLogger.debug("Login dialog init method call end"); //$NON-NLS-1$

    this.loginDialog.addWindowListener(new WindowAdapter() {
        @Override
        public void windowOpened(WindowEvent e) {
            LoginDialog.this.loginDialog.requestFocus();
            LoginDialog.this.loginDialog.requestFocusInWindow();
            LoginDialog.this.txt_PASSWORD.addNotify();
            LoginDialog.this.txt_PASSWORD.requestFocusInWindow();
            LoginDialog.this.txt_PASSWORD.requestFocus();
        }
        @Override
        public void windowClosing(WindowEvent e) {
            close();
        }
    }); 

    KeyStroke ks = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0, true);
    this.loginDialog.getRootPane().getInputMap().put(ks, GenePanelConstants.CLOSE_ACTION);
    this.loginDialog.getRootPane().getActionMap().put( GenePanelConstants.CLOSE_ACTION, new AbstractAction() {
        private static final long serialVersionUID = 2871751669355251894L;
        @Override
        public void actionPerformed(ActionEvent ae) {
            close();
        }
    });

    this.txt_PASSWORD.requestFocusInWindow();
    this.txt_PASSWORD.requestFocus();
    this.loginDialog.setAlwaysOnTop(true);
    this.loginDialog.setVisible(true);

【问题讨论】:

  • 你得到答案了吗???
  • @amod0017: 我已经在下面发布了答案:-)

标签: focus jdialog


【解决方案1】:

我知道了。由于焦点管理由系统管理。当且仅当它是系统中唯一一个可编辑的活动窗口时,您才能将焦点放在对话框上。

例如,保持 eclipse 打开,光标在其可编辑窗口上闪烁,然后启动您的应用程序,应用程序中存在的文本框将不会获得焦点(即使在您启动应用程序后,光标也会在 eclipse 的可编辑窗口上闪烁) .在相同的情况下,如果 Eclipse 的可编辑窗口上没有闪烁的光标,您的应用程序文本框将获得焦点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-12
    • 1970-01-01
    • 1970-01-01
    • 2012-02-28
    • 1970-01-01
    相关资源
    最近更新 更多