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