我正在试验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);
答案 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);
如果选项数量较少,则第一个选项很好。如果您有很多选择,第二个解决方案将会更好。为了获得更好的性能,您可以缓存optionsMap
和options
数组。