2

我已经完成了下面的代码,但是有些我无法将焦点设置在 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);
4

1 回答 1

1

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

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

于 2013-03-07T05:08:03.767 回答