我对 Java 比较陌生,尤其是摇摆。我使用 Netbeans 6.8 进行开发。
我有一个使用自定义 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.");
}
}