如果我有以下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_HARDname中有空格):

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/

10-12 05:49