如果我有以下enum
:
private enum Difficulty {
EASY("Easy"),
MEDIUM("Medium"),
HARD("Hard"),
EXTRA_HARD("Extra Hard");
public final String name;
private Difficulty(String name) {
this.name = name;
}
}
我有Choice
我希望将Difficulty
的每个值添加到:{/ p>
for (Difficulty diff : Difficulty.values()) {
choiceDiff.add(diff.name);
}
我添加ItemListener
:
choiceDiff.addItemListener((ItemEvent e) -> {
labDifficulty.setText("High Score for " + choiceDiff.getSelectedItem() + " Difficulty:");
labDifficultyScore.setText(Integer.toString(HIGH_SCORES[choiceDiff.getSelectedIndex()]));
}
现在,如果我想要一些JRadioButton
而不是Choice
;有没有办法以与我上面相似的方式做到这一点?我希望能够改变难度级别和他们的信息(他们在完全实现时会有更多属性而不仅仅是名称),同时避免重复并让enum
作为进行任何更改的中心点遇到困难。
我想做这样的事情(暂时忽略EXTRA_HARD
name
ButtonGroup btgrpDiff = new ButtonGroup();
for (Difficulty diff : Difficulty.values()) {
String name = diff.name;
JRadioButton name = new JRadioButton(diff.name);
name.addItemListener((ItemEvent e) -> {
labDifficulty.setText("High Score for " + diff.name + " Difficulty:");
labDifficultyScore.setText(Integer.toString(HIGH_SCORES[diff.ordinal()]));
}
btgrpDiff.add(name);
}
中有空格):
{{1}}
有没有办法让这项工作,还是有其他方法可以带来相同的结果?
答案 0 :(得分:2)
首先,请务必使用diff.name
设置JRadioButton的actionCommand String。 JRadioButtons不会使用构造函数参数String自动设置actionCommand String,就像JButton一样。
接下来,关键问题是你何时会查询JRadioButton的选择。如果按下按钮,则为JRadioButton提供ActionListener或ItemListener。如果按下"提交"然后,JButton通过ButtonGroup的getSelection()
方法获取所选的radiobutton模型。这将返回所选JRadioButton的ButtonModel,如果未选择JRadioButton,则返回null
。然后,您可以通过getActionCommand()
获取模型的actionCommand,以查看已选择的枚举。