2017-11-25 24 views
0

ButtonGroup을 사용하여 프레임에 여러 JButton을 넣으려고합니다.하나의 JFrame에 여러 ButtonGroups 넣기

프레임에 3 개의 버튼 그룹을 넣고 서로 분리해야합니다.

다음 코드는 버튼을 만들지 만 분리되는 대신 서로를 "삭제"하는 것 같습니다.

별도의 버튼 그룹 4 개가 표시 될 것으로 예상됩니다.

방법처럼 보이는,에 "질문"객체의 ArrayList를을 받아들

public class Question { 
private String _question; 
private String _option1; 
private String _option2; 
private String _option3; 
private String _option4; 
} 

여기 방법입니다. 은 다른 클래스의 프레임을 상속 한 클래스 내에 있으며 "DisplayOnPanel"은 동일한 프레임에 패널을 설정합니다.

public void addButtonstoFrame(ArrayList<Question> q){ 
    ArrayList<ButtonGroup> BG = new ArrayList<>(); 
    ArrayList<JPanel> JP = new ArrayList<>(); 

    JLabel question1 = new JLabel(); 
    int j=0; 
    for (int i = 0; i <q.size() ; i++) { 
     BG.add(new ButtonGroup()); 
     JP.add(new JPanel()); 
     JRadioButton option1 = new JRadioButton(q.get(i).get_option1()); 
     JRadioButton option2 = new JRadioButton(q.get(i).get_option2()); 
     JRadioButton option3 = new JRadioButton(q.get(i).get_option3()); 
     JRadioButton option4 = new JRadioButton(q.get(i).get_option4()); 
     BG.get(j).add(option1); 
     BG.get(j).add(option2); 
     BG.get(j).add(option3); 
     BG.get(j).add(option4); 
     JP.get(j).add(option1); 
     JP.get(j).add(option2); 
     JP.get(j).add(option3); 
     JP.get(j).add(option4); 


     this.setLayout(new BorderLayout()); //this referes to a frame 
     this.add(JP.get(j)); //this referes to a frame 
     JP.get(i).setLocation(j+10,j+10); 
     JP.get(j).setVisible(true); 
     this.setVisible(true);//this referes to a frame 
     j++; 
    } 

} 

을 그리고 그 결과는 (12) 대신에, 단지 4 butoons입니다 : "이"프레임을 의미

result

감사합니다!

+1

항상 전체 코드 샘플 (SSCCE)을 포함하십시오. – Amber

+0

실제로 코드가 많아서 마지막으로 전체 코드를 게시하지 말라고 들었습니다 .- ( – Alan

+1

지금 전체 코드를 게시하라는 메시지가 표시되지 않습니다. 더 빨리 도움을 받으려면 [MCVE] 또는 [ Short, Self Contained, Correct Example] (http://www.sscce.org/) @Amber 팁 :'[mcve]'는 [mcve]에 대한 코멘트에서 자동으로 확장됩니다. –

답변

0

우선 변수 이름은 대문자로 시작하면 안됩니다.

JRadioButton option1 = new JRadioButton(q.get(i).get_option1()); 
    JRadioButton option2 = new JRadioButton(q.get(i).get_option2()); 
    JRadioButton option3 = new JRadioButton(q.get(i).get_option3()); 
    JRadioButton option4 = new JRadioButton(q.get(i).get_option4()); 
    BG.get(j).add(option1); 
    BG.get(j).add(option2); 
    BG.get(j).add(option3); 
    BG.get(j).add(option4); 
    JP.get(j).add(option1); 
    JP.get(j).add(option2); 
    JP.get(j).add(option3); 
    JP.get(j).add(option4); 

구성 요소는 하나의 상위 컨테이너에만 속할 수 있습니다.

"JP"포함에 단추를 추가하면 "BG"컨테이너에서 제거됩니다.

그래서 각 라디오 버튼을 4 개 더 인스턴스를 만들어야합니다.

+0

라디오 버튼을 한 번 만들 수있는 방법이 있습니까? 아마도 너무 많은 JP를 만들 수 있습니까? – Alan

+0

나는 ' 귀하의 질문을 이해합니다. 구성 요소를 공유 할 수 없습니다. 다른 패널을 사용하면 동일한 구성 요소를 동일한 패널에 두 번 추가 할 수 없습니다. 구성 요소의 인스턴스를 여러 개 만들어야합니다. 집에 "사과"가 있다면. 사과를 냉장고에 넣고 식탁에 바구니를 넣을 수는 없습니다. 사과 두 개가 필요합니다. – camickr

+0

내 질문에 어떻게 그것을 할 수있는 각 4 개의 버튼이 같은 그룹에 코드의 8 라인을 작성하지 않고도 될 수 있습니다. 고맙습니다! – Alan