有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何让Java Swing组件填满可用空间?

我似乎无法让我的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);
    }
}

这将创建一个符合我所需大小的窗口(与屏幕大小成动态比例,不包括在上述代码中)。位于中间的选项卡面板被展开,以填充所需的所有空间,这正是我想要的。但是,我在选项卡面板中添加的面板只与它们的内容一样大。如果我添加标签或任何东西,它只会和组件一样大。我希望它们总是被扩展以填充选项卡面板


共 (3) 个答案

  1. # 1 楼答案

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

    gbc.weightx = gbc.weighty = 1.0;
    
  2. # 2 楼答案

    最简单的方法是使用BorderLayout并将组件置于中心位置

  3. # 3 楼答案

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

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

    此代码适用于所有布局

    或者直接打电话给你的集装箱:

        setContentPane(new MyPanel());
    

    此代码适用于边界布局或自由设计