Я пытаюсь сделать довольно простой макет, что было бы очень легко в каком-то другом менеджере компоновки. Однако мне нужно, чтобы он работал для GridBagLayout
. После того, как фрагмент кода:Компонент занимает только один столбец в GridBagLayout
GridBagConstraints c = new GridBagConstraints();
JPanel smallLogoPanel = new JPanel();
smallLogoPanel.setBorder(new LineBorder(Color.red, 1));//for visualizing components' display are
smallLogoPanel.setSize(50, 50);
c.gridx = 0;
c.gridy = 0;
c.gridwidth = 1;
c.gridheight = 2;
c.weightx = 0.01;
c.weighty = 0.1;
c.fill = GridBagConstraints.BOTH;
JLabel smallLogoLabel = new JLabel(some code to get ImageIcon);
smallLogoPanel.add(smallLogoLabel);
this.infoPanel.add(smallLogoPanel, c);
JLabel label1 = new JLabel("Label 1");
label1.setFont(new Font("Verdana", Font.BOLD, 30));
label1.setBorder(new LineBorder(Color.red, 1));
c.gridx = 1;
c.gridy = 0;
c.gridwidth = 9;
c.gridheight = 1;
c.weightx = 0.99;//for some reason smallLogoLabel takes much more space if this weightx is any smaller
c.weighty = 0.075;
this.infoPanel.add(label1, c);
JLabel label2 = new JLabel("Label 2");
label2.setFont(new Font("Verdana", Font.BOLD, 10));
label2.setBorder(new LineBorder(Color.red, 1));
c.gridx = 1;
c.gridy = 1;
c.gridwidth = 9;
c.gridheight = 1;
c.weightx = 0.99;
c.weighty = 0.025;
this.infoPanel.add(label2, c);
... Я получаю такой результат:
... что абсолютно нормально. Проблема заключается в том, когда я добавить еще две меток под ним:
JLabel label3 = new JLabel("Label 3");
label3.setFont(new Font("Verdana", Font.BOLD, 20));
label3.setBorder(new LineBorder(Color.red, 1));
c.gridx = 0;
c.gridy = 2;
c.gridwidth = 5;
c.gridheight = 1;
c.weightx = 0.5;
c.weighty = 0.05;
c.anchor = GridBagConstraints.CENTER;
this.infoPanel.add(label3, c);
JLabel label4 = new JLabel("Label 4");
label4.setFont(new Font("Verdana", Font.BOLD, 20));
label4.setBorder(new LineBorder(Color.red, 1));
c.gridx = 5;
c.gridy = 2;
c.gridwidth = 5;
c.gridheight = 1;
c.weightx = 0.5;
c.weighty = 0.05;
c.insets.left = 0;
this.infoPanel.add(label4, c);
... результат выглядит следующим образом:
Ширина верхнего ряд становится различной, особенно панель со значком становится шире. Другая проблема - нижняя строка. Я ожидал, что обе метки будут иметь одинаковую ширину. Однако кажется, что левый занимает только 1 столбец, который имеет ту же ширину, что и панель со значком.
Я был бы очень рад, что я мог бы помочь мне с этим, так как я полностью застрял сейчас.
Пожалуйста, отредактируйте вопрос с описанием, если эти JComponents могут/будут изменяться по размеру, очень важно для хорошего ответа. – mKorbel
Единственный компонент, который имеет свой размер, представляет собой панель со значком. Кроме того, каждый компонент просто заполняет остальную часть области, используя c.fill = GridBagConstraints.BOTH – lebryant