2010-01-21 2 views
5

GridBagLayout에 의해 관리되는 레이아웃의 개별 구성 요소를 보이지 않게 만들면 레이아웃의 나머지 구성 요소의 배열이 계속 변경됩니다. GridBagLayout은 보이지 않는 구성 요소로 셀을 "축소"하여 다른 구성 요소가 위치를 변경하도록합니다. 이것은 매우 성가신 행동이며, 나는 그것을 지키지 못하게하는 방법을 찾고있었습니다.GridBagLayout : 보이지 않는 구성 요소가 접히지 않게하는 방법

내가 시도한 한 가지 방법은 동일한 셀에 고정 된 크기를 숨겨져있는 구성 요소의 기본 크기와 같게 추가하는 것입니다. 그러나 원하는 크기가 변경되는 경우에는 스페이서를 동기화 상태로 유지하는 데 많은 어려움이 있습니다. 더 좋은 방법이 있습니까?

사실, GridBagLayout이 보이지 않는 구성 요소가있는 셀을 완전히 무시하지만 여전히 셀의 인세 트를 고려하므로 입력 필드의 레이아웃이 있고 깔끔하게 인세 트를 사용한 경우 중간에 하나의 구성 요소를 숨기면 레이아웃에서 제거되지만 일반적으로 주변 구성 요소가 함께 흐르는 것을 의미하지만 간격은 두 개의 와이드 틈이 있습니다.

+1

아, 그리운 제약이있는 Gridbaglayout, 너를 그리워하지 말아라. (하지만 어쨌든이 스레드를 따라갈거야.) – Anders

+0

나는 GridBagLayout을 몇 년 동안 알고있다. 그리고 때때로 나는 원인을 찾기 위해 많은 시간을 할애 할 수있다. 붕괴 행위. 많은 텍스트가 포함 된 레이블과 같이 큰 구성 요소를 추가하십시오. 그런 다음 GridBagLayout 컨테이너의 너비를 레이블의 기본 크기보다 작게 조정하십시오. 이것은 매우 이상합니다. – Timmos

답변

1

구성 요소를 보이지 않게 설정하는 대신 구성 요소를 숨기려면 중첩 된 패널을 CardLayout과 함께 사용하는 것이 좋습니다. CardLayout을 사용하면 패널의 크기가 항상 가장 큰 "카드"크기가됩니다.

또는 GridBagLayout 대신 새로운 (Java 6 현재) GroupLayout을 사용해 볼 수도 있습니다. IMO를 사용하는 것이 훨씬 쉽고 강력합니다.

+0

GroupLayout을 시도 할 기회가 없었습니다. 흥미 롭지 만 불행한 점은 프로젝트에서 Java 1.5 호환성이 강화되었습니다. 내 말은, 사용자가 자신의 환경을 4 년이 넘은 기술 상태로 업데이트해야한다고 어떻게 기대할 수 있습니까?) –

1

사용 MigLayout

가하고 설계에 기쁨을 다시 가져 ^^.

나는 또한 과거에 GridBagLayout을 사용했으며, 너무 끔찍합니다. 보일러 플레이트 코드가 많고 하나의 작은 구성 요소를 추가하면 레이아웃이 엉망입니다.

또 다른 대안은 자리로 JPanel의 (또는 상자)를 사용하는 방법에 대한

+0

불행히도 타사 코드는 여러 가지 이유로 옵션이 아니며 BoxLayout은 UI 요소의 (다소 복잡한) 필수 배열을 만들 수있을 것 같지 않습니다 ... –

8

무엇 Boxlayout를 사용?
각 셀에 JPanel을 넣고 패널에 구성 요소를 추가하십시오. 구성 요소를 보이지 않게하면 패널이 여전히 있어야합니다.

+4

왜 이것이 어떤 상향 조율을 가지고 있는지 확실하지 않습니다. 정확히 내가 필요로하는 것이 었습니다. 단 한가지 : containerPanel을 원할 것입니다.setLayout (new GridLayout (1,1)); '또는 이와 비슷한 경우, 그렇지 않으면 기본 BorderLayout이 약간의 간격을두고 모든 구성 요소를 몇 픽셀 씩 나눕니다. –

+0

테스트 결과 무서운 붕괴 행위에 대한 대처 방법입니다. – Timmos

0

IIRC, 내가 과거에 한 일은 원래 크기를 모방 한 컨테이너에 구성 요소를 배치하거나 별도의 구성 요소를 사용하는 것입니다. 구성 요소가 아닌 숨겨진 상태인지 여부를 결정합니다. 메서드 또는 격자 가방의 정면에서 이것을 수행하고 레이아웃 코드를 멋지게 유지할 수 있습니다.

+0

그 방법은 제가 사용하고있는 방법입니다 ("Box"가 제공하는 메서드를 통해 스트럿츠를 생성하는 방법). 그러나 어색하고 오류가 발생하기 쉽습니다. –