Java,GUI构建器还是手工编码?

时间:2009-01-22 07:34:34

标签: java forms user-interface

我的公司软件有很多形式,到现在为止我们手工编写代码(MVC方式)。

我们正在考虑开始使用GUI builder。

使用Builder时几乎没有问题。

  1. 部分代码不是 的可读即可。
  2. 部分代码不是 的编辑即可。
  3. 编辑代码会更难 后面。
  4. 我们将不得不继续使用 未来的建设者, 即使我们想要替换构建器或手工编写,也没有人能确保将来可以使用和支持该工具。
  5. 我想从别人的经验中学习:

    • 您是否建议使用工具或我们是否应继续手动编写代码?
    • 哪个构建器更好?
    • 他如何处理这些问题? (还有其他问题吗?)

16 个答案:

答案 0 :(得分:17)

对于一些表单,我建议使用Builder。它会更快地完成。但是,如果您需要维护很多表单一段时间,我建议您不要使用构建器。对于这种情况,您花在阅读代码和维护上的时间远远大于初始设计时间。因此,虽然构建器在初始阶段为您节省了一些时间,但它使代码读取和维护更加困难。更重要的是,它使代码重复使用,即使是从一种形式复制和粘贴到另一种形式的形式,也更加困难。

我不知道您是指Web或桌面应用程序,但总的来说,我还没有找到能够产生优雅输出的Java Gui构建器。例如,Netbeans Swing生成的代码就是一团糟。也许,如果一个好的建设者可用,我会改变主意。我使用Visual Studio的表单设计器没有问题 - 它可以生成可以阅读和理解的优秀代码。

对于桌面应用程序,请查看MiGLayout。它是Swing和SWT的布局管理器,而不是构建器,可以让您的生活更轻松。

答案 1 :(得分:10)

通过使用优秀的构建器,开发速度会快得多。

您无法修改代码的焦虑可能是由于您在视图中有很多不属于它的逻辑。实际上,这种改变可能会帮助你从视图中移动逻辑,这恰好可以在不破坏代码的情况下改变视觉元素。

根据“不可读”,您应该考虑使用更好的GUI生成器。我只听说过关于NetBeans的积极的事情,我使用的IntelliJ GUI构建器代码很干净。

这两个源代码都是可读和可编辑的,但仅用于小调整。对于主要的,请使用GUI构建器。

我认为对于少数几种表格来说,手工操作没有问题,但是由于你刚才说的有“很多”,使用这些工具将是最有益的。

答案 2 :(得分:7)

这是我的经历:

我从不喜欢GUI构建器生成的代码。至少,在VB世界中并不像每个人(好吧,差不多)都会使用相同的IDE来构建应用程序。在Java中,人们使用多个IDE,有些人也使用VIM和Notepad。并且所有IDE都不会生成相同类型的代码。另一个问题是,他们通常不了解其他IDE生成的代码。所以要回答你的第一个问题,我不推荐

您的下一个问题:哪个构建器更好?我最后一次使用, Netbeans 比我尝试过的大多数人好。

如果您必须使用GUI构建器,因为您需要更快地开发应用程序,请确保所有团队成员都使用相同的构建器。最好对此有所了解,否则他们的眼睛会被IDE生成的源代码所伤害。

让我们知道你的决定!

答案 3 :(得分:5)

