如何返回JOptionPane用于switch语句的Object数组的索引?

时间:2012-07-15 06:11:16

标签: java arrays joptionpane

我正在试验Oracle上对话框教程的变体。我觉得我提供的选项数量导致按钮太多,所以我从OptionDialog转换为InputDialog并使用了Object数组。但是,现在,由于数据类型的更改,我的switch语句(在replyMessage中)不起作用。如何获取与用户选择对应的Object数组中的索引?

Object answer;        
    int ansInt;//the user'a answer stored as an int

    Object[] options = {"Yes, please",
            "No, thanks",
            "No eggs, no ham!",
            "Something else",
            "Nothing really"
        };//end options
    answer = JOptionPane.showInputDialog(null, "Would you like some green eggs to go with that ham?",
        "A Silly Question",
        JOptionPane.QUESTION_MESSAGE,
        null,
        options,
        options[2]);

    ansInt = ;//supposed to be the index of user's seleection   

    replyMessage(ansInt);

1 个答案:

答案 0 :(得分:2)

showInputDialog将返回用户输入的字符串,这是options数组中的字符串之一。知道选择哪个索引的最短方法是在options数组上循环并找到相等:

for(i = 0; i < options.length; i++) {
  if(options[i].equals(answer) {
    ansInt = i;
    break;
  }
}

另一种可能性是拥有键/值的映射:

Map<String, Integer> optionsMap = new HashMap<String, Integer>();
options = optionsMap.keySet().toArray();
... Call the dialog ...
ansInt = optionsMap.get(answer);

如果选项数量较少,则第一个选项很好。如果您有很多选择,第二个解决方案将会更好。为了获得更好的性能,您可以缓存optionsMapoptions数组。