这就是我所知道的.我有两个JPanels,每个都有GridBagLayout.它们的权重x=0.5,并填充两个方向.因此,基本上该窗口是一个JPanel的一半,另一个的一半.而且它应该保持这种状态.但是,如果我将JButton放入其中之一,则JPanel会变宽,并占用第二个JPanel的一些空间.
我应该做些什么来防止这种行为?有没有其他布局可以像我描述的那样工作?
这是我一直在测试的代码.
说
JFrame f = new JFrame();
f.setLayout(new BorderLayout());
f.setTitle("Start Window");
f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);
f.setSize(400,300);
f.setResizable(true);
JPanel top = new JPanel();
JPanel right = new JPanel();
JPanel bottom = new JPanel();
JPanel left = new JPanel();
top.setPreferredSize(new Dimension(30,30));
right.setPreferredSize(new Dimension(30,30));
bottom.setPreferredSize(new Dimension(30,30));
left.setPreferredSize(new Dimension(30,30));
f.add(top,BorderLayout.NORTH);
f.add(right,BorderLayout.EAST);
f.add(bottom,BorderLayout.SOUTH);
f.add(left,BorderLayout.WEST);
JPanel centerContainer = new JPanel(new GridBagLayout());
GridBagConstraints centerLayout = new GridBagConstraints();
centerContainer.setBackground(Color.blue);
f.add(centerContainer);
JPanel centerLeft = new JPanel(new GridBagLayout());
GridBagConstraints centerLeftLayout = new GridBagConstraints();
centerLayout.gridx=0;
centerLayout.gridy=0;
centerLayout.weightx=0.5;
centerLayout.weighty=1;
centerLayout.fill = GridBagConstraints.BOTH;
centerLeft.setBackground(Color.red);
centerContainer.add(centerLeft,centerLayout);
JPanel centerRight = new JPanel();
centerLayout.gridx=1;
centerLayout.gridy=0;
centerLayout.weightx=0.5;
centerLayout.weighty=1;
centerLayout.fill = GridBagConstraints.BOTH;
centerRight.setBackground(Color.green);
centerContainer.add(centerRight,centerLayout);
JPanel leftElement = new JPanel(new GridBagLayout());
GridBagConstraints leftElementLayout = new GridBagConstraints();
centerLeftLayout.gridx=0;
centerLeftLayout.gridy=0;
centerLeftLayout.weightx=1;
centerLeftLayout.weighty=1;
centerLeftLayout.fill = GridBagConstraints.HORIZONTAL;
centerLeft.add(leftElement,centerLeftLayout);
JButton leftBtn = new JButton("CLIIIIICK!!!");
leftBtn.setLayout(new GridBagLayout());
leftElementLayout.gridx=0;
leftElementLayout.gridy=0;
leftElementLayout.weighty=0;
leftElementLayout.weightx=1;
leftElementLayout.fill=GridBagConstraints.HORIZONTAL;
leftElement.add(leftBtn,leftElementLayout);
f.setVisible(true);
说