我在JScrollPane中有一个JTable,该表偶尔会获取新的数据行。最终,数据行的数量超过了一次显示的数量,因此ScrollPane启动了。我希望每次添加新数据时,“滚动窗格”都跳到底部(达到最大值),所以我这样写,即在添加新行后立即调用:
jScrollPane1.getVerticalScrollBar().setValue(jScrollPane1.getVerticalScrollBar().getMaximum());
它工作得很好,但是有一个问题-它没有滚动到完整的底部。它总是留下表格的一行,您需要手动向下滚动才能到达整个底部。
我的怀疑是,仅在方法结束后才以某种方式添加新的数据行(按下JButton并激活actionPerformed方法后将其激活)。
如何解决?
最佳答案
您需要使用SwingUtilities.invokeLater在当前处理事件结束时将其排队;
它看起来像这样:
SwingUtilities.invokeLater(new Runnable() {
public void run() {
jScrollPane1.getVerticalScrollBar().setValue(jScrollPane1.getVerticalScrollBar().getMaximum());
}
}
);
否则将在当前事件期间运行,并且将在任何实际更新之前发生。
记住将它们设为变量final以将其传递给匿名内部类