Java swing作业窗格:将showInputDialog和showOptionDialog结合起来?

Java swing作业窗格:将showInputDialog和showOptionDialog结合起来?,java,swing,user-interface,joptionpane,Java,Swing,User Interface,Joptionpane,我在这里遵循API: 我有一个要在提示窗口的组合框中显示的项目列表。JOptionPane中的showInputDialog方法允许我这样做,但是它将我限制为两个按钮(ok和cancel)。我希望有更多的按钮(我可以定义更多的按钮,但我不知道如何使用showInputDialog将其添加到此窗口) 我可以使用showOptionDialog创建一个选项数组(包含我需要的所有按钮),但是提示窗口无法显示我的项目列表。通常接受项目数组的参数(在showInputDialog中)现在需要按钮数组 O

我在这里遵循API:

我有一个要在提示窗口的组合框中显示的项目列表。JOptionPane中的showInputDialog方法允许我这样做,但是它将我限制为两个按钮(ok和cancel)。我希望有更多的按钮(我可以定义更多的按钮,但我不知道如何使用showInputDialog将其添加到此窗口)

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

Object[] selectionValues replaced by Object[] options
有没有办法将它们的功能结合起来

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

因此,最终,这应该发生:

  • 用户单击某个内容并显示一个提示窗口
  • 提示窗口显示项目的组合框(dropbox?)列表
  • 用户选择其中一项,并可以选择按ok、cancel、, 跳过(我定义的任意数量的按钮) 3a。用户不能在原始GUI上执行任何操作,直到其中一个按钮 在新的提示窗口中,已单击
  • 单击其中一个按钮时,它将执行其功能和 用户可以在主GUI上进行操作

  • 您可以创建一个包含JComboBox的JPanel,然后将其作为对象参数放入任何JOptionPane中

    e、 g

    import javax.swing.JComboBox;
    导入javax.swing.JOptionPane;
    公共类JComboFun{
    公共静态void main(字符串[]args){
    String[]工作日={“星期一”、“星期二”、“星期三”、“星期四”,
    “星期五”};
    最终JComboBox组合=新的JComboBox(工作日);
    字符串[]选项={“确定”、“取消”、“Fugedaboutit”};
    字符串title=“title”;
    int selection=JOptionPane.showOptionDialog(空、组合、标题、,
    JOptionPane.DEFAULT_选项,JOptionPane.PLAIN_消息,null,
    期权,期权[0]);
    如果(选择>0){
    System.out.println(“选择为:“+options[selection]);
    }
    Object weekday=combo.getSelectedItem();
    如果(工作日!=null){
    System.out.println(“工作日:+工作日”);
    }
    }
    }
    
    您可以创建一个包含JComboBox的JPanel,然后将其作为对象参数放入任何JOptionPane中

    e、 g

    import javax.swing.JComboBox;
    导入javax.swing.JOptionPane;
    公共类JComboFun{
    公共静态void main(字符串[]args){
    String[]工作日={“星期一”、“星期二”、“星期三”、“星期四”,
    “星期五”};
    最终JComboBox组合=新的JComboBox(工作日);
    字符串[]选项={“确定”、“取消”、“Fugedaboutit”};
    字符串title=“title”;
    int selection=JOptionPane.showOptionDialog(空、组合、标题、,
    JOptionPane.DEFAULT_选项,JOptionPane.PLAIN_消息,null,
    期权,期权[0]);
    如果(选择>0){
    System.out.println(“选择为:“+options[selection]);
    }
    Object weekday=combo.getSelectedItem();
    如果(工作日!=null){
    System.out.println(“工作日:+工作日”);
    }
    }
    }
    
    我有一个项目列表,我想显示在一个组合框中的提示 窗JOptionPane中的showInputDialog方法允许我执行以下操作 不过,我只能按两个按钮(ok和cancel)。我 希望有更多按钮(我可以定义更多按钮,但我 不知道如何使用showInputDialog将其添加到此窗口)

    • 您的问题回答得很好,但是不需要额外的努力就可以创建大量的jComponent,然后就可以很容易地将一堆jButton和JComboBox(都是HFOE和camickr的答案)组合到一个JOptionPane中

    • :-)

    我有一个项目列表,我想显示在一个组合框中的提示 窗JOptionPane中的showInputDialog方法允许我执行以下操作 不过,我只能按两个按钮(ok和cancel)。我 希望有更多按钮(我可以定义更多按钮,但我 不知道如何使用showInputDialog将其添加到此窗口)

    • 您的问题回答得很好,但是不需要额外的努力就可以创建大量的jComponent,然后就可以很容易地将一堆jButton和JComboBox(都是HFOE和camickr的答案)组合到一个JOptionPane中

    • :-)


    +1始终是向任何选项窗格添加自定义组件的选项。我看不出您在哪里创建了
    JPanel
    @ryvantage not attack。其中一个选择,我不想创建一个JButtons或JComboBox,为什么?请看我的“笑话”作为一个“答案真棒!!非常感谢:)我不敢相信我错过了那个对象参数。我想我被变量名“message”吓坏了,让我假设它是一个字符串。@ryvantage:是的,你说得对。起初我认为他需要JOptionPane中的更多组件,但后来我发现他所需要的只是JComboBox。关键信息是,任何Swing组件都可以填充到该对象参数中,包括可以想象到的最复杂的JPanel。+1始终是向任何选项窗格添加自定义组件的选项。我看不出您在哪里创建了
    JPanel
    @ryvantage not attack。其中一个选择,我不想创建一个JButtons或JComboBox,为什么?请看我的“笑话”作为一个“答案真棒!!非常感谢:)我不敢相信我错过了那个对象参数。我想我被变量名“message”甩了,mak
    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);
          }
    
       }
    }
    
    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();  
                }  
            });  
        }  
    }