Java 将ArrayList与JOptionPane.showInputDialog一起使用

Java 将ArrayList与JOptionPane.showInputDialog一起使用,java,swing,joptionpane,Java,Swing,Joptionpane,我目前的情况是,我需要为我的应用程序的用户提供一个对话框,其中有许多选项可供选择。 例如: Object[] possibilities = {"ham", "spam", "yam"}; String s = (String)JOptionPane.showInputDialog( frame, "Complete the sentence:\n" + "\"Green eg

我目前的情况是,我需要为我的应用程序的用户提供一个对话框,其中有许多选项可供选择。 例如:

Object[] possibilities = {"ham", "spam", "yam"};
String s = (String)JOptionPane.showInputDialog(
                    frame,
                    "Complete the sentence:\n"
                    + "\"Green eggs and...\"",
                    "Customized Dialog",
                    JOptionPane.PLAIN_MESSAGE,
                    icon,
                    possibilities,
                    "ham");
似乎JOptionPane.showInputDialog可以做到这一点。然而,它似乎只能使用对象数组来选择选项,但在我的例子中,列表不是静态的,所以我不能定义数组,因为我有一个大小可变的ArrayList。第二点是,当我调用它时,它不会返回所选索引,但我需要这样做,因为我在后台有另一个复杂的列表,其中包含由所选选项的索引定义的值。 是否有可能将动态列表推送到这个对话框中,或者是否有其他更优雅、更灵活的方法来完成我需要的任务

提前非常感谢。

  • Object[]可能性={“ham”、“spam”、“yam”}JComboBox

  • 关于


您可以使用
列表上的
indexOf()
根据
JOptionPane
返回的内容确定索引。下面的示例演示了这一点,可以扩展为使用更大的选项列表

List<String> optionList = new ArrayList<String>();
optionList.add("Ham");
optionList.add("Eggs");
optionList.add("Bacon");
Object[] options = optionList.toArray();
Object value = JOptionPane.showInputDialog(null, 
                                           "Favorite Food", 
                                           "Food", 
                                            JOptionPane.QUESTION_MESSAGE, 
                                            null,
                                            options, 
                                            options[0]);

int index = optionList.indexOf(value);
List optionList=new ArrayList();
选择列表。添加(“火腿”);
选择列表。添加(“鸡蛋”);
选择列表。添加(“培根”);
Object[]options=optionList.toArray();
对象值=JOptionPane.showInputDialog(null,
“最喜欢的食物”,
“食物”,
JOptionPane.QUESTION\u消息,
无效的
选项,
期权[0]);
int index=optionList.indexOf(值);

使用JComboBox构建自己的JDialog。通过这种方式,您可以使用ComboxModel控制JComboBox。感谢您的回复,我也在考虑使用JFrame之类的工具,但我不知道我可以用这种方式自定义JDialog。因此,有了JComboBox,我将能够提供一个动态的元素列表?是的。我建议使用ComboBoxModel。DefaultComboxModel可能会工作。好的,谢谢,但是当我创建自己的对话框时,我不确定如何通过单击按钮对相应的操作做出反应。我必须为这些按钮定义一些额外的侦听器吗?请参阅mKorbel答案中的Oracle教程。尝试一下,当你陷入困境时,再问另一个堆栈溢出问题。这实际上是我首先要搜索的,所以我会将回答标志授予它,尽管其他选项也很好。谢谢