【问题标题】:How to make Java Swing components fill available space?如何让 Java Swing 组件填满可用空间?
【发布时间】:2011-08-02 00:42:47
【问题描述】:

我似乎无法让我的 Java Swing 组件一起正常工作。

我想要做的是让 JPanel 填充 JTabbedPane 内的所有可用空间。目前,我的设置如下:

public class Gui extends JFrame {
    private final EventBus eventBus = EventBus.getInstance();
    private final ToolkitUtil toolkitUtil;
    private final Menu menu;
    private final InfoBar infoBar;
    private final JTabbedPane pane;

    ...

    private void buildLayout() {
        GridBagConstraints gbc = new GridBagConstraints();

        setJMenuBar(menu);

        add(pane, BorderLayout.CENTER);
        add(infoBar, BorderLayout.SOUTH);

        pane.addTab("Plugins", new PluginPanel());
    }
}

public class PluginPanel extends JPanel {
    private final JPanel modelPanel;
    private final JPanel editorPanel;

    public PluginPanel() {
        setLayout(new GridBagLayout());

        modelPanel = new JPanel(new GridBagLayout());
        editorPanel = new JPanel(new GridBagLayout());

        buildLayout();
    }

    private void buildLayout() {
        GridBagConstraints gbc = new GridBagConstraints();

        modelPanel.setBorder(BorderFactory.createTitledBorder("Models"));
        editorPanel.setBorder(BorderFactory.createTitledBorder("Editors"));

        gbc.gridx = 0;
        gbc.fill = GridBagConstraints.BOTH;

        modelPanel.add(new JLabel("test label"), gbc);
        add(modelPanel, gbc);

        gbc.gridx = 1;
        add(editorPanel, gbc);
    }
}

这会创建一个我想要的大小的窗口(与屏幕大小动态成比例,不包含在上面的代码中)。放置在中心的选项卡面板被扩展以填充所需的所有空间,这正是我想要的。但是,我在选项卡面板中添加的面板仅与其内容一样大。如果我添加标签或任何东西,它只会像组件一样大。我希望它们始终被扩展以填充标签面板。

【问题讨论】:

    标签: java swing


    【解决方案1】:

    将容器的 MinimumSize 设置为所需的首选大小,然后使用面板设置容器的 ContentPane。

        setMinimumSize(new Dimension(width,height));
        setContentPane(new MyPanel());
    

    此代码适用于所有布局。

    或者直接调用你的容器:

        setContentPane(new MyPanel());
    

    此代码适用于 BorderLayout 或 Free Design

    【讨论】:

      【解决方案2】:

      最简单的方法是使用 BorderLayout 并将组件放在 CENTER 位置。

      【讨论】:

      • 简单得多,而且完全有效。
      • 太棒了。对我的包装 JPanel 进行了一些小改动,瞧!谢谢!
      【解决方案3】:

      尝试将 GridBagConstraints 的权重设置为非零值:

      gbc.weightx = gbc.weighty = 1.0;
      

      【讨论】:

      • 这就像一个新的光谱 GridBagLayout!非常感谢! +1!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-01
      • 2011-12-16
      相关资源
      最近更新 更多