动态添加JPanel时,JScrollPane会自动向下滚动

时间:2016-08-28 14:56:35

标签: java jscrollpane autoscroll

我想在更新时自动向下滚动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后调用它。但是它不是滚动到确切的底部,而是在它之前不是很干净。

1 个答案:

答案 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,它就不起作用。