【问题标题】:JScrollPane auto scroll down when dynamically adding JPanels动态添加 JPanel 时 JScrollPane 自动向下滚动
【发布时间】:2016-08-28 14:56:35
【问题描述】:

我想在更新他时自动向下滚动JScrollPane。我的 JScrollPane 包含一些我有时间根据用户操作的面板。

进行的测试

现有的解决方案都是关于 JTextArea 或 JList。 下面的解决方案有效,但存在覆盖每个用户操作的问题(如果我们手动单击 ScrollBox,它会自动向下滚动):

@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());
}

我只是在将 JPanel 添加到我的 JScrollPane 之后调用它。但它不会滚动到确切的底部,而是滚动到之前不是很……干净。

【问题讨论】:

    标签: java jscrollpane autoscroll


    【解决方案1】:

    在尝试查看为什么我的第二个解决方案不能完全工作后,我打印了滚动条的值(高),以查看它何时更新为 scrollPane.getVerticalScrollBar().getValue();

    这个值不会在添加 JPanel 后立即更新,而是在下一次 addPanel() 调用时更新(因此带有偏移量)。

    我只需在整个窗口/框架上调用revalidate() 方法即可完成这项工作。

    private void scrollDown(){
        window.revalidate(); //Update the scrollbar size
        JScrollBar vertical = scroll.getVerticalScrollBar();
        vertical.setValue(vertical.getMaximum());
    }
    

    注意:如果您只重新验证 JScrollPane,它将不起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多