我相对较新的Java,尤其是摆动。我使用Netbeans 6.8进行开发。JList AbstractListModel - fireIntervalAdded&AutoScroll添加到新元素
我有一个使用自定义AbstractListModel的JList。此AbstractListModel跟踪数据库中数据的更改,并在将新元素添加到列表中时调用fireIntervalAdded。这工作完美。
我遇到的问题是我想JList(或JScrollPane)自动滚动到列表中的新元素。我读过我可以使用JList.ensureIndexIsVisible,但我不知道如何从关联的ListModel中获取对JList实例的引用(因为我正在从ListModel中激发'fireIntervalAdded')。
为了解释一下,我在ListModel中构建了一个轮询器来轮询来自SQL服务器的新数据。由于我认为ListModel是列表的“数据源”,因此它使得ListModel中的数据复位(以及我的情况下的轮询)逻辑成为可能。这些教程似乎没有涵盖模型本身控制滚动的特定需求(这种排序是有意义的,因为ListModel可以同时用于多个JList .....)
我能做什么使JList滚动到ListModel代码中最后创建的元素?
另外,我想我可以解决我的问题,如果我可以在JList中找到一个事件,当添加一个新元素时会被触发,但我没有找到!
感谢
- 编辑 -
好,底座上MadProgrammer的回应,这里是我建:
public class JListDataListener implements ListDataListener {
JList _listToControl = null;
public JListDataListener(JList listToControl) {
this._listToControl = listToControl;
this._listToControl.getModel().addListDataListener(this);
}
public void intervalAdded(final ListDataEvent e) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
_listToControl.ensureIndexIsVisible(e.getIndex1() + 1);
}
});
}
public void intervalRemoved(ListDataEvent e) {
//throw new UnsupportedOperationException("Not supported yet.");
}
public void contentsChanged(ListDataEvent e) {
//throw new UnsupportedOperationException("Not supported yet.");
}
}
见http://stackoverflow.com/questions/2695767/unable-to-programatically-scroll-to -last-item-in-jlist – Reimeus 2012-07-16 17:39:27
我读过它了......我不需要引用JList来调用ensureIndexIsVisible?我如何从ListModel中获取此引用? – JFTxJ 2012-07-16 17:41:31