2012-01-31 2 views
1

나는 JForm (하위) 내에서 여러 개의 체크 박스를 가지고 있고 하나의 체크하는 확인하려면이 코드를 사용하고 있습니다 :JFrame에서 어떤 체크 박스가 선택되었는지 확인하는 방법은 무엇입니까?

countItems = 0; 
    for(Component jb: this.getComponents()) 
    { 
     if((jb instanceof JCheckBox)) //I never get pass this point(its always false) 
     { 
      JCheckBox chbox = (JCheckBox)jb; 
      if(chbox.isSelected()) 
      countItems++; 
     } 
    } 

사람은 문제가 무엇인지 알고 있나요?

당신에게

편집 감사합니다

<Form version="" maxVersion"" type=""> 
    <AuxValues> 
    </AuxValues> 
    <Layout> 
    </Layout> 
    <SubComponents> 
    <Component class="javax.swing.JCheckBox" name="jCheckBox1"> 
     <Properties> 
     <Property name="text" type="java.lang.String" value="Cheese"/> 
     </Properties> 
    </Component> 
    <Component class="javax.swing.JCheckBox" name="jCheckBox2"> 
     <Properties> 
     <Property name="text" type="java.lang.String" value="Sausage"/> 
     </Properties> 
    </Component> 
    <Component class="javax.swing.JCheckBox" name="jCheckBox3"> 
     <Properties> 
     <Property name="text" type="java.lang.String" value="Pepperoni"/> 
     </Properties> 
    </Component> 
    <Component class="javax.swing.JCheckBox" name="jCheckBox4"> 
     <Properties> 
     <Property name="text" type="java.lang.String" value="Mushroom"/> 
     </Properties> 
    </Component> 
    </SubComponents> 
</Form> 
+1

더 나은 도움을 받으려면 [SSCCE] (http://sscce.org/)를 게시하십시오. –

답변

3

체크 박스가 JPanel과 같은 다른 컨테이너 안에있는 경우 컨테이너 구성 요소에서 getcomponents를 호출해야합니다. 그렇지 않으면 jframe 내에 다른 컨테이너 구성 요소가있을 때 재귀 적으로 호출하는 메서드를 만들 수 있습니다. 모든 계층 구조 ...

+0

수정 후 내 게시물을 확인하십시오 XML을 추가했습니다. 고맙습니다! – gumenimeda

+0

Jpanel을 추가하고 Jpannel 내부에서 확인했습니다. 감사! – gumenimeda

4

"이"무엇 : 여기에 XML은 무엇입니까? JFrame? 그렇다면 JFrame에서 직접 검색 할 때 얻을 수있는 구성 요소는 contentPane 뿐이며 JCheckBox는 찾고있는 위치보다 구성 요소 계층에서 더 깊다는 것을 알고 있습니다.

JCheckBoxes를 자신이 편하게 만들고 ArrayList와 같은 컬렉션에 넣는 것이 어떻세요. 숫자가 적다면 변수 이름을 사용하십시오. 양식의 작성을 표시하지 않기 때문에

+1

또는 ButtonGroup +1 – mKorbel

+0

@mKorbel : 일반적으로 JCheckBox 선택이 상호 배타적이어서는 안되기 때문에 보통은 JCheckBoxes가 아닌 JRadioButtons에 ButtonGroup 사용을 예약합니다. –

+0

agree 배열이 최상이어야합니다 ... – mKorbel

3

(BTW, JForm 무엇인지는?) 내 추측은 체크 박스 자체가 this의 자식 this하지만 일부 패널 또는 다른 컨테이너의 아이가 아니라는 것이다. 재귀 적으로 수행해야하는 모든 구성 요소 (예 : if (jb instancof Container) <iterate over children>)에 대해 반복 접근 방식을 따르고 싶다면.

그러나이 방법은 그렇게 좋지 않습니다. 체크 박스를 기억해야만 상태를 쉽게 쿼리 할 수 ​​있거나 모델을 사용해야합니다. JCheckBox의 경우 ButtonModel이되어 관련 데이터가 들어있는 피팅 데이터 구조의 상태가 변경 될 수 있습니다.

+0

수정 후 내 게시물을 확인하십시오 XML을 추가했습니다. 고맙습니다! – gumenimeda

+0

이 XML은 어디에서 유래 되었습니까? 일부 GUI 빌더? 어떤 컨텍스트 (메서드, 클래스)에서 코드의 스 니펫을 실행합니까? –

관련 문제