我已完成下面的代码,但有些我无法将注意力集中在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);
答案 0 :(得分:1)
我对它有所了解。由于焦点管理由系统管理。当且仅当它是系统中唯一存在的可编辑活动窗口时,您才可以关注对话框。
例如,保持eclipse打开,其光标在其可编辑窗口上闪烁然后启动应用程序,应用程序中存在的文本框将无法获得焦点(即使在启动应用程序后,光标将在eclipse的可编辑窗口上闪烁) 。在同一场景中,如果eclipse的可编辑窗口中没有闪烁的光标,则应用程序文本框将会聚焦。