无法以编程方式滚动到JList中的最后一项

时间:2010-04-23 02:13:59

标签: java swing

我有一个嵌套在JScrollPane中的JList。当我向JList添加项目时,我希望JScrollPane自动滚动到JList的底部,以便最后一项可见。为此,我有以下代码:

getWordListScroller().getVerticalScrollBar().getModel().setValue(getWordListScroller().getVerticalScrollBar().getModel().getMaximum());

但是,当我尝试使用此代码时,JScrollPane仅滚动到倒数第二个项目,将最后一个项目排除在外。这绝不是理想的。我已经尝试将值添加到getMaximum(),但问题仍然存在。

如何让JScrollPane滚动到最底层?

3 个答案:

答案 0 :(得分:14)

尝试使用JList#ensureIndexIsVisible()方法:

JList wordList = getWordListScroller ();
int lastIndex = wordList.getModel().getSize() - 1;
if (lastIndex >= 0) {
   wordList.ensureIndexIsVisible(lastIndex);
}

答案 1 :(得分:0)

虽然这个答案对我不起作用,但我发现了这个: http://forums.sun.com/thread.jspa?threadID=623669(由'inopia'撰写的帖子) 哪个效果很好。

正如他所说: “这里的问题是,在ListModel,JList和JScrollPane都已更新之后,找到一个触发的事件会变得有点困难。”

答案 2 :(得分:0)

此代码段对我有用

private JList<String> lstDebug;

private void scrollToBottom(){
    int lastIndex = lstDebug.getModel().getSize()-1;
    if(lastIndex >= 0){
        lstDebug.ensureIndexIsVisible(lastIndex);
    }
}