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;
    }
}
Другие вопросы по тегам