JDialog没有得到关注

时间:2012-10-03 15:03:43

标签: focus jdialog

我已完成下面的代码,但有些我无法将注意力集中在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);

1 个答案:

答案 0 :(得分:1)

我对它有所了解。由于焦点管理由系统管理。当且仅当它是系统中唯一存在的可编辑活动窗口时,您才可以关注对话框。

例如,保持eclipse打开,其光标在其可编辑窗口上闪烁然后启动应用程序,应用程序中存在的文本框将无法获得焦点(即使在启动应用程序后,光标将在eclipse的可编辑窗口上闪烁) 。在同一场景中,如果eclipse的可编辑窗口中没有闪烁的光标,则应用程序文本框将会聚焦。