我开发了一个包含 12 个 JPanel
的 Swing GUI。最初,所有 JPanel
的代码都写在主要的 JFrame
类代码中。结果,代码变得太长(10,000 多行)。
现在我想重构代码,将代码分成 13 个类(每个 JPanel
有 12 个类,主 JFrame
有 1 个类)而不是 1 个类携带所有代码。
但是我有一些困惑如下:
- 最初,这 12 个
JPanel
设置在“Card”JPanel
上,“Card”JPanel
的布局设置为CardLayout
以便在这 12 个JPanel
中只有 1 个JPanel
根据用户点击的按钮一次显示。现在,当我从MainJForm
中分离出这 12 个JPanel
并将它们中的每一个实现到它自己的类中时,我想我需要实例化一个相应的JPanel
每当用户点击按钮时。那么,在 EDT(Event Dispath Thread)上完成这项繁重的任务会更好吗?如果否,那么是否可以在SwingWorker
线程中创建 JPanel 的实例并传递一个 ref。到美国东部时间?
最佳答案
您可以按照与它们都在一个类中时完全相同的方式来实例化您的面板。因此,如果之前的实现在帧实例化时创建了所有对象,您可以同样地实例化您的 12 个面板对象。如果在单击按钮时面板显示时已完成此操作,请以相同的方式执行此操作。
在这种情况下,代码放置的问题应该不会对问题的执行产生影响,至少只要之前没有问题(当点击按钮切换面板时 ui 挂起)。
当然,您可以先创建最初显示的面板,然后使用 swingworker 创建其他面板,以便第一个立即显示,而其他面板在单击按钮后立即可用,而无需实例化它们第一的。只需确保在 EDT 中小心放置更改当前显示的 UI(例如将实例化面板添加到框架)的调用即可。
关于java - 代码是否应该由 EDT(事件调度线程)执行之间的混淆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2123076/