How to auto scroll to bottom in Java Swing
Solution 1
When you add/remove components for a panel you should invoke revalidate() on the panel to make sure the components are laid out properly.
Then, if you want to scroll to the bottom then you should be able to use:
JScrollBar sb = scrollPane.getVerticalScrollBar();
sb.setValue( sb.getMaximum() );
Solution 2
scrollPane.getVerticalScrollBar().addAdjustmentListener(new AdjustmentListener() {
public void adjustmentValueChanged(AdjustmentEvent e) {
e.getAdjustable().setValue(e.getAdjustable().getMaximum());
}
});
This would be the best. Found from JScrollPane and JList auto scroll
Solution 3
This is how I scroll all the way up or down automatically:
/**
* 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
}
pathikrit
Experienced in developing scalable solutions for complex problems. I enjoy working full-stack - from architecting schema and data-flows, implementing algorithms, designing APIs to crafting innovative UIs. My professional interests include algorithms, functional programming, finance, data analytics and visualization.
Updated on June 12, 2022Comments
-
pathikrit almost 2 years
I have a simple JPanel with a JScrollPane (with vertical scrollbar as needed) on it.
Things get added to (or removed from) the JPanel and when it goes beyond the bottom of the panel, I want the JScrollPane to scroll down to the bottom automatically as needed or scroll up if some components go away from the panel.
How shall I do this? I am guessing I need some kind of listener which gets called whenever the JPanel height changes? Or is there something as simple as
JScrollPanel.setAutoScroll(true)
? -
CompEng88 over 6 yearsThe only problem with this is that you can't adjust the scrollbar manually.
-
Pouria P about 4 yearsThis is the only thing that worked for me after trying many approaches.