【发布时间】:2018-02-16 14:02:29
【问题描述】:
我对 Swing 中的 GridBaGLayout 有一个非常基本的疑问。我试图首先将给定的帧分成三个部分,权重为(0.2、0.2 和 0.6)。下面的代码工作正常,因为我看到三个部分具有各自的权重。
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 划分基于可用空间。那么面板 p1 和 p2 如何获得几乎相同的高度?设框架的高度为 h。添加 p1 后,可用高度为 h,然后 p1 得到 0.2*h,剩下的可用高度为 0.8h。现在当必须添加 p2 时,将给它 0.8h 的 0.2,即 0.16h。那么 p1 和 p2(浅灰色和深灰色背景色)如何看起来具有相同的高度?
另外,我怎样才能实现恒定的划分并保持分配的面板的权重相同?
【问题讨论】:
标签: java swing layout layout-manager gridbaglayout