Java swing JOptionPane:结合showInputDialog和showOptionDialog?

时间:2014-05-17 19:24:57

标签: java swing user-interface joptionpane

我在这里关注API:

http://docs.oracle.com/javase/7/docs/api/javax/swing/JOptionPane.html#showOptionDialog%28java.awt.Component,%20java.lang.Object,%20java.lang.String,%20int,%20int,%20javax.swing.Icon,%20java.lang.Object[],%20java.lang.Object%29

我有一个项目列表,我想在提示窗口的ComboBox中显示。来自JOptionPane的showInputDialog方法允许我这样做,但它限制了我两个按钮(确定和取消)。我想有更多按钮(我可以定义更多按钮,但我不知道如何使用showInputDialog将其添加到此窗口)。

我可以使用showOptionDialog创建一个选项数组(包含我需要的所有按钮),但是提示窗口无法显示我的项目列表。通常接受项目数组的参数(在showInputDialog中)现在需要一个按钮数组。

Object[] selectionValues replaced by Object[] options

有没有办法合并他们的功能?

我可以在技术上创建一个新的GUI来实现这一点,但如果已经有一个现有的实现,我可能会做很多不必要的工作。此外,重要的是用户在新的提示窗口上完成任务,然后才能在原始帧上执行任何操作。

所以最终,这应该发生:

  1. 用户点击某些内容并显示提示窗口。
  2. 提示窗口显示组合框(Dropbox?)项目列表。
  3. 用户选择其中一项,可以选择按确定,取消,    跳过,...(我定义的任意数量的按钮) 3A。在其中一个按钮之前,用户无法对原始GUI执行任何操作     已单击新提示窗口。
  4. 当点击其中一个按钮时,它执行它的功能和    用户可以继续使用主GUI。

2 个答案:

答案 0 :(得分:6)

您可以创建一个包含JComboBox的JPanel,然后将其放入任何您想要作为Object参数的JOptionPane。

如,

import javax.swing.JComboBox;
import javax.swing.JOptionPane;

public class JComboFun {
   public static void main(String[] args) {
      String[] weekdays = { "Monday", "Tuesday", "Wednesday", "Thursday",
            "Friday" };
      final JComboBox<String> combo = new JComboBox<>(weekdays);

      String[] options = { "OK", "Cancel", "Fugedaboutit" };

      String title = "Title";
      int selection = JOptionPane.showOptionDialog(null, combo, title,
            JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE, null,
            options, options[0]);

      if (selection > 0) {
         System.out.println("selection is: " + options[selection]);
      }

      Object weekday = combo.getSelectedItem();
      if (weekday != null) {
         System.out.println("weekday: " + weekday);
      }

   }
}

答案 1 :(得分:1)

  

我有一个项目列表,我想在提示符中的ComboBox中显示   窗口。 JOptionPane的showInputDialog方法允许我这样做   就是这样,但是它限制了我两个按钮(确定和取消)。一世   想拥有更多按钮(我可以定义更多按钮,但是我   我不知道如何使用showInputDialog将它添加到这个窗口。

  • 您的问题得到了很好的解答,但是可以在不需要额外努力的情况下创建大量的JComponents,这是可能的,很容易将一堆JButton和JComboBox放在一起(HFOE和camickr的答案)一个JOptionPane

  • : - )

import java.awt.EventQueue;  
import javax.swing.Icon;  
import javax.swing.JOptionPane;  
import javax.swing.UIManager;  

public class MyOptionPane {  

    public MyOptionPane() {  
        Icon errorIcon = UIManager.getIcon("OptionPane.errorIcon");  
        Object[] possibilities = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};  
        Integer i = (Integer) JOptionPane.showOptionDialog(null,   
                null,  "ShowInputDialog",   
                JOptionPane.PLAIN_MESSAGE, 1,  errorIcon, possibilities, 0);

        // or

        Integer ii = (Integer) JOptionPane.showInputDialog(null,  
                "Select number:\n\from JComboBox", "ShowInputDialog",  
                JOptionPane.PLAIN_MESSAGE, errorIcon, possibilities, "Numbers");  
    }  

    public static void main(String[] args) {  
        EventQueue.invokeLater(new Runnable() {  
            @Override  
            public void run() {  
                MyOptionPane mOP = new MyOptionPane();  
            }  
        });  
    }  
}