在JScrollPane中快速查找可见组件的方法

时间:2012-11-21 01:55:53

标签: java swing user-interface visibility

给定JScrollPane包含使用某些LayoutManager的千个组件。每个组件都可以处于加载卸载状态。没有足够的资源供所有人加载。

我想在内存中只显示可见组件load(),并且不可见组件unload()。当用户滚动时,听众需要不断更新组件的状态:unload()以前可见,load()新显示。

  1. 在任何特定时刻,我如何知道哪些组件可见?
  2. 我可以在不重复整整一千的情况下知道这一点吗? (好像效率很高viewPort.getVisibleComponents()
  3. 我将准备好所有组件Y的准备好的排序列表,然后在运行时二进制搜索ViewPort的Y以获得可以引导我看到可见的索引。由于组件Y在列表准备时间内全部返回0,因此失败。这需要有效率。

1 个答案:

答案 0 :(得分:1)

具体而言,我将假设1000条记录,每条记录由class Record的实例表示。每个此类Record都应包含唯一且有意义的key类型Key

  • 获取List<Key>,可能在后台任务中。

  • 构建key值的一列TableModel

  • 使用此模型构建JTabletable

  • table添加到合适布局左侧的JScrollPane

  • 在右侧,添加一个可以Display单个选定Record的详细信息的面板。

  • Display包含ListSelectionListener here,它会更新Record中当前所选table的详细信息。< / p>

  • 将每个选定的Record添加到cache,从存储中检索Record,可能在后台任务中,只有在缓存中尚未存在时才会显示。