Java 如何重用GUI对象(Flyweight模式)

Java 如何重用GUI对象(Flyweight模式),java,swing,design-patterns,flyweight-pattern,Java,Swing,Design Patterns,Flyweight Pattern,在我的Java应用程序中,我有一个复杂的GUI,其中某些JPanel(自定义控件)重复了100次(实际上可能会更多,但我不想让这个示例太复杂)。 这100个JPanel中的每一个都包含4个JTextBox控件,向用户显示特定的值 一个面板的jTextBox可能是空的,而在另一个面板中,只有一个可能有值,在其他一些面板中,所有的框都可能显示一些数字,你知道了——我不知道哪个面板的哪个textbox将包含哪些数据 现在,为了减少内存占用,我开始学习Flyweight设计模式。它似乎正是我需要的东西,

在我的Java应用程序中,我有一个复杂的GUI,其中某些JPanel(自定义控件)重复了100次(实际上可能会更多,但我不想让这个示例太复杂)。 这100个JPanel中的每一个都包含4个JTextBox控件,向用户显示特定的值

一个面板的jTextBox可能是空的,而在另一个面板中,只有一个可能有值,在其他一些面板中,所有的框都可能显示一些数字,你知道了——我不知道哪个面板的哪个textbox将包含哪些数据

现在,为了减少内存占用,我开始学习Flyweight设计模式。它似乎正是我需要的东西,但是,如果我保留一个JPanel作为种子,并使用它来表示其他99个面板(只需相应地更改JTextBox值),这意味着所有这些面板将共享公共引用

在这种情况下,更改其中一个中的JTextBox值也会更改所有其他中的值,对吗? 如何克服这个问题并保持应用程序的内存占用较低


我遗漏了什么吗?

许多现有的Swing组件,包括
JList
JTable
JTree
,都使用to单元格。在此
JTable
中,
StatusPanel
包含一个
按钮组
,其中有几个
JRadioButton
实例,反映了从
枚举状态
中选择的值。
StatusRenderer
的一个实例在status列中呈现给定行的
TableModel
状态。类似地,
StatusEditor
的单个实例允许更新status列中给定行的
TableModel
状态。特别是,只有
TableModel
在视图更新之间实际存储数据;渲染器和编辑器将对每一行重复使用

如果您不能使用现有的flyweight组件,本教程将概述该方法,包括一个完整的示例,并引用一个有用的教程


是的,这个问题被简化了。在我的实际应用程序中,用户必须对他们当前存储的所有可能数据都有一个概览。什么是“JTextBox”?请更具体地描述你的需求。Swing已经有了轻量级渲染器类型的组件,比如JTable,但是很难知道这是否适合您的需要。您可能需要对MVCSorry进行一些研究,以避免延迟。不,我不是真的想创建一个电子表格。这些面板有一些特殊的功能,通常是成对显示的,但在某个“历史”窗口中,我必须实际显示包含这些面板的完整列表,这些面板彼此堆叠在一起。另请参见,它在
paintCell()
中使用了
cellrenderpane