JScrollpane необходимо уменьшить его ширину

у меня есть JScrollpane что есть JPanel внутри (и панель содержит несколько JLabels).

Я хочу изменить размер панели прокрутки, чтобы фактически изменить ее размер (возможно, ниже предпочтительного размера внутренних компонентов), а не только размер окна просмотра.

цель состоит в том, чтобы внутренняя панель изящно исчезла (используя конкретные приоритеты сокращения и тому подобное в my miglayout), когда пользователь сжимает scrollpane слишком мало.

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;
    }
}