Как вложить JPanels в GridBagLayout? - PullRequest
0 голосов
/ 04 марта 2019

Я хочу вложить JPanels в JPanels в GridBagLayout.Вот изображение проблемы, с которой я столкнулся: enter image description here

Как вы можете сказать, вложение компонентов внутри JPanel, расположенного внутри GridBagLayout, приводит к увеличению размера JPanel.Это проблема, поскольку я не могу добавить компоненты в JPanels без изменения их размера.

Вот код:

package gui;

import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class GridBagDemo {


    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Grid grid = new Grid();

        JFrame frame = new JFrame();
        frame.setBounds(100,100, 500, 500);
        frame.add(grid);
        frame.setVisible(true);

    }

}
class Grid extends JPanel {

    public Grid () {
        setBackground(Color.white);
        GridBagLayout bagLayout = new GridBagLayout();
        setLayout(bagLayout);

        GridBagConstraints gc = new GridBagConstraints();
        JPanel navBar = new JPanel();
        navBar.setBackground(Color.GREEN);
        JLabel label = new JLabel("hello world");
        navBar.add(label);
        gc.fill = GridBagConstraints.BOTH;
        gc.gridx = 0;
        gc.gridy = 0;
        gc.gridwidth = 2;
        gc.weightx = 0.1;
        gc.weighty = 0.05;
        add(navBar, gc);

        JPanel toolBar = new JPanel();
        toolBar.setBackground(Color.blue);
        gc.fill = GridBagConstraints.BOTH;
        gc.gridx = 0;
        gc.gridy = 1;
        gc.gridwidth = 1;
        gc.weightx = 0.3;
        gc.weighty = 0.3;
        add(toolBar, gc);
        //Second row
        JPanel content = new JPanel();
        content.setBackground(Color.CYAN);
        gc.fill = GridBagConstraints.BOTH;
        gc.gridx = 0;
        gc.gridy = 1;
        gc.weightx = 0.15;
        gc.weighty = 0.3;
        add(content, gc);

        JPanel navBarChild = new JPanel();
        navBarChild.setBackground(Color.MAGENTA);
        gc.fill = GridBagConstraints.BOTH;
        gc.gridx = 1;
        gc.gridy = 1;
        gc.weightx = 0.3;
        gc.weighty = 0.3;
        add(navBarChild, gc);
        //Third row
        JPanel bottomLeft = new JPanel();
        bottomLeft.setBackground(Color.DARK_GRAY);
        gc.fill = GridBagConstraints.BOTH;
        gc.gridx = 0;
        gc.gridy = 2;
        gc.weightx = 0.1;
        gc.weighty = 0.3;
        add(bottomLeft, gc);

        JPanel bottomRight = new JPanel();
        bottomRight.setBackground(Color.LIGHT_GRAY);
        gc.fill = GridBagConstraints.BOTH;
        gc.gridx = 1;
        gc.gridy = 2;
        gc.weightx = 0.3;
        gc.weighty = 0.3;
        add(bottomRight, gc);
    }
}

Мое предпочтительное поведение - возможность добавлять компоненты во вложенные файлы.JPanel без увеличения размера JPanel.

Я некоторое время изучал эту тему в Google, и большинство результатов не имеют отношения к моей проблеме.Есть два SO ответа, которые в некоторой степени связаны, но на самом деле не касаются одной и той же проблемы.

...