2013-03-12 27 views
3

我目前遇到这种情况,我需要为我的应用程序的用户提供一个对话框,其中包含多个可供选择的选项。 例子:与JOptionPane.showInputDialog一起使用ArrayList

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。第二点是当我调用它时它不会给我选定的索引,但我需要这样做,因为我在后台有另一个复杂列表,它包含由所选选项的索引定义的值。 是否有可能将动态列表推送到该对话框,或者是否有其他更优雅灵活的方式来执行我所需要的操作?

非常感谢。

+1

用JComboBox构建自己的JDialog。这样,您可以使用ComboBoxModel控制JComboBox。 – 2013-03-12 14:16:45

+0

感谢您的回复,我也正在考虑使用JFrame或类似的东西,但我不知道我可以用这种方式自定义JDialog。因此,使用JComboBox,我将能够提供动态元素列表? – vm370 2013-03-12 14:22:12

+0

是的。我建议使用ComboBoxModel。 DefaultComboBoxModel可能会工作。 – 2013-03-12 14:25:17

回答

3

你可以使用indexOf()List基于什么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); 
+0

这实际上是我一开始就在寻找的东西,所以我会给这个答案标志,尽管其他选项也很好。谢谢! – vm370 2013-03-12 14:53:07

相关问题