如何重构Netbeans生成的GUI代码?

时间:2010-01-23 10:23:20

标签: java swing netbeans refactoring

我通过Netbeans Swing GUI创建者在Netbeans中创建了一个GUI。所以我只是从“调色板”窗口拖放Swing组件,所有代码都是由netbeans生成的。

现在代码太长而无法维护(大约10,000行)。因此SO的一些专家建议我重构我的代码。

我可以重构我生成的代码,但我不知道如何重构Netbeans生成的代码,因为它不允许在其生成的代码中进行编辑。

有什么建议吗?

5 个答案:

答案 0 :(得分:8)

10,000行代码听起来就像你拥有该单一课程中的所有内容。

首先将您的资源分为模型,视图和控制(MVC)。


您也可以将一些JPanels提取到单独的类中。一种方法是创建一个新的JPanel(新文件),并将您的组件从一个主面板剪切/粘贴到新的JPanel中。保存并编译新面板。

然后返回主框架,选择Beans - >来自Choose Bean的{​​{1}}并选择新创建的类(例如Palette)。

在尝试此操作之前,请确保备份您的应用程序。

答案 1 :(得分:2)

好吧 - 如果生成代码,只要生成它的工具可以处理它,我认为重构它没有任何优势。
工具(在本例中为设计者)将在更新代码后立即“销毁”所有重构工作。

但是,您应该将Control / Window / ...拆分为多个控件 - 然后代码会自动缩短,您将能够更轻松地维护UI。

作为结论:不要重构生成的代码,而是重构你的控件。

答案 2 :(得分:1)

使用layoutmanagers手动编写GUI代码。

使用GUI构建器工具,几乎不可能重构GUI代码。我必须使用这些愚蠢的Intellij Swing GUI设计器表单。我现在甚至无法在Eclipse中重命名我的包,因为它不会在forms.XML文件中更新。

远离GUI构建器。如果你想构建非常复杂,可维护的GUI,那么可以使用GridBagLayout和其他所有GUI手动完成。

答案 3 :(得分:0)

如果你必须使用netbeans,由于项目限制(例如团队的其他成员,或要求说),然后使用Matisse将巨大的形式分解成更小的面板,设计师可以编辑每个面板。您可以通过创建新表单,将大表单中的面板剪切并粘贴到新表单中来实现。

但与此同时,请确保将所有业务逻辑移出UI类。

如果您不必使用matisse / netbeans,您可以在Eclipse中打开项目,并使用WindowBuilder编辑表单,它将使用真正的Java代码而不是不可编辑的表单来执行,因此您可以进行切割和编辑这是你心中的内容。

答案 4 :(得分:0)

您可以将应用程序逻辑提取到单独的子类中。然后,直接使用子类。我成功了以下方法。

  1. 由我们定义的与应用程序逻辑相关的成员移动到新创建的子类。
  2. 组件访问修饰符“受保护”(它们是“私有的”) 默认)。为此:右键单击 - >属性 - >代码(标签) - >组 “变量修饰符”到“受保护”
  3. 事件处理方法移动到子类 - 当您使用属性窗格向组件添加事件时,它会通过添加相关代码来更改initComponents()函数,如下面的代码示例所示。这里将btnNum6ActionPerformed()的定义添加到具有空体的类中。不幸的是,btnNum6ActionPerformed()是私有的,无法使用NetBeans IDE更改访问修饰符。因此,它们不能被覆盖。要摆脱这种情况,您可以定义另一个中间函数并在btnNum6ActionPerformed()中调用它。最好使基类及其中间事件处理函数抽象化。

    btnNum6.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            btnNum6ActionPerformed(evt);//Definition of this method is added too
        }
    });