2017-09-07 20 views
1

스윙에서 GridBaGLayout에 관한 광의는 매우 기본적인 의심입니다. 주어진 프레임을 (0.2, 0.2 및 0.6)와 같이 세 부분으로 나누기 위해 노력하고 있습니다. 아래의 코드는 각각의 가중치로 세 부분을 볼 때 올바르게 작동합니다.GridBagLayout : Swing

 JFrame frame = new JFrame(); 
     frame.setLayout(new GridBagLayout()); 
     JPanel p1= new JPanel(), p2 = new JPanel(), p3 = new JPanel(); 


    GridBagConstraints c = new GridBagConstraints(); 
    c.fill = GridBagConstraints.BOTH; 

    c.weightx = 1; 
    c.weighty = 0.2; 
    c.gridx = 0; 
    c.gridy = 0; 
    frame.add(p1,c); 
    p1.setBackground(Color.lightGray); 

    c.gridy = 1; 
    frame.add(p2,c); 
    p2.setBackground(Color.gray); 

    c.weighty = 0.6; 
    c.gridy = 2; 
    frame.add(p3,c); 
    p3.setBackground(Color.blue); 

다음으로 패널 p1에 JLabel을 추가하려고합니다. 이처럼 : p1.add(new JLabel("Hi")). 추가하기 전과 후에 열린 프레임을 관찰하면 두 경우에 할당 된 가중치의 차이를 알 수 있습니다. 첫 번째 (JLabel이 추가되지 않은 경우)에는 0.2,0.2와 0.6이 할당됩니다. 둘째, JLabel을 추가하면 첫 번째 패널이 조금씩 증가하고 두 번째 패널은 약간 감소합니다. 또한 아래 그림에서 볼 수

enter image description here

그 이유는 무엇입니까? 생각하기에 부모 프레임이나 패널의 사용 가능한 공간에 따라 가중치를 할당하는 레이아웃과 관련이 있습니다. 그러나 추론을 제대로 이해하지 마십시오.
weightx/y division은 사용 가능한 공간을 기반으로합니다. 그렇다면 패널 p1과 p2가 거의 같은 높이를 얻는 방법은 무엇입니까? 프레임 높이를 h로합시다. p1이 추가되면 사용 가능한 높이가 h이고, p1이 0.2 * h가되면 0.8h로 사용할 수 있습니다. 이제 p2가 추가되어야 할 때 0.2h의 0.2h가 0.16h가 주어집니다. 그렇다면 p1과 p2 (밝은 회색과 어두운 회색 배경색)가 어떻게 같은 높이로 보입니까?

또한 어떻게 상수 나누기를 수행하고 할당 된 것과 동일한 가중치의 패널을 유지할 수 있습니까?

답변

2

먼저 주어진 프레임을 (0.2, 0.2 및 0.6)와 같이 세 부분으로 나눕니다.

"weightx/y"제약 조건은 "추가"공간을위한 것입니다.

각 구성 요소는 원하는 크기의 공간을 제공합니다. 그런 다음 프레임 크기가 증가하면 각 구성 요소에 지정된 비율로 추가 공간이 제공됩니다. 따라서 각 구성 요소의 기본 크기가 지정된 비율이 아니면 구성 요소가 전체 원하는 비율을 가지지 않습니다.

빈 JPanel의 높이는 10입니다 (FlowLayout의 기본 크기 계산 기준).

p1 = 10 + (100 * .2) = 30 
p2 = 10 + (100 * .2) = 30 
p3 = 10 + (100 * .6) = 70 

을 추가 할 때 : 그래서 3 개 패널의 적절한 높이는 다음 크기 (130)의 컨텐츠 구획이있는 경우 패널의 크기가 될 수 있도록 30

당신이 여분의 공간이 100 개 픽셀을 가지고있다 레이블을 p1로 설정하면 기본 높이에 10을 더한 레이블 높이가됩니다. 즉, (10 + 15) = 25가됩니다. 그러면 이제 3 개의 패널의 기본 높이가 (25 + 10 + 10) = 45가됩니다. 지정한 비율로 85 픽셀 만 나눕니다.

어떻게 상수 나누기를 수행하고 할당 된 것과 동일한 가중치의 패널을 유지할 수 있습니까?

Relative Layout을 확인할 수 있습니다. 각 구성 요소의 상대 크기를 지정할 수 있도록 설계되었습니다.

+0

weightx/y 부분은 사용 가능한 공간을 기준으로합니다. 그렇다면 패널 p1과 p2가 거의 같은 높이를 얻는 방법은 무엇입니까? 프레임 높이를 h로합시다. p1이 추가되면 사용 가능한 높이가 h이고, p1이 0.2 * h가되면 0.8h로 사용할 수 있습니다. 이제 p2가 추가되어야 할 때 0.2h의 0.2h가 0.16h가 주어집니다.그렇다면 p1과 p2 (밝은 회색과 어두운 회색 배경색)가 어떻게 같은 높이로 보입니까? – user3552407

+0

@ user3552407, 'p1이 추가되면 사용 가능한 높이가 h이고, p1이 0.2 * h가되어 0.8h로 사용 가능합니다.'- 할당은 동시에 가중치가있는 모든 패널에서 수행됩니다. 업데이트 된 설명보기. – camickr