Java JOptionPane.showOptionDialog是否不显示按钮?
除了没有按钮外,以下代码按预期显示了一个对话框:Java JOptionPane.showOptionDialog是否不显示按钮?,java,swing,joptionpane,Java,Swing,Joptionpane,除了没有按钮外,以下代码按预期显示了一个对话框: final JPasswordField passwdField = new JPasswordField(); passwdField.setColumns(20); final JComponent[] inputs = new JComponent[] { passwdField }; int res = JOptionPane.showOptionDialog(null, "Enter Password", "Login
final JPasswordField passwdField = new JPasswordField();
passwdField.setColumns(20);
final JComponent[] inputs = new JComponent[] { passwdField };
int res = JOptionPane.showOptionDialog(null, "Enter Password", "Login",
JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE,
null, inputs, "");
显示以下对话框(Java 6.2?,Windows 7 64位):
为什么没有确定/取消按钮?(顺便说一句,对话框的大小不可调整,所以我不知道它们是否在可见框之外)
(另外,按Enter键不会关闭对话框,“x”会关闭对话框)您的问题在于输入数组。阅读API,它会告诉您应该有所不同。我通常使用一个字符串数组,每个字符串代表一个按钮字符串,或者有时我混合使用对象、混合组件和字符串。例如
JPasswordField passField = new JPasswordField(10);
Object[] inputs = {passField, "OK", "Cancel"};
int res = JOptionPane.showOptionDialog(null, "Enter Password", "Login",
JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE,
null, inputs, "");
if (res == 1) {
System.out.println("Password is: " + new String(passField.getPassword()));
}
很公平。使用
passwdField
作为第二个参数起作用。@卡斯滕:只要您在决定如何处理返回的结果时考虑到顺序,顺序就无关紧要了(这里由res
持有)。我指的是showOptionDialog
的第二个参数,而不是输入
array@Carsten:是的,如果需要,Object参数可以保存一个JPasswordField,甚至可以保存一个包含复杂GUI的JPanel。JOptionPanes可以非常灵活和强大,这比大多数人意识到的要多。