Один столбец макета не использует всю ширину окна - PullRequest
2 голосов
/ 05 января 2012

Я хотел бы создать макет: 2 строки, 1 столбец.1-й ряд должен занимать 70% высоты окна, а 2-й ряд - 30% окна.Я добиваюсь этого, используя weighty атрибут GridBagConstraints.

Однако у меня проблема с шириной моего компонента, потому что, когда я изменяю размер окна приложения, компонент остается в центре, его ширина остается постоянной, и я получаю пробелы слева и справа от компонента (дажеесли я установлю fill на BOTH).Эта проблема не возникает, когда я изменяю высоту окна (компоненты очень хорошо меняют размеры и заполняют всю высоту окна).

Ниже моих ограничений:

firstConstraints.gridx = 0;
firstConstraints.gridy = 0;  
firstConstraints.weighty = 0.7;
firstConstraints.fill = GridBagConstraints.BOTH;

secondConstraints.gridx = 0;
secondConstraints.gridy = 1;  
secondConstraints.weighty = 0.3;
secondConstraints.fill = GridBagConstraints.BOTH;

Ответы [ 2 ]

5 голосов
/ 05 января 2012

Я думаю, вам также нужно:

gbc.weightx = 1.0;

См. Раздел из учебника по Swing на Как использовать GrigBagLayout , который говорит о weightx, весомых ограничениях.

1 голос
/ 05 января 2012

простой пример

import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;

public class BorderPanels extends JFrame {

    private static final long serialVersionUID = 1L;

    public BorderPanels() {
        getContentPane().setLayout(new GridBagLayout());
        GridBagConstraints gbc = new GridBagConstraints();
        JPanel panel1 = new JPanel();
        Border eBorder = BorderFactory.createEtchedBorder();
        panel1.setBorder(BorderFactory.createTitledBorder(eBorder, "70pct"));
        gbc.gridx = gbc.gridy = 0;
        gbc.gridwidth = gbc.gridheight = 1;
        gbc.fill = GridBagConstraints.BOTH;
        gbc.anchor = GridBagConstraints.NORTHWEST;
        gbc.weightx = gbc.weighty = 70;
        getContentPane().add(panel1, gbc);
        JPanel panel2 = new JPanel();
        panel2.setBorder(BorderFactory.createTitledBorder(eBorder, "30pct"));
        gbc.gridy = 1;
        gbc.weightx = 30;
        gbc.weighty = 30;
        gbc.insets = new Insets(2, 2, 2, 2);
        getContentPane().add(panel2, gbc);
        pack();
    }

    public static void main(String[] args) {
        new BorderPanels().setVisible(true);
    }
}
...