在过去的3年半里,我一直在使用Netbeans的Java Swing GUI Builder(Matisse)来完成我的所有项目。我读过很多人关于GUI Builders的抱怨,而经验最丰富的程序员会嘲笑所有甚至暗示使用它的人,但这是我的经历:

  1. 不需要编辑不可编辑的代码。实际上,GUI Builder为您的GUI提供了一个框架。使用编辑器拖动,删除,调整大小和约束组件,但表的内容,组合框的列表等都需要在后端处理。 GUI构建器允许您专注于它,同时它可以使事物看起来漂亮并保持原状。
  2. WYSIWYG总是更有效率。 Word处理器就是这方面的见证。人们会告诉你:“你不会编辑那么多的GUI代码,如果能节省你的时间,那就不是那么多了。”但这种说法非常相对。当您在具有流程模型的软件环境中工作时,由于业务模型更改而需要不断更新,此语句为false。此外,您将大部分时间花在英语文章的内容上,不是吗?所以这个论点会说WYSIWYG Word处理器并没有为你节省那么多时间,而这样的陈述会被置若罔闻,因为没有人愿意手工编写他们的论文的外观。
  3. 没有任何GUI构建器无法做到的手写代码,而我花了几个小时尝试使用手写的GUI代码解决小问题,在GUI构建器中花了我1分钟。
  4. 特别是Netbeans的GUI构建器多年来已经变得如此好,以至于它已经收到了很多高手(类似于Java已经收到的大量内容)已经真正无效。这是一个很棒的程序,它是一种以时间有效的方式构建功能丰富,美观的界面的好方法。我强烈推荐一个优秀的GUI Builder,尤其是Netbeans'。

    在那里,我说了。

    不,我不为他们工作。

答案 4 :(得分:4)

我会远离gui建设者。根据我的经验(matisse),你最终会花费同样的时间用手工编写gui's,如果不是更多的话。由于尝试读取生成的代码,并在进行更改时进行清理。另外,如果你手工编写gui,你将必须理解代码以便编写gui,这将有助于加班变得更加熟练,并且你会更快地编写gui,并且你会更快并亲自编写它们。随着时间的推移,您还可以为自己多次编写的gui功能开发一个组件库。我会远离建设者。一个优秀的开发人员随时都会与建筑商一起击败普通开发商。

答案 5 :(得分:3)

如果您没有太复杂的表单来构建,那么您可以查看DesignGridLayout,它是Swing LayoutManager,它具有流畅的API,可以很容易地为您的表单编写代码并且易于阅读代码(并维护,我的意思是在需要时修改)并通过代码可视化表单。

使用DesignGridLayout,表单中的一行组件是一行代码。 没有XML,完全编译时安全。 没有硬编码的间距值,对齐... DesignGridLayout为您处理它。

简短的学习曲线和快速布局表单作为GUI设计师!

从我大约2年前发现它开始,我就专门使用它(由于生成的代码很糟糕,我一直对GUI设计师过敏)。这就是我8个月前接手这个项目的原因,因为我想充分发挥其潜力。

答案 6 :(得分:2)

我们手工完成,但有一个图书馆帮助我们进行布局(JGoodies Forms)等等。此外,我们使用一组预先插入UI(Jide)的预定义组件。对我们来说效果很好。

答案 7 :(得分:2)

多年来我使用了很多GUI设计师(针对不同的语言):Delphi,Visual Studio,JBuilder,Netbeans。

他们生产的代码质量和数量很重要。 Delphi非常棒,它相对于表单大小生成了少量代码,代码很容易理解,双向工具允许您自信地更改生成的代码。这是一个简单理解的GUI库的帮助。 VS产生大量代码,你很害怕改变它。

Java语言部分失望,没有代理或闭包,因此基于事件的代码很快就会成为蔓延。

我会用Netbeans Matisse敲打简单的东西,并且 - 一旦有信心 - 手工编码。复杂的东西值得计划和手工编码,以便您很好地定义模型。

如果您构建一个可以重用的GUI组件库,这会有所帮助。这与所有具有GUI库的语言相关。

答案 8 :(得分:2)

对于具有 lot 简单表单的系统,我倾向于使用XML路由 -

  • 为每个表单的信息和任何工作流定义XML文件
  • 创建XSLT以生成Java / XHTML /在桌面PC / mobile / web上运行表单的任何代码
  • 还创建XSLT以生成源代码数据对象等。

您可以使用XForms及其实现,但通常我一直在那些购买解决方案比构建您自己的简单XSLT需要更长时间的地方工作。如果表单中没有太多专用小部件,通常需要一周时间才能启动并运行所有内容。如果您自己创建代码生成器,则可以完全控制。如果您发现要将所有表单从向上/向下滚动切换到列中,那么只需要更改一个位置,而不是更改每个表单的实现。 (虽然你可以创建一个框架来从Java中的表示中抽象表单信息,但它不适合这种声明性编程)

