我通过Netbeans Swing GUI创建者在Netbeans中创建了一个GUI。所以我只是从“调色板”窗口拖放Swing组件,所有代码都是由netbeans生成的。
现在代码太长而无法维护(大约10,000行)。因此SO的一些专家建议我重构我的代码。
我可以重构我生成的代码,但我不知道如何重构Netbeans生成的代码,因为它不允许在其生成的代码中进行编辑。
有什么建议吗?
答案 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)
您可以将应用程序逻辑提取到单独的子类中。然后,直接使用子类。我成功了以下方法。
事件处理方法移动到子类 - 当您使用属性窗格向组件添加事件时,它会通过添加相关代码来更改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
}
});