【问题标题】:JOptionPane.showOptionDialog shows no buttons?JOptionPane.showOptionDialog 不显示按钮?
【发布时间】:2023-04-08 22:57:01
【问题描述】:

以下代码按预期显示了一个对话框,除了没有按钮:

  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”会关闭对话框)

【问题讨论】:

    标签: java swing joptionpane


    【解决方案1】:

    您的问题在于输入数组。阅读 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 作为第二个参数。
    • @Carsten:顺序无关紧要,只要您在决定如何处理返回的结果(此处由res 持有)时将其考虑在内。
    • 我的意思是showOptionDialog的第二个参数,而不是inputs数组
    • @Carsten:是的,Object 参数可以保存一个 JPasswordField 甚至是一个 JPanel,如果需要的话,它可以保存一个复杂的 GUI。 JOptionPanes 可以非常灵活和强大,比大多数人意识到的要强大。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 2012-10-08
    • 2019-07-31
    • 2018-10-11
    相关资源
    最近更新 更多