2014-12-17 1 views
1

Если у меня есть следующие enum:Могу ли я добавить JRadioButton для каждого значения в перечислении?

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 «s значение:

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 s вместо Choice; есть ли способ сделать это аналогично тому, что у меня выше? Я хочу иметь возможность изменять уровни сложности и их информацию (они будут иметь больше атрибутов, чем просто имя при полной реализации), избегая повторения и имея enum в качестве центрального момента, чтобы внести какие-либо изменения в трудности.

Я хотел бы сделать что-то вроде этого (игнорируя пока что EXTRA_HARD «s 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); 
} 

Есть ли способ сделать эту работу, или есть какой-то другой что привело бы к такому же результату?

+0

Что не работает точно? (При этом 'name' с' String' и 'JRadioButton' запутывает.) –

+0

' name' во втором цикле for не было действительно нужно. Я просто хотел показать, как я хочу, чтобы он работал лучше. Что не работает, это не распознавание diff.name как допустимого идентификатора для JRadioButton, когда я хочу, чтобы он просто взял «имя» для каждой трудности из «переполнения» сложности. –

ответ

2

Прежде всего, не забудьте установить действие команды JRadioButtonCommand String с помощью diff.name. JRadioButtons не автоматически устанавливает свою команду actionCommand String с параметром конструктора String как JButton.

Ключевым вопросом является вопрос, когда вы будете запрашивать JRadioButton для их выбора. Если он включен, нажмите JRadioButton - ActionListener или ItemListener. Если он нажат на кнопку «отправить» JButton, затем выберите выбранную модель радиообъекта с помощью метода Button. Это возвращает ButtonModel выбранного JRadioButton, или возвращает null, если не выбраны JRadioButtons. Затем вы можете получить actionCommand модели с помощью getActionCommand(), чтобы узнать, какое перечисление выбрано.