好的,这就是问题所在:每次点击OK都会返回选中的索引号,对吧?无论我选择什么,下面的代码只返回第一个索引。我设置“cMenu.selected(1)”并再次返回索引1,无论我选择什么。
使用JPanel,JButton,Choice
String[] menu = {"item 1" , "item 2", "item3"};
cMenu = new Choice();
cMenu.setBounds(0, 0, 75, 25);
for (int i = 0; i < menu.length; i++)
cMenu.add(menu[i]);
}
panel.add(cMenu);
final int menuSelection = cMenu.getSelectedIndex();
//Below is, of course, debugging
//Before asking, the button works it does say 0 or Hello World or whatever I want
//when clicked
OK.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println(menuSelection);
}
});
答案 0 :(得分:1)
“确定它应该返回所选的索引号”。不,它不应该。你正在调用getSelectedIndex()一次。所以你的int永远具有相同的价值。您必须在侦听器中调用getSelectedIndex()以获取新值。
答案 1 :(得分:1)
单击“确定”按钮时,您需要重新计算menuSelection
的值;您在实例化Choice
期间设置了一次,如下所示:
final int menuSelection = cMenu.getSelectedIndex();
如果你这样做,你应该能够看到你的价值:
OK.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int currentSelection = cMenu.getSelectedIndex();
System.out.println(currentSelection);
}
});
这意味着cMenu
应该是最终的,这可能没问题,因为您不需要更新该引用。