我正在使用GridBagLayout来创建我的GUI,但是它在调整大小时存在问题。在任何人建议使用其他布局之前,我确定要使用GridBagLayout;因为我需要对大量组件进行布局,并确保它们被正确地排列。不过,当前的代码/图像只显示了我现在所拥有的。
以下是我目前用来生成这个的代码:
在此之际,我也想问另一个问题。 我想为GUI设置最小大小限制,以及对话面板的最小大小限制。 对于前者,我希望它不允许用户将其调整为小于某个特定的x和y。 对于后者,我希望它保持我所说的纵横比,并在我达到两个右侧面板的最小值后,仅调整左面板。 也就是说,它会调整每个面板直到某个大小,然后继续调整整个GUI,但只调整左侧面板,使右侧面板保持其最小大小。
无论如何,问题在于它不能正确地自适应大小。我希望它在调整大小时能够保持当前的纵横比,但实际上它并没有这样做。某些面板在调整大小时具有某种优先级,这使得当我调整大小时,它会破坏原本的纵横比。基本上,我有一些面板比另一个面板更大,但在调整大小后,它变得比另一个面板更小,就像这样:
现在,我真正想要的是让它们保持已经呈现的比例。如您所见,我希望 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却没有进展。 这是我最好的结果。
GridBagConstraints
对象而不是重复使用同一个实例吗? - gobernadorGridBagLayout
的教程会重复使用约束条件,因此除非之前设置有误,否则一切都应该没问题。 - David Kroukamp