2

我正在尝试在我的程序中设置我的面板,但我没有得到我认为的 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 的框架内,我刚刚检查过它并没有随框架调整大小。这就是顶层窗格(我设置的)。我怎样才能让它全部调整大小?

4

1 回答 1

2

如果您将顶部面板包装在另一个带有 BorderLayout 的 JPanel 中(假设您将面板放在 CENTER 中),您应该获得所需的行为。BorderLayout 自动调整到框架大小并强制其中心面板占据整个可用区域。

于 2012-07-24T08:27:32.947 回答