Почему одна из панелей в GridBagLayout расширяется, когда я добавляю JLabel?

Я пытаюсь создать графический интерфейс с помощью gridbaglayout.

Ниже приведен графический интерфейс, который я создал с помощью gridbaglayout, размер которого идеально подходит.

http://postimg.org/image/azjsw5xvd/

Однако, когда я пытаюсь добавить JLabel на панель «Функции», моя панель «Функции» автоматически расширяется и меняет мой графический интерфейс.

См. ниже с автоматически развернутой панелью.

http://postimg.org/image/xu1h21lk1/

Как мне заблокировать все панели от изменения их размера и сохранения этого соотношения панелей?

Ниже приведен исходный код, который я использовал для выравнивания моего графического интерфейса с помощью gridbaglayout. Я хочу убедиться, что все панели сохраняют одинаковые пропорции панелей, когда я изменяю размер фрейма или добавляю компоненты в свои подпанели.

    frame = new JFrame("Cocoon");
    frame.setExtendedState(JFrame.MAXIMIZED_BOTH);

    background = new JPanel();
    background.setLayout(new GridBagLayout());
    GridBagConstraints gbc = new GridBagConstraints();
    frame.getContentPane().add(background, BorderLayout.CENTER);

    filePanel = new FilesPanel();
    gbc.gridx = 0;
    gbc.gridy = 0;
    gbc.gridwidth = 2;
    gbc.gridheight = 10;
    gbc.weightx = 0.2;
    gbc.weighty = 1.0;
    gbc.fill = GridBagConstraints.BOTH;
    gbc.insets = new Insets(10, 10, 10, 10);
    background.add(filePanel, gbc);

    beforePanel = new BeforePanel();
    afterPanel = new AfterPanel();

    gbc.gridx = 2;
    gbc.gridy = 0;
    gbc.gridwidth = 7;
    gbc.gridheight = 8;
    gbc.weightx = 0.5;
    gbc.weighty = 0.8;
    codes = new JSplitPane(JSplitPane.VERTICAL_SPLIT, beforePanel, afterPanel);
    codes.setOneTouchExpandable(true);
    codes.setResizeWeight(0.5);
    background.add(codes, gbc);

    feedBackPanel = new FeedbackPanel();
    gbc.gridx = 2;
    gbc.gridy = 8;
    gbc.gridwidth = 5;
    gbc.gridheight = 2;
    gbc.weightx = 0.5;
    gbc.weighty = 0.2;
    background.add(feedBackPanel, gbc);

    functionsPanel = new FunctionsPanel();
    gbc.gridx = 7;
    gbc.gridy = 0;
    gbc.gridwidth = 3;
    gbc.gridheight = 10;
    gbc.weightx = 0.3;
    gbc.weighty = 1.0;
    background.add(functionsPanel, gbc);

    frame.add(background);
    frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
    frame.validate();
    frame.pack();
    frame.setVisible(true);

Спасибо.


person user3188291    schedule 23.06.2015    source источник


Ответы (1)


Ознакомьтесь с этим ответом. По сути, нет простой настройки, позволяющей заставить GridBagLayout изменять размер макета в зависимости от содержимого.

person jpyams    schedule 23.06.2015