我可以为枚举中的每个值添加一个JRadioButton吗?

时间:2014-12-17 22:04:07

标签: java enums jradiobutton

如果我有以下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}}

有没有办法让这项工作,还是有其他方法可以带来相同的结果?

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,以查看已选择的枚举。