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

一个面板的JTextBoxes可能是空的,而在另一个面板中的JTextBoxs可能有一个值,在另一些面板中的所有文本框都可能显示一些数字,您就会明白-我不知道哪个面板的哪个文本框将包含哪些数据。

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

在那种情况下,更改其中一个的JTextBox值也会更改所有其他值,对吧?
如何克服这个问题,同时又保持应用程序的内存占用量少?

我想念什么吗?

最佳答案

许多现有的Swing组件,包括JListJTableJTree,都使用flyweight patternrender and edit单元。在此JTable example中,StatusPanel包含一个ButtonGroup,其中JRadioButton的多个实例反映了从enum Status中选择的值。 StatusRenderer的单个实例为状态列中给定行呈现TableModel状态。同样,单个StatusEditor实例允许更新状态列中给定行的TableModel状态。特别是,只有TableModel实际上在视图更新之间存储数据;渲染器和编辑器可重复用于每一行。

java - 如何重用GUI对象(Flyweight模式)-LMLPHP

如果您不能使用现有的flyweight组件,则此answer概述了该方法,包括完整的示例并引用了有用的教程。

java - 如何重用GUI对象(Flyweight模式)-LMLPHP

10-08 09:05