如果我的应用程序中有一个庞大的Swing组件需要很长时间来初始化,并且想要同时在我的GUI中的不同位置显示该组件,我最好如何做到这一点?
GUI用户必须能够与组件的不同副本进行交互 (例如,他们可以作为镜子工作)。
假设有人可能想要动态显示该组件的副本,具体取决于GUI用户的输入(也就是说,我们不希望预先加载同一组件的许多副本)。
答案 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中同时放置... 无需创建新的副本 相同的组件......用户必须能够与不同的副本进行交互
没办法。