스윙에서 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을 추가하면 첫 번째 패널이 조금씩 증가하고 두 번째 패널은 약간 감소합니다. 또한 아래 그림에서 볼 수
그 이유는 무엇입니까? 생각하기에 부모 프레임이나 패널의 사용 가능한 공간에 따라 가중치를 할당하는 레이아웃과 관련이 있습니다. 그러나 추론을 제대로 이해하지 마십시오.
weightx/y division은 사용 가능한 공간을 기반으로합니다. 그렇다면 패널 p1과 p2가 거의 같은 높이를 얻는 방법은 무엇입니까? 프레임 높이를 h로합시다. p1이 추가되면 사용 가능한 높이가 h이고, p1이 0.2 * h가되면 0.8h로 사용할 수 있습니다. 이제 p2가 추가되어야 할 때 0.2h의 0.2h가 0.16h가 주어집니다. 그렇다면 p1과 p2 (밝은 회색과 어두운 회색 배경색)가 어떻게 같은 높이로 보입니까?
또한 어떻게 상수 나누기를 수행하고 할당 된 것과 동일한 가중치의 패널을 유지할 수 있습니까?
weightx/y 부분은 사용 가능한 공간을 기준으로합니다. 그렇다면 패널 p1과 p2가 거의 같은 높이를 얻는 방법은 무엇입니까? 프레임 높이를 h로합시다. p1이 추가되면 사용 가능한 높이가 h이고, p1이 0.2 * h가되면 0.8h로 사용할 수 있습니다. 이제 p2가 추가되어야 할 때 0.2h의 0.2h가 0.16h가 주어집니다.그렇다면 p1과 p2 (밝은 회색과 어두운 회색 배경색)가 어떻게 같은 높이로 보입니까? – user3552407
@ user3552407, 'p1이 추가되면 사용 가능한 높이가 h이고, p1이 0.2 * h가되어 0.8h로 사용 가능합니다.'- 할당은 동시에 가중치가있는 모든 패널에서 수행됩니다. 업데이트 된 설명보기. – camickr