2013-10-08 6 views
0

나는 다음과 같이 세 가지 JCheckBox에 있습니다 JCheckBoxe를 ButtonGroup에 여러 개 선택하는 방법은 무엇입니까?

final JCheckBox c1 = new JCheckBox("A"); 
final JCheckBox c2 = new JCheckBox("B"); 
final JCheckBox c3 = new JCheckBox("C"); 

나는 다음과 같이이 체크 박스에 대한 ButtonGroup하여 그룹을합니다

final ButtonGroup bg = new ButtonGroup(); 
bg.add(c1); 
bg.add(c2); 
bg.add(c3); 

나는 다음과 같이 레이블에 선택한 항목을 표시하는 버튼이 있습니다

String SelectedItem=""; 
Enumeration<AbstractButton> items= bg.getElements(); 
while (items.hasMoreElements()) { 
    AbstractButton btn = items.nextElement(); 
if(btn.isSelected()) 
{ 
     SelectedItem+=btn.getText()+","; 
    } 
} 
lblA.setText(SelectedItem); 

이 작업은 정상적으로 수행되지만 런타임에 여러 개의 확인란을 선택할 수 없습니다.

+0

@kleopatra, 당신이 나를 도와 드릴까요? –

+3

* "런타임에 여러 개의 확인란을 선택할 수 없습니다."* ... 단추 그룹에 있습니다 ... 그 점 ... – MadProgrammer

답변

7

ButtonGroup의 목적은 다중 배타적 선택입니다. 단추 컬렉션이 필요한 경우에만 ButtonGroup을 만들지 마십시오. ButtonGroup 대신 ArrayList과 같은 표준 콜렉션을 사용하십시오.

List<JCheckBox> buttons = new ArrayList<>(); 
buttons.add(c1); 
buttons.add(c2); 
buttons.add(c3); 

... 

for (JCheckbox checkbox : buttons) { 
    if(checkbox.isSelected()) 
    { 
     SelectedItem += btn.getText() + ","; 
    } 
} 

또한 공지 사항 : 스윙 이벤트 스레드 (invokelater), remeber는이 같은 연결에서의 StringBuilder를 만드는 더 나은 것을 그러나이 같은 UI 구성 요소 수량과 함께 할 업데이트 (.setText)이 성능에 미치는 영향은 propably 두드러지지 할 것이다 . 문서에서

+0

ArrayList를 사용합니다. buttons = new ArrayList (); 내 문제가 해결되었습니다. –

4

:

클래스 ButtonGroup

이 클래스는 버튼 세트에 다중 배타 범위를 만드는 데 사용됩니다. 동일한 ButtonGroup 객체로 버튼 세트를 작성하는 경우 은 해당 버튼 중 하나를 "켜기"로 설정하면 그룹의 다른 모든 버튼을 끕니다. , 당신은 아마 당신이 그룹에 그 확인란을 원하는 경우에 당신이 무엇을해야 할 잘못된 클래스를 사용했다

는 가시성, 위치와 모든 다른 속성을 작동 할 수있는 것보다, 패널에 넣어 각 체크 박스 대신에 여기

이 문서에 대한 링크입니다 : Link

관련 문제