2010-01-23 26 views
3

我开发了一个包含12个JPanel的Swing GUI。最初,所有JPanel的代码都写在主要的JFrame类代码中。结果,代码变得太长(超过10,000行)。代码是否应该由EDT(Event Dispatch Thread)执行或不执行?

现在我想重构代码,将代码拆分为13个类(每个类12个类,其中一个为JPanel,另一个为主类JFrame),而不是一个类承载所有代码。

但我有一些困惑是如下:

  1. 最初的12个JPanel小号上分别设置了一个“卡” JPanelJPanel设置为CardLayout,以便只有1“卡”的布局JPanel其中12 JPanel显示在一个基于点击使用的按钮。现在,当我从MainJForm中分离出那些12 JPanel并将其中的每一个都实现为它自己的类时,我想我需要在用户单击按钮时首先实例化相应的JPanel。那么,在EDT(Event Dispath Thread)上执行这个繁重的任务会更好吗?如果不是,那么它是否会在SwingWorker线程中创建一个JPanel的实例并传递一个ref。到EDT?

回答

1

您可以完全安装您的面板,就像他们全部在同一班级时一样。因此,如果以前的实现在框架实例化上创建了所有对象,则可以同样实例化您的12个面板对象。如果在面板显示按钮点击时立即执行此操作,则以同样的方式进行操作。

在这种情况下执行代码时,代码放置位置的问题应该不会影响问题,至少只要以前没有问题(ui在按钮单击时切换面板时会挂起) 。

当然,您可以先创建一个最初显示的面板,然后使用一个摆动工具来创建其他工具,以便第一个立即显示,而其他工具在按钮被点击时立即显示而不必实例化然后第一。只要确保你注意调用改变当前显示的UI的调用(例如在框架中添加实例化的面板)。

0

构建EDT中JPanel的12个实例不应该成为问题。我会继续前进,让他们这样。这会让你的代码更容易阅读。谨防过早优化。如果遇到性能问题,我只会优化性能。