我使用JOptionPane
创建了密码字段。当我运行程序时,JOptionPane
出现并且看起来很棒,但是焦点总是转到OK按钮。我希望焦点从密码字段开始。我尝试了requestFocus()
,requestFocusInWindow()
,但这似乎不起作用。有什么特别的东西我需要去关注密码字段吗?
请参阅下面的代码:
JPasswordField pf = new JPasswordField();
pf.requestFocusInWindow();
int okCxl = JOptionPane.showConfirmDialog(null, pf, "ENTER SUPERUSER PASSWORD", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
答案 0 :(得分:1)
您必须创建JOPtionPane
的实例并使用setWantsInput(boolean)
方法。它并不方便,但您使用的构建器方法实际上只适用于基本情况。然后,您需要在对话框中添加ComponentListener
以请求选择您的密码字段。您可以在JOptionPane
javadoc上找到更多类似的文档。
final JPasswordField pf = new JPasswordField();
//Create OptionPane & Dialog
JOptionPane pane = new JOptionPane(pf, JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION);
JDialog dialog = pane.createDialog("ENTER SUPERUSER PASSWORD");
//Add a listener to the dialog to request focus of Password Field
dialog.addComponentListener(new ComponentListener(){
@Override
public void componentShown(ComponentEvent e) {
pf.requestFocusInWindow();
}
@Override public void componentHidden(ComponentEvent e) {}
@Override public void componentResized(ComponentEvent e) {}
@Override public void componentMoved(ComponentEvent e) {}
});
dialog.setVisible(true);