Как автоматически прокрутить вниз в Java Swing - PullRequest
5 голосов
/ 17 июня 2011

У меня есть простая JPanel с JScrollPane (с вертикальной полосой прокрутки при необходимости).

Вещи добавляются (или удаляются) в JPanel, и когда она выходит за нижнюю часть панели, я хочу, чтобы JScrollPane автоматически прокручивался вниз до нижней части или прокручивался вверх, если некоторые компоненты удаляются от панели.

Как мне это сделать? Я предполагаю, что мне нужен какой-то слушатель, который вызывается при изменении высоты JPanel? Или есть что-то простое, как JScrollPanel.setAutoScroll(true)?

Ответы [ 3 ]

12 голосов
/ 03 апреля 2013
scrollPane.getVerticalScrollBar().addAdjustmentListener(new AdjustmentListener() {  
        public void adjustmentValueChanged(AdjustmentEvent e) {  
            e.getAdjustable().setValue(e.getAdjustable().getMaximum());  
        }
    });

Это было бы лучшим.Найдено из JScrollPane и JList с автоматической прокруткой

4 голосов
/ 04 декабря 2015

Вот как я автоматически прокручиваю вверх или вниз:

/**
 * Scrolls a {@code scrollPane} all the way up or down.
 *
 * @param scrollPane the scrollPane that we want to scroll up or down
 * @param direction  we scroll up if this is {@link ScrollDirection#UP},
 *                   or down if it's {@link ScrollDirection#DOWN}
 */
public static void scroll(JScrollPane scrollPane, ScrollDirection direction) {
    JScrollBar verticalBar = scrollPane.getVerticalScrollBar();
    // If we want to scroll to the top, set this value to the minimum,
    // else to the maximum
    int topOrBottom = direction == ScrollDirection.UP ?
                      verticalBar.getMinimum() :
                      verticalBar.getMaximum();

    AdjustmentListener scroller = new AdjustmentListener() {
        @Override
        public void adjustmentValueChanged(AdjustmentEvent e) {
            Adjustable adjustable = e.getAdjustable();
            adjustable.setValue(topOrBottom);
            // We have to remove the listener, otherwise the
            // user would be unable to scroll afterwards
            verticalBar.removeAdjustmentListener(this);
        }
    };
    verticalBar.addAdjustmentListener(scroller);
}

public enum ScrollDirection {
    UP, DOWN
}
4 голосов
/ 17 июня 2011

Когда вы добавляете / удаляете компоненты для панели, вы должны вызывать revalidate () на панели, чтобы убедиться, что компоненты расположены правильно.

Затем, если вы хотите прокрутить до нижней части, вы можете использовать:

JScrollBar sb = scrollPane.getVerticalScrollBar();
sb.setValue( sb.getMaximum() );
...