JScrollpane нужно уменьшить его ширину
У меня есть JScrollpane
это имеет JPanel
на внутренней стороне (и панель содержит некоторые JLabel
с).
Я хочу изменить размер панели прокрутки, чтобы фактически изменить ее размер (возможно, ниже предпочтительного размера внутренних компонентов), а не только размер области просмотра.
Цель состоит в том, чтобы внутренняя панель изящно исчезла (используя особые приоритеты сжатия и т.п. в моем miglayout), когда пользователь слишком сильно сжимает полосу прокрутки.
1 ответ
Вероятно, лучший способ состоит в том, чтобы содержащийся компонент всегда был той же ширины, что и область просмотра. Для этого первый содержащийся компонент (тот, который является дочерним 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;
}
}