2014-12-17 7 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; 
    } 
} 

그리고 내가 Difficulty의 값으로 각각 추가 할 Choice 있습니다

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을 갖기를 원한다면; 위에있는 것과 비슷한 방식으로이 작업을 수행 할 수있는 방법이 있습니까? 반복을 피하고 어려움을 수정하기위한 중심점으로 enum을 사용하면서 난이도 수준과 해당 정보를 변경할 수 있기를 원합니다 (완전히 구현 된 경우 이름보다 많은 특성을 가짐). 이 일을 어떤 방법이 있나요, 또는 거기에 다른입니다

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); 
} 

:

나는 (지금 EXTRA_HARDname에 공백이 있음에 대한 무시) 같은 것을 할 싶습니다 같은 결과를 가져올 수있는 방법?

+0

정확히 작동하지 않는 것은 무엇입니까? ('name'을'String'과'JRadioButton'으로 혼동하는 것은 혼란 스럽습니다.) –

+0

두 번째 for 루프의'name'은 실제로 필요하지 않았습니다. 나는 단지 그것이 더 잘 작동하기를 원했던 방법을 보여주고 싶었다. 작동하지 않는 점은'JRadioButton'에 대한 유효한 식별자로 diff.name을 인식하지 못하기 때문에 각 난이도의 'name'을'difficulty'' enum'에서 가져 오면됩니다. –

답변

2

우선 JRadioButton의 actionCommand String을 diff.name으로 설정하십시오. JRadioButtons는 actionCommand String을 JButton처럼 생성자 매개 변수 String으로 자동 설정하지 않습니다.

다음으로 핵심 질문은 언제 선택을 위해 JRadioButton을 쿼리 할 것인가입니다. 버튼이 눌려져 있으면 JRadioButton에 ActionListener 또는 ItemListener를 지정합니다. "submit"JButton을 누른 경우, ButtonGroup의 getSelection() 메소드를 통해 선택된 라디오 버튼의 모델을 가져옵니다. 선택된 JRadioButton의 ButtonModel을 돌려 주는지, JRadioButtons가 선택되어 있지 않은 경우는 null를 돌려줍니다. 그런 다음 어떤 enum이 선택되었는지 보려면 getActionCommand()을 통해 모델의 actionCommand를 가져올 수 있습니다.