2014-11-09 2 views
0

GridBagLayout을 사용하려고하는데, 문제가 있습니다. 12 행을 사용하여 레이아웃을 만들고 싶습니다. 그래서 처음 두 개의 JPanels를 처음 두 줄을 채운다 (gridheight = 1). 그런 다음 5 개의 다른 JPanel을 만들어 다른 10 개의 행을 채 웁니다 (gridheight = 2). 하단 5 JPanels는 gridheight = {2,4,6,8,10}을 가지므로 중복되지 않습니다. 지금 내가 얻을 수있는 문제는 다음과 같습니다.
모든 JPanels의 크기가 같습니다!gridheight가 작동하지 않는 것 같습니다.

나는 또한 두 가지 방법으로 채우고 앵커는 사용하지 않습니다. gridx = 1, gridy = 0, gridheight = 2 인 JPanel을 추가하면 높이가 두 배가되므로 여기서 어떤 거래가 발생합니까? 레이아웃 시스템에 미리 사용하려고하는 총 행을 말해야합니까? 그렇다면 어떻게해야합니까?

+0

도움이되지 않으면 [최소, 완전하고 검증 가능한 예제 프로그램] (http://stackoverflow.com/help/mcve)을 작성하여 게시하여 코드를 가장 작은 비트로 압축하십시오. 여전히 컴파일 및 실행되고 외부 종속성 (예 : 데이터베이스 또는 이미지에 연결해야 함)이 없으며 문제와 관련이없는 추가 코드가 없지만 여전히 문제를 보여줍니다. –

답변

0

입니다 내가 말할 : 그래서

c.ipady = h/(columns + 1); 

이 기본적으로 해결 내 문제,하지만 난 여전히 많은 전자 수 있었다 생각한다

c.fill = GridBagConstraints.HORIZONTAL; 
c.gridwidth = 1; 
c.gridheight = 1; 
c.ipadx = 100; 
c.ipady = h/(2 * columns + 2); 
c.weightx = 1.0; 
c.weighty = 1.0; 

그리고 다음 행에 대해 나는 단지 c.ipady 변경

아시아.

P. 변수 h는 내 화면의 높이입니다.

+1

이것은 절대적인 레이아웃처럼 GridBagLayout을 사용하려고하기 때문에 실제로는 적절하지 않습니다. – Radiodef

2

처음 사용자가 놓친 GridBagLayout (GBL)에는 몇 가지 측면이 있습니다.

1) GBL 내부에 배치 된 구성 요소는 "선호"크기로 초기화됩니다. JPanel, iirc는 1x1 크기를 선호합니다.

2) GBL 셀을 둘러싸는 콘테이너에 따라 크기를 조정하려면 가중치와 중요도를 부여해야합니다. 이 두 속성의 의미는 말하자면 할당 된 모든 가중치와 가중치의 비율에 따라 셀에 사용 가능한 영역의 비율을 지정하는 것입니다. 예 : 내가 2 셀을 가지고 1에 weightx = 1.0이 있고 두 번째 셀에 2.0이 주어지면 첫 번째 셀은 두 번째 셀의 1/2이 될 것입니다 (또는 두 번째 셀은 두 배가됩니다).

3) GBL은 시행 착오에 먼저 다이빙을 많이 걸리지 만 가장 강력하고 유연하고 안정적인 레이아웃 (특히 중첩 된 레이아웃에 비해 BLECH) 처음 두 행에 대한 그래서

+0

+1,하지만 마지막 지점, 3 번 지점)은 논쟁의 여지가 있습니다. 일부는 MigLayout과 같은 타사 레이아웃으로 맹세합니다. –

+2

흠, 두 가지 생각 ... 복합 레이아웃은 관리하기 쉽고, 업데이트하고 유지하기가 쉬운 매우 복잡한 레이아웃을 훨씬 쉽게 생성 할 수 있습니다. (IMHO) - 유일한 도구가 망치 일 때 모든 문제는 손톱처럼 보입니다. . 단일 레이아웃으로 제한하는 것은 제한적입니다. 나는 MigLayout이 더 유연하고 기능이 풍부하다고 말하고 싶지만 외부 의존성을 추가합니다 ... 모두가 필요로됩니다. – MadProgrammer

+0

아무도 이것이 유일한 해결책이라고 말하지 않았습니다. 제 3 자 솔루션에 대한 제 느낌은, 비록 JDK가 이미 필요한 것을 공급한다면, 왜 다른 것을 활용할 수 있을까요? 나는 jdk가 제공하지 않는 구멍을 채우기 위해 레버리지를 사용하려고합니다. – him

관련 문제