Хотя Kavka s' Answer решает требование наличия В верхней части панели с помощью якоря, я считаю, что объявленный вертикальный клей в панели BoxLayout фактически ничего не делает. Итак, я собираюсь расширить это, чтобы внести свой вклад в то, что я понял об использовании весов и вертикального клея в GridBagLayouts.
Поскольку GridBagLayout сложный, причин может быть больше, чем одна, но, как уже указал Кавка:
изменение weightx
и weighty
от значения по умолчанию 0,0 до ненулевого значения является ключевым.
Как указано в Учебном руководстве по Java по ограничениям GridBag , в разделе описания JavaDoc для GridBagLayout и описание конкретного параметра в JavaDoc для ограничений GridBag.
Если все веса равны нулю, все лишнее пространство появляется между сетками ячейки и
- для weightx дополнительное пространство появляется между левым и правым краями.
- для тяжелого дополнительное пространство появляется между верхним и нижним краями.
Итак, если вы хотите использовать вертикальный клей для заполнения пустых ячеек, вам нужно убедиться, что вы придали ненулевой вес компоненту клея в том направлении, в котором вы хотите, чтобы он расширялся. Я собираюсь использовать исключительно GridBagLayout, поэтому параметр gridy
позволит мне определить вертикальное распределение компонентов.
Взяв за основу исходный код, мы немного расширили его, чтобы продемонстрировать возможности вертикального склеивания в сочетании с весами. Этот код поместит A на 20% от верхней части панели, сохраняя это соотношение при изменении размера:
import javax.swing.*;
import java.awt.*;
public class Test {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel gridBagPanel = new JPanel();
gridBagPanel.setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridy = 0;
gbc.weighty = 0.2;
gridBagPanel.add(Box.createVerticalGlue(), gbc);
gbc.gridy = 1;
gbc.weighty = 0;
gridBagPanel.add(new JLabel("A"), gbc);
gbc.gridy = 2;
gbc.weighty = 0.8;
gridBagPanel.add(Box.createVerticalGlue(), gbc);
frame.setContentPane(gridBagPanel);
frame.setSize(800, 200);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
Для получения подробной информации о том, как работает клей, см. Учебное пособие по Java о том, как использовать BoxLayout, раздел «Заполнитель»
person
Pau Coma Ramirez
schedule
07.05.2014