Вот сложный вопрос для вас, ребята:)
По сути, у меня есть GridBagLayout с 2 столбцами: список , завернутый в полосу прокрутки в каждом.Полосы прокрутки растянуты в направлении ОБА .
Если я постепенно уменьшу высоту этой панели (перетаскивая край окна), я вижу "случайное" изменение размера, происходящее на полосах прокрутки:
ширина второй уменьшается, когда появляется первая полоса прокрутки
затем ширина второго уменьшается снова без причины ...
Если я не упаковываю свои компоненты, не получайте такое поведение.
И если вы замените правый список на дерево , оно будет вести себя по-другому: при уменьшении высоты окна ниже 380-пикс., Дерево будет изменено в размере ...
Если я не будуЕсли обернуть мои компоненты, дерево все равно будет изменено, если вы продолжите изменять размер окна!
Ребята, вы хоть представляете, что происходит ???
PS: фактический макет iЯ пытаюсь построить более сложный, чем этот пример.В то же время я использую SpringLayout, чтобы делать то, что я хочу, но это требует много (не так красиво) вещей для настройки
protected static ListModel newListModel(int n) {
DefaultListModel lm = new DefaultListModel();
for (int i = 0; i < n; ++i)
lm.addElement("AAA");
return lm;
}
protected static JComponent createContentPane() {
JPanel pane = new JPanel(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.anchor = GridBagConstraints.CENTER;
gbc.fill = GridBagConstraints.BOTH;
gbc.weightx = 1;
gbc.weighty = 1;
gbc.gridy = 0;
gbc.gridx = 0;
pane.add(new JScrollPane(new JList(newListModel(12))), gbc);
++gbc.gridx;
pane.add(new JScrollPane(new JList(newListModel(4))), gbc);
return pane;
}
public static void main(String[] args) {
JFrame f = new JFrame();
f.getContentPane().add(createContentPane());
f.setSize(800, 400);
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
f.setVisible(true);
}