У меня есть a JScrollpane
это имеет a JPanel
на внутренней части (и панель содержит некоторых JLabel
s).
Я хочу изменить размер области прокрутки для фактического изменения ее размера (возможно ниже предпочтительного размера внутренних компонентов), не только размера области просмотра.
Цель состоит в том, чтобы внутренняя панель корректно исчезла (использование определенных приоритетов уменьшения и т.п. в моем miglayout), когда пользователь уменьшает слишком маленькую область прокрутки.
Вероятно, лучший метод заключается в том, чтобы содержащийся компонент всегда был той же ширины, что и область просмотра. Для этого первый содержащийся компонент (тот, который является дочерним для JViewPort
, передается в конструктор JScrollPane
или устанавливается как viewportView
) должен реализовать javax.swing.Scrollable
. Ключевым методом является getScrollableTracksViewportWidth
, который должен возвращать true
.
Вот быстрая и грязная прокручиваемая JPanel :
public class ScrollablePanel extends JPanel implements Scrollable {
public Dimension getPreferredScrollableViewportSize() {
return getPreferredSize();
}
public int getScrollableUnitIncrement(Rectangle visibleRect, int orientation, int direction) {
return 10;
}
public int getScrollableBlockIncrement(Rectangle visibleRect, int orientation, int direction) {
return ((orientation == SwingConstants.VERTICAL) ? visibleRect.height : visibleRect.width) - 10;
}
public boolean getScrollableTracksViewportWidth() {
return true;
}
public boolean getScrollableTracksViewportHeight() {
return false;
}
}