如果我有以下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
的值添加到: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);
}
有什么方法可以完成这项工作,还是有其他方法可以带来相同的结果?
最佳答案
首先,请确保使用diff.name
设置JRadioButton的actionCommand字符串。 JRadioButton不会像JButton那样使用构造函数参数String自动设置其actionCommand String。
接下来,关键的问题是何时查询JRadioButton的选择。如果按下按钮,则为JRadioButton提供ActionListener或ItemListener。如果按下“提交” JButton,则通过ButtonGroup的getSelection()
方法获取所选单选按钮的模型。这将返回所选JRadioButton的ButtonModel,如果未选择JRadioButton,则返回null
。然后,您可以通过getActionCommand()
获取模型的actionCommand,以查看已选择了哪个枚举。
关于java - 我可以为枚举中的每个值添加JRadioButton吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27535705/