因此,我在我的 GUI 中使用了 GridBagLayout,但我遇到了一些无法正确调整大小的问题。在有人提出替代布局之前,我很肯定我想使用 GridBagLayout;我将有大量的组件,我想正确地布置它们,当前的代码/图像只显示我现在所拥有的。
无论如何,问题是它没有正确调整自己的大小。我希望它在调整大小时保持当前的纵横比,但是它没有。某些面板在调整大小时具有某种优先级,因此当我调整大小时,它会破坏纵横比。本质上,我有一些面板比另一个大,但是在调整大小后,它变得比另一个小,如下所示:
现在,我真正想要的是让他们保持已经提出的比例。如您所见,我希望 GUI 的聊天部分比左侧面板中的任何一个都小,就像原来的那样。
下面是我现在用来产生这个的代码:
jpPack = new JPanel();
jpCards = new JPanel();
jpInfo = new JPanel();
jpChat = new JPanel();
jpPack.setBackground(Color.red);
jpCards.setBackground(Color.blue);
jpInfo.setBackground(Color.green);
//create the Constraints and set some that will apply to each panel
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.BOTH;
//set the number of columns/rows to use
c.gridwidth = 1;
c.gridheight = 1;
//set the x and y position
c.gridx = 0;
c.gridy = 0;
//set the weight properties
c.weightx = 1.0;
c.weighty = 1.0;
getContentPane().add(jpCards, c);
//set the number of columns/rows to use
c.gridwidth = 1;
c.gridheight = 1;
//set the x and y position
c.gridx = 0;
c.gridy = 1;
//set the weight properties
c.weightx = 1.0;
c.weighty = 1.0;
getContentPane().add(jpPack, c);
//set the number of columns/rows to use
c.gridwidth = 1;
c.gridheight = 1;
//set the x and y position
c.gridx = 1;
c.gridy = 0;
//set the weight properties
c.weightx = 0.2;
c.weighty = 0.2;
getContentPane().add(jpInfo, c);
//set the number of columns/rows to use
c.gridwidth = 1;
c.gridheight = 1;
//set the x and y position
c.gridx = 1;
c.gridy = 1;
//set the weight properties
c.weightx = 0.2;
c.weighty = 0.2;
getContentPane().add(jpChat, c);
jpChat.setLayout(new GridLayout());
jpChat.add(client.gui.getContentPane(), c);
setVisible(true);
当我在做的时候,我不妨问一下我的另一个问题。我想为整个 GUI 和聊天面板设置最小尺寸限制。首先,我希望它禁止用户将其调整为小于某个 x 和某个 y。对于后者,我希望它保持我说的我想要的纵横比,然后在我达到两个右面板的最小值后只调整左面板的大小。也就是说,它将调整每个面板的大小直到某个大小,然后继续调整整个 GUI 的大小,但只调整左侧面板的大小,而将右侧面板保留为最小大小。
谢谢你帮助我。这真的让我很烦,我花了几个小时试图做到这一点,弄乱了 GridBagLayoutConstraints 而没有得到任何结果。这是我能做到的最好的。