1

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

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

  1. 在任何给定时刻,我如何知道哪些组件是可见的?
  2. 我可以在不迭代整个千人的情况下知道这一点吗?(好像一个有效率的viewPort.getVisibleComponents()

我将准备好所有组件 Y 的排序列表,然后在运行时二进制搜索中ViewPort的 Y 以达到可以引导我找到可见的索引的索引。这失败了,因为组件 Ys 在列表准备期间全部返回 0。这需要高效。

4

1 回答 1

1

具体而言,我将假设有 1000 条记录,每条记录由class Record. 每个这样Record的都应该包含一个唯一的、有意义key的 type Key

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

  • 构造一列TableModelkey

  • 使用此模型构建一个JTable, table

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

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

  • 让我们Display包含一个ListSelectionListener,在这里看到,它更新Record当前在table.

  • 将每个选定Record的内容添加到缓存中,从存储中检索Record,可能在后台任务中,前提是缓存中尚未存在。

于 2012-11-23T02:42:47.627 回答