我正在尝试在我的程序中设置我的面板,但我没有得到我认为的 GridBagLayout 的预期行为(当然它是正确的,GIGO)。我想调整页面上的一些组件的大小。
我设置它的方式分为两部分:
1. 管理器窗格内的内容窗格:
myPlayerContentPane =
new PlayerContentPane(myEventListener);
c.gridx = 0;
c.gridy = 0;
c.fill = GridBagConstraints.BOTH;
c.weightx = 1;
c.weighty =1;
this.add(myPlayerContentPane,c);
myPlayerContentPane.setBorder(BorderFactory.createLineBorder(Color.black));
当我调整框架大小时,这个子窗格应该会扩展,对吗?这是因为 weight 和 fill 命令。
2.内容窗格的内容:
setLayout(new GridBagLayout());
c.insets = new Insets(1, 1, 1, 1);
c.gridx = 0;
c.gridy = 0;
c.fill = GridBagConstraints.HORIZONTAL;
this.add(newCharacterButton,c);
newCharacterButton.addActionListener(new ActionListener(){
...
});
c.gridx = 1;
c.gridy = 0;
c.gridheight = 1;
c.fill = GridBagConstraints.HORIZONTAL;
this.add(newCharacterName,c);
c.gridx = 0;
c.gridy = 1;
c.fill = GridBagConstraints.HORIZONTAL;
this.add(loadCharacterButton,c);
loadCharacterButton.addActionListener(new ActionListener() {
...
});
c.gridx = 2;
c.gridy = 0;
c.fill = GridBagConstraints.HORIZONTAL;
this.add(editCharacterButton,c);
c.gridx = 2;
c.gridy = 1;
c.fill = GridBagConstraints.HORIZONTAL;
this.add(deleteCharacterButton,c);
deleteCharacterButton.addActionListener(new ActionListener(){
...
});
c.gridx = 2;
c.gridy = 2;
c.fill = GridBagConstraints.BOTH;
c.gridheight = 3;
c.ipady = 200;
c.weighty = 1;
this.add(characterListScroller,c);
c.gridx = 0;
c.gridy = 4;
c.fill = GridBagConstraints.BOTH;
c.gridwidth = 2;
c.ipady = 200;
c.weighty =1;
this.add(characterSummaryScroller,c);
现在,当程序加载时它看起来很好,我希望调整两个 JScrollPanes 的大小。但是,即使我在我的代码中删除了所有设置首选大小的实例(即使是框架本身),我也看不到任何调整大小的行为。
这是程序第一次加载时的设置,捕捉到最小尺寸:
这是我调整框架大小的时候,面板没有效仿。
现在我的管理器窗格位于带有 CardLayout 的框架内,我刚刚检查过它并没有随框架调整大小。这就是顶层窗格(我设置的)。我怎样才能让它全部调整大小?