Java - 设置jScrollBar的位置

时间:2014-06-05 15:47:58

标签: java swing jscrollpane jscrollbar

我在JScrollPane中有一个JTable,该表每隔一段时间就会获得一行新的数据。最终,有多行数据可以同时显示,因此ScrollPane会启动。我希望每次添加新数据时滚动窗格都会跳到底部(达到最大值),所以我写了这个,这是在添加新行后立即调用:

jScrollPane1.getVerticalScrollBar().setValue(jScrollPane1.getVerticalScrollBar().getMaximum());

效果很好,但有一个问题 - 它没有滚动到完整的底部。它总是会遗漏表格的一行,您需要手动向下滚动才能到达完整的底部。

我怀疑只有在方法结束后才会以某种方式添加新的数据行(在按下JButton并激活actionPerformed类方法后激活它。)

如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

您需要使用SwingUtilities.invokeLater在当前处理事件结束时对其进行排队; 它看起来像这样:

SwingUtilities.invokeLater(new Runnable() {
  public void run() {
   jScrollPane1.getVerticalScrollBar().setValue(jScrollPane1.getVerticalScrollBar().getMaximum());
  }
 }
);

否则将在当前事件期间运行,并且将在任何实际更新之前发生。

记得让它们变成final,将它们传递给一个匿名的内部类