重用Swing组件,这些组件很难初始化

时间:2011-05-06 19:17:30

标签: java swing components initialization reusability

如果我的应用程序中有一个庞大的Swing组件需要很长时间来初始化,并且想要同时在我的GUI中的不同位置显示该组件,我最好如何做到这一点?

GUI用户必须能够与组件的不同副本进行交互 (例如,他们可以作为镜子工作)。

假设有人可能想要动态显示该组件的副本,具体取决于GUI用户的输入(也就是说,我们不希望预先加载同一组件的许多副本)。

4 个答案:

答案 0 :(得分:5)

您需要更改组件以便像时尚模型一样访问数据。每个组件都需要指向同一个模型,该模型将为数据提供服务并执行一次密集型任务而不是多次。

此外,初始化会降低GUI的速度,然后听起来像是需要启动画面或进度条,并且任务已从EDT移开。

答案 1 :(得分:2)

有没有什么方法可以将重载初始化代码拉出来,可能是'... Factory'类?

答案 2 :(得分:2)

我会创建一个组件实例(比如说HeavyComponent)和一个自定义类,例如JPanel并引用该组件。我们把它命名为MyContainer。在MyContainer的paintComponent()上,我将原始组件绘制到BufferedImage或使用heavyComponentReference.paint(g)。 然后在MyContainer上点击我将交换组件替换面板与HeavyComponent的真实实例并放置在HeavyComponent新实例MyContainer的旧位置。

答案 3 :(得分:-1)

  

以不同方式显示此组件   在我的GUI中同时放置...   无需创建新的副本   相同的组件......用户必须能够与不同的副本进行交互

没办法。