2011-10-06 8 views
0

일부 구성 요소 (확인란, 콤보 )를 추가 한 JPanel이 있습니다. 프레임이 최대화되면 구성 요소의 경계도 오른쪽으로 이동하거나 이동한다는 것을 알게되었습니다. 그런 다음 복원시 구성 요소가 원래 위치로 다시 이동합니다.스윙 구성 요소의 경계를 고정하는 방법

모니터가 21 인치 이상인 경우 구성 요소가 실제로 달라집니다. 구성 요소가 맨 오른쪽으로 이동하는 것을 볼 수 있습니다.

우리는 java.awt.LayoutManager2을 구현하는 사용자 정의 레이아웃 관리자를 사용하고 있습니다. 수업 내용은 조용한 거대 함이어서 구성 요소의 경계를 결정하는 영역을 가리 킵니다. 우리가 x를 결정하는 시점에서

JPanel pl = new JPanel(new OurLayout(this)) 
//add the component to panel 
pl.add(checkBox); 
.. 

, 내가 이동에서 구성 요소를 방지하기 위해 줄을 추가 할 :

protected int hMargin = 0; 
.. 
Insets insets = target.getInsets(); 
Dimension size = target.getSize(); 

int x = (size.width - insets.left - insets.right - 15 * hMargin); 

아래와 같이 레이아웃을 호출하고 구성 요소를 추가 할 프레임에서

호출 패널이 추가 된 프레임이 최대화 될 때.

아무에게도이를 달성 할 수있는 방법을 제안 할 수 있습니까? 예제 코드는 잘 이해 될 것이다.

+1

다른 레이아웃 관리자가 어떻게하는지보십시오. 힌트 : 그들은'getPreferredSize()','getMinimumSize()'및'getMaximumSize()'를 사용합니다. – Thomas

+0

왜 자신 만의 LayoutManager를 굴립니까? 유연하고 강력한 관리자를 구현하기가 어렵습니다. 큰 3 인 (MigLayout, FormLayout, DesignGridLayout) 타사 관리자가 요구 사항에 부합하는지 확인하는 것이 합리적입니다. – kleopatra

+0

아마도 듣고 싶은 것이 아니라 자신의 레이아웃 관리자를 왜 롤업해야하는지 'SpringLayout'이 할 수없는 것들이 있습니까? – Qwerky

답변

0

권장 사항에 대해 Thomascamickr 덕분에 다음 구문을 사용하여 해결책을 얻었습니다.

 size=c.getMinimumSize(); 
     int dist =(size.width - insets.left - insets.right); 
     int move = ((dist > 32) ? 35 : 38); 
     x = (dist + move * hMargin); 

권장 사항에 대해 모두에게 감사드립니다.

2

사용자 정의 레이아웃 관리자가있는 경우 레이아웃 관리자는 패널의 기본 크기를 고려해야합니다. 레이아웃 관리 코드에 문제가 있습니다.

또는 간단한 해결책으로 사용자 정의 패널을 FlowLayout을 사용하는 다른 패널에 추가하십시오. 그러면 맞춤 패널의 기본 크기가 존중됩니다.

관련 문제