是否存在JList的延迟加载实现?

use*_*413 3 java swing jlist

有没有办法用Swing的JList实现延迟加载?

Mic*_*ers 11

在某种程度上,是的.您可以创建一个自定义ListModel,使用该getElementAt(int index)方法加载正确的值(如果尚未加载).请参阅Javadocs中的示例JList:

// This list model has about 2^16 elements.  Enjoy scrolling.

ListModel bigData = new AbstractListModel() {
    public int getSize() { return Short.MAX_VALUE; }
    public Object getElementAt(int index) { return "Index " + index; }
};
Run Code Online (Sandbox Code Playgroud)


Un *_*mme 5

我解决了 我错过了JList API文档顶部讨论的解决方案.

在我在该主题的另一个答案中发布的示例源代码中,在创建JList之后添加此行(和注释):

  // Tell JList to test rendered size using this one value rather
  // than every item in ListModel. (Much faster initialization)
  myList.setPrototypeCellValue("Index " + Short.MAX_VALUE); 
Run Code Online (Sandbox Code Playgroud)

问题是,默认情况下,JList正在访问整个ListModel中的每个项目,以在运行时确定必要的显示大小.上面添加的行会覆盖默认值,并告诉JList只检查传递的一个值.该值充当模板(原型),用于调整JList的显示大小.

看到:

http://java.sun.com/javase/6/docs/api/javax/swing/JList.html#prototype_example