У меня есть подпанель, к которой я иногда добавляю некоторые компоненты. Я ожидаю, что FlowLayout будет правильно их размещать. Я помещаю subPanel в JScrollPane, чтобы пользователь мог видеть все компоненты, но я не хотел бы беспокоить пользователя прокруткой по горизонтали. Но JScrollPane позволяет subPanel расширяться горизонтально, когда добавляются дополнительные компоненты. Таким образом, все компоненты отображаются горизонтально горизонтально. А это означает худший возможный макет.Предотвращение расширения JScrollPane компонента viewPort
this.setLayout(new GridLayout(1, 1));
subPanel = new JPanel(new FlowLayout(FlowLayout.LEADING));
subPanel.setMaximumSize(new Dimension(500, 4000));
subPanel.setBackground(Color.CYAN);
subPane = new JScrollPane(subPanel);
subPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
subPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
this.add(subPane);
Где-то еще я добавил componentListener, чтобы решить эту проблему, но проблема остается:
@Override
public void componentShown(ComponentEvent e) {
subPanel.setSize(getSize());
}
@Override
public void componentResized(ComponentEvent e) {
subPanel.setSize(getSize());
}
И this
является JPanel, который создает полностью в JTabbedPane так занимает все вкладки.
Не используйте компонент ComponentListener для воспроизведения с размерами. Менеджер компоновки будет управлять предпочтительным размером компонента, который, в свою очередь, позволит панели прокрутки работать правильно. – camickr
Можете ли вы рассказать мне, какой формат использует JScrollPane для создания своего уникального компонента внутри? Проблема в том, что компоновка компонента внутри JScrollPane не управляется! Поэтому я не согласен, но я приветствую лучшее решение. @camickr – puk
JScrollPane имеет собственный мануал макета, и вы никогда его не измените. Менеджер компоновки отвечает за управление окном просмотра, полосами прокрутки и заголовками столбцов и строк. Все, что вам нужно сделать, это убедиться, что компонент, который вы добавляете в scrollpane, использует диспетчер компоновки, и я уже дал вам предложение о том, какой из них использовать. – camickr