2016-06-06 11 views
1

JRadioButtons 그룹과 JCheckBox가 있습니다. JCheckBox가 선택 해제 된 경우 JRadioButtons가 비활성화되고 재설정되어야하며 반대의 경우도 마찬가지입니다. 내가 가지고있는 문제는 내가 JCheckBox를 체크하든 안하든, JRadioButtons를 사용할 수 없다는 것이다.JCheckBox는 JRadioButton을 활성화/비활성화합니다.

또한 코드로 진행하기 전에 null 레이아웃과 다른 클래스가 없어도 상관 없습니다. 나는 여기에 붙여 넣어야 할 코드의 양을 줄이기 위해 신속하게 테스트 프로젝트를 만들었다. @zubergu는 지적

package test; 

import javax.swing.ButtonGroup; 
import javax.swing.JCheckBox; 
import javax.swing.JFrame; 
import javax.swing.JRadioButton; 
import javax.swing.JPanel; 

public class Test { 

    public static void main(String[] args) { 
     JFrame frame = new JFrame(); 
     frame.setBounds(100, 100, 450, 300); 
     frame.setVisible(true); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().setLayout(null); 
     JPanel panel = new JPanel(); 
     panel.setBounds(0, 0, 434, 261); 
     frame.getContentPane().add(panel); 

     JCheckBox ckbxTestCheckBox = new JCheckBox("Test Check Box"); 
     ckbxTestCheckBox.setBounds(7, 7, 99, 23); 
     panel.add(ckbxTestCheckBox); 
     JRadioButton rdbtnTestRadioButton1 = new JRadioButton("Test Radio Button 1"); 
     rdbtnTestRadioButton1.setBounds(7, 34, 121, 23); 
     panel.add(rdbtnTestRadioButton1); 
     JRadioButton rdbtnTestRadioButton2 = new JRadioButton("Test Radio Button 2"); 
     rdbtnTestRadioButton2.setBounds(7, 61, 121, 23); 
     panel.add(rdbtnTestRadioButton2); 
     JRadioButton rdbtnTestRadioButton3 = new JRadioButton("Test Radio Button 3"); 
     rdbtnTestRadioButton3.setBounds(7, 88, 121, 23); 
     panel.add(rdbtnTestRadioButton3); 

     JRadioButton rdbtnTest[] = {rdbtnTestRadioButton1, rdbtnTestRadioButton2, rdbtnTestRadioButton3}; 

     ButtonGroup btnGrpTest = new ButtonGroup(); 
     for(int i = 0; i < rdbtnTest.length; i++){ 
      btnGrpTest.add(rdbtnTest[i]); 
     } 

     if(!ckbxTestCheckBox.isSelected()){ 
      for(int i = 0; i < rdbtnTest.length; i++){ 
       rdbtnTest[i].setEnabled(false); 
       rdbtnTest[i].setSelected(false); 
      } 
     } else {   //Is this part even necessary? 
      for(int i = 0; i < rdbtnTest.length; i++){ 
       rdbtnTest[i].setEnabled(true); 
      } 
     } 
    } 
} 
+2

라디오 버튼을 적절하게 활성화/비활성화하는 확인란 동작 수신기를 어디에 추가합니까? 아무데도 없다면 - 그게 당신 문제예요. – zubergu

+2

ActionListener 사용에 대한 작업 예제는 [Checkbox 사용 방법] (http://docs.oracle.com/javase/tutorial/uiswing/components/button.html)의 스윙 튜토리얼을 참조하십시오. 또한 main() 메소드에서 모든 코드를 정의하지 않아야합니다. 튜토리얼에있는 'CheckBoxDemo' 코드는 코드를 더 잘 구조화하는 방법을 보여줍니다. – camickr

+0

@zubergu 감사합니다! 나는 실제로 ItemListener/ActionListener가 없다. – Maikyl

답변

1

은, 당신의 논리는 체크 박스에 대한 ItemListener 안에 작성해야합니다, 또는 이해되지 않는다. JCheckBox를 들어, ActionListener 대신의 ItemListener는,도 작동한다고

ckbxTestCheckBox.addItemListener(new ItemListener() { 
      public void itemStateChanged(ItemEvent e) { 
       for(int i = 0; i < rdbtnTest.length; i++){ 

        rdbtnTest[i].setEnabled(!ckbxTestCheckBox.isSelected()); 

        if(!ckbxTestCheckBox.isSelected()) 
         rdbtnTest[i].setSelected(false); 
       } 

      } 
     }); 

참고 :

또한, 당신의 논리는 매우 ifelse 블록없이 간단하게 할 수 있습니다.

+1

고마워요. 해답이 너무 명백 할 때 약간의 코드로 머리를 아프게 만드는 것은 재미 있습니다 ... 저는 실제로 ItemListener가 없습니다. – Maikyl

+1

* "대답이 그렇게 분명한 경우 ..."* 우리는 모두 그것을 경험했습니다. 두 번째 (세 번째 등 ..) 한 쌍의 눈은 그러한 상황에 실제로 유용 할 수 있습니다. –