【发布时间】:2011-05-13 22:34:26
【问题描述】:
(已编辑)
我想显示一个包含用户可以修改的文本字段的 JPanel 的动态列表。我无法决定如何设计我的 GUI。我应该在 JTable 还是 JScrollPane 中显示每个 JPanel?
据我了解,JTable 方法内存效率更高、速度更快,因为我有 getTableCellRenderer 方法,它使用缓存的 JPanel 来显示表格单元格的数据(编辑:我没有将 JPanel 存储在我的表格中,只是数据)。 getTableCellEditor 方法调用相同的缓存 JPanel 来捕获用户的输入。捕获输入后,数据将更新到表中。我不确定如何允许用户在单元格渲染器再次接管之前修改此临时 JPanel 的多个组件(文本字段)。我解决这个问题的唯一方法是创建一个弹出对话框来捕获所有信息,一旦用户完成将数据存储回表。 (我认为这会停止表格单元格的渲染过程,还不确定。)
另一种方法是创建 JPanel 并将其添加到 JScrollPane。但是,这意味着我不仅要存储原始数据(整数、字符串等),而且还要使用更多内存,因为我要创建这么多 JPanel 对象。这显然是更简单的方法;但是,如果我的列表很大,那么我相信我会在性能上看到一些命中。
我喜欢 JTable 的设计;但是,我讨厌这样一个事实,即当需要编辑单元格时,我需要弹出一个窗口来捕获输入。我不知道,我可能只是简单地使用 JScrollPane 设计。
这听起来对吗?还是我遗漏了有关 getTableCellEditor 进程如何工作的一些信息?
【问题讨论】:
-
Dacwe,也许您误解了,或者您不完全了解 JTables 的工作原理。 JPanel 通过 getTableCellRenderer 方法显示。我使用原始数据更新组件并返回 JPanel 对象。 JPanel 对象随后显示为表格中的一个单元格。
-
这是您的设计,而不是表格的工作方式。表格不适用于面板,它们适用于数据。