Подтвердить что ты не робот

Как заставить компоненты 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);
    }
}

Это создает окна, которые являются моим желаемым размером (динамически пропорциональным размеру экрана, не включенному в вышеприведенный код). Панель вкладок, размещенная в центре, расширяется, чтобы заполнить все необходимое пространство, что именно то, что я хочу. Но панели, которые я добавляю внутри панели вкладок, имеют такой же большой размер, как и их содержимое. Если я добавлю ярлыки или что-то еще, они будут расти только до размеров компонентов. Я хочу, чтобы они всегда были расширены, чтобы заполнить вкладку.

4b9b3361

Ответ 1

Попробуйте установить весы GridBagConstraints для ненулевых значений:

gbc.weightx = gbc.weighty = 1.0;

Ответ 2

Самый простой способ - использовать BorderLayout и поместить компонент в положение CENTER.

Ответ 3

Установите MinimumSize вашего контейнера на предпочтительный размер, который вы хотите, затем установите ContentPane контейнера с вашей панелью.

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

Этот код работает для всех макетов.

Или просто вызовите контейнер:

    setContentPane(new MyPanel());

Этот код работает для BorderLayout или Free Design