我想在更新时自动向下滚动JScrollPane
。我的JScrollPane包含一些我根据用户操作有时间的面板。
现有解决方案都是关于JTextArea或JList。下面的解决方案有效,但是有问题要覆盖每个用户操作(如果我们手动点击ScrollBox,它会自动向下滚动):< / p>
@Override
public void adjustmentValueChanged(AdjustmentEvent e){
e.getAdjustable().setValue(e.getAdjustable().getMaximum());
}
我尝试过这个解决方案:
private void addPanel(JPanel newPanel){
scrollPanel.add(newPanel);
scrollDown();
}
private void scrollDown(){
JScrollBar vertical = scroll.getVerticalScrollBar();
vertical.setValue(vertical.getMaximum());
}
我在将JSanel添加到JScrollPane后调用它。但是它不是滚动到确切的底部,而是在它之前不是很干净。
答案 0 :(得分:1)
在尝试查看为什么我的第二个解决方案无法完成后,我打印了滚动条的值(高),以查看何时使用scrollPane.getVerticalScrollBar().getValue();
更新
此值在添加JPanel后立即更新,但在下一个addPanel()调用时(因此使用偏移量)。
我只需在整个窗口中调用revalidate()
方法 / frame即可实现此功能。
private void scrollDown(){
window.revalidate(); //Update the scrollbar size
JScrollBar vertical = scroll.getVerticalScrollBar();
vertical.setValue(vertical.getMaximum());
}
注意:如果只重新验证JScrollPane,它就不起作用。