2014-03-24 2 views
2

나는 JComboBox과 2 개의 JTextField 컨트롤을 가지고 JPanel 클래스를 만들었습니다.jFrame에 사용자 정의 jPanel을 여러 번 추가하는 방법은 무엇입니까?

JFrame f = new JFrame(); 
JPanel p = new JPanel(); 
ComparisonPanel cp = new ComparisonPanel(); //jPanel with a few elements 
ComparisonPanel cp2 = new ComparisonPanel(); 

p.setLayout(new FlowLayout()/*new GridLayout(2, 2)*/); 

f.getContentPane().add(cp); 
f.getContentPane().add(cp2/*cp*/); 
f.setVisible(true); 

이것은 한 번만 ComparisonPanel을 표시합니다. 나는 실제로 런타임에 GUI를 생성하려고하는데 패널이 몇 가지 수정 (다른 레이블 등)을 반복하고이 동적으로 생성 된 GUI에서 값을 가져온다.

답변

5

p의 레이아웃은 JPanel을 추가하려는 컨테이너의 레이아웃 (기본적으로 BorderLayout을 사용하는 컨테이너) 인 contentPane을 설정하지 않습니다. BorderLayout을 사용하는 컨테이너는 (기본 방식으로) 추가 된 모든 마지막 구성 요소 만 표시하므로 사용자를 망칠 수 있습니다.

제안 : ComparisonPanel 객체를 p JPanel에 추가 한 다음 단일 구성 요소를 contentPane에 추가하십시오. 즉

JFrame f = new JFrame(); 
JPanel p = new JPanel(); 
ComparisonPanel cp = new ComparisonPanel(); //jPanel with a few elements 
ComparisonPanel cp2 = new ComparisonPanel(); 

p.setLayout(new FlowLayout()/*new GridLayout(2, 2)*/); 

p.add(cp); 
p. add(cp2); 
f.getContentPane().add(p); 
f.pack(); 
f.setVisible(true); 

더 나은 것은 아직 layout manager tutorials입니다.

+0

감사합니다. 나는 java (C#으로 작업)에 익숙하지 않다. 내가 추가 한 모든 필드에서 값을 가져 오기 위해 마지막에 버튼을 추가 할 것입니다. 그렇게하는 가장 좋은 방법은 무엇입니까? – SMUsamaShah

+0

@ LifeH2O : 레이아웃 관리자 자습서를 읽고 최상의 GUI를 얻으려면 레이아웃 관리자와 함께 해보십시오. JPanel을 자체 레이아웃 관리자를 사용하여 각각 내포하는 것이 가장 좋습니다. 그런 다음 한 번에 한 단계 씩 문제 해결과 프로그램 작업을 시도하십시오. –

+0

나는 튜토리얼을 읽었으나 사용자 인터페이스는 내 문제가 아니다. 그가 추가 한 각각의 jPanel에서 선택한 값을 가져와야합니다. – SMUsamaShah

관련 문제