1

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

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

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

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

我错过了什么吗?

4

1 回答 1

2

许多现有的 Swing 组件,包括和JList,都使用享元模式渲染和编辑单元格。在此示例中,包含一个具有反映所选值的多个实例的. 的单个实例呈现状态列中给定行的状态。同样,单个实例允许更新状态列中给定行的状态。特别是,只有在视图更新之间实际存储数据;渲染器和编辑器对每一行重复使用。JTableJTreeJTable StatusPanelButtonGroupJRadioButtonenum StatusStatusRendererTableModelStatusEditorTableModelTableModel

图片

如果您不能使用现有的享元组件,此答案概述了该方法,包括一个完整的示例并引用了一个有用的教程。

图片

于 2017-07-27T23:52:26.237 回答