答案 9 :(得分:1)

我个人喜欢将GUI布局与代码分开(否则你最终会遇到刚才提到的问题)。它似乎也是趋势:微软有他们的XAML,你一直听说MVC的不同视图引擎等。

为什么不选择基于XML的GUI设计? 你可以尝试类似JFormDesigner的东西,它可以处理XML和代码生成的布局。

答案 10 :(得分:1)

我最近一直在做这两件事 - 我正在使用Netbeans,最初因为缺乏对生成代码的控制而感到沮丧。然后我发现您可以从GUI构建器添加自定义代码,这可以克服大多数问题。但是,我对NetBeans中的布局管理器感到更加沮丧,发现这对我的工作效率的影响比任何事情都要大。我已经切换到使用MiGLayout并手动完成大部分编码。话虽如此,NetBeans整体上还是相当不错的,也许我应该花更多的时间来学习GroupLayout。

如果您正在进行团队开发,请确保在依赖GUI构建器时都使用相同的工具。

答案 11 :(得分:0)

我过去曾使用Netbeans构建GUI代码并使用Eclipse编写程序逻辑。只需将GUI代码作为单独的LINKED源文件夹包含。

答案 12 :(得分:0)

我会说只有使用GUI构建器才能理解你想要做的事情,你可以自己做。

答案 13 :(得分:0)

如果您的表单简单而不是动态,那么GUI构建器就是完美的。形式越复杂,使用GUI构建器的好处就越少。

我工作的公司就是这样做的。更简单的应用程序是使用GUI构建器开发的,更复杂的应用程序是手工完成的。一旦有足够的时间试图解决GUI构建器的限制,它通常会被放弃。此外,每个GUI构建器都不是同等创建的,因此您需要进行一些评估,以确定GUI构建器在哪些情况下是合适的。 (NetBeans GUI Builder非常好。)

就个人而言,我喜欢使用GUI构建器来提出整个布局和app / form并使用不同的布局,但之后我将其转换为更易读的代码,然后手工完成。

答案 14 :(得分:0)

无论您是否使用GUI编辑器构建GUI表单,我强烈建议您开发一组可放置在表单上的标准“bean”面板。

我们在600多种表格中使用了大约100种这样的豆子。下面是一张显示其中一个豆子的图片:

enter image description here

此面板包含标准标签,强制指示符(红色星号),编辑器字段(本例中为组合框)和仅显示字段(灰色框)。在这种情况下,组合框和仅显示字段是互斥的 - 一次只能看到一个,具体取决于表单/字段所处的模式。

这些bean包含我们的标准(框架)功能,其中包括标准的外观颜色,字体等。如果我们想要改变所有这些字段的运行方式或它们的外观,我们会更改它在一个类中,它在包含它的所有表单上都会发生变化。

现在,我们如何建立表格?好吧,我们在NetBeans Matisse GUI构建器中执行所有表单。我们对它非常满意。虽然您无法编辑它生成的代码,但我从来没有任何实例阻止我在GUI中执行某些操作。我上面提到的bean可以很容易地添加到Palette中,因此将它们添加到表单中是一种拖拽效果。

在我看来,有一些技巧可以使事情变得更容易。我们在大多数表单上使用BoxLayout(在页轴中),并且与我们的标准bean面板结合使用,构建表单几乎只需要几分钟即可完成(至少在图形方面)。此外,如果您在表单上的同一“行”上有多个控件(例如多个复选框),则FlowLayout非常有用。

这也很容易,这意味着我们可以让一些(非程序员)业务分析师在程序员添加“引擎盖下”代码之前构建表单。

答案 15 :(得分:0)

我从VB程序员开始,然后转到C#。 我会说Netbean GUI builder仍然远离Microsoft,尤其是表单中的布局管理器。当你试图移动按钮和标签以便与你想要的东西对齐时,它会变得非常真实。那些你不想移动的图标开始随处移动。

自动生成的代码也无法在源代码中进行编辑,这使得它更加非用户友好