4

在我的 GUI 应用程序中,我有几个 JPanel,它们在程序运行期间的不同点被实例化,并且某些操作会导致其中一个显示在滚动窗格中:

mViewport.setViewportView(currentPanel);

问题是,我的面板是使用 Grid Bag Layouts 完成的,其行为是将其自身置于其内部的 JScrollPane 中。这使 GUI 看起来很奇怪。

任何人都知道强制网格包布局面板左上对齐的方法吗?

谢谢!


编辑

请注意,这里我询问的是整个面板在其滚动窗格中的对齐方式,而不是面板中的组件。

4

2 回答 2

8

您需要在GridBagConstraints面板内的一个或多个组件上设置权重(在 中)。这具有“推动”组件以占用更多可用空间的效果(没有重量,组件将只占用它们需要的东西,并且面板将在可用空间内居中)。

如果要对齐滚动窗格左上角的组件,请将底部组件的 y 权重设置为 1.0,并将最右侧组件的 x 权重设置为 1.0。

于 2010-01-20T11:16:05.520 回答
6

经过一番摆弄,我找到了自己问题的解决方案:

设置权重似乎能够影响使用 的组件的对齐JPanel方式GridBagLayoutJPanel但是,它对内部的对齐没有影响JScrollPane

我找到了一个相当简单的解决方案,即不要JPanel直接放在 内部JScrollPane,就像我在早期代码中所做的那样:

if (currentPanel != mCurrentPanel)
{
    mViewport.setViewportView(currentPanel);
}

...而是在 中放置一个“外部” JPanelJScrollPane并将其设置为使用FlowLayout. 然后当我想切换面板时,我移除旧面板并将面板放在“外部”面板中。

if (currentPanel != mCurrentPanel)
{
    if (mCurrentPanel != null)
    {
        mOuterPanel.remove(mCurrentPanel);
    }
    mCurrentPanel = currentPanel;
    mOuterPanel.add(mCurrentPanel);
}

这种方法效果很好,因为这意味着我只需要在一个类中进行更改,而不是我拥有的许多面板中的每一个。

于 2010-01-20T23:28:24.827 回答