自定义Java Swing GUI与Netbeans Drag和'Drop Editor

时间:2014-03-27 03:47:55

标签: java swing user-interface netbeans

手工编写Java Swing GUI而不是使用Netbeans Drag n Drop编辑器有什么好处吗?也许比如运行时?在我看来,编辑器自动创建了相当多的额外代码,但我不知道这是否对加载视图的运行时有很大影响。我目前使用编辑器的唯一原因是因为它使GUI构建快速而简单。但有些事情你只能通过手工编码才能完成吗?

还有更好的GUI框架吗?我已经看过Java FX了,但我真的想要Github桌面软件带来的那种效果。它看起来如此光滑和干净,几乎像一个webapp。虽然我确信他们在C ++中做到了。在我看来,就图形而言,Java并不多。我的一位朋友评论说,所有Java程序看起来都一样,到目前为止似乎都是真的。

我知道有类似的帖子,但坦率地说它们不是很近,例如2010年发布的Write gui programatically, or using an advanced gui editor (Java Swing)?或2010年发布的Learning Java Swing (GUI builder or not?)。如果没有什么新内容,抱歉打扰你。

3 个答案:

答案 0 :(得分:6)

  

手工编写Java Swing GUI而不是使用Netbeans Drag n Drop编辑器有什么好处吗?

有很多,但让我们从明显的......

开始
  • 不会将您锁定在单个开发环境中。这意味着您的代码可以与可能不使用Netbeans的其他人共享。当您使用基于Maven的项目时,这一点尤其重要
  • 鼓励您学习API。您可以很好地理解API的实际工作方式,并学习大量技巧,以建立流畅灵活的界面。
  • 鼓励更多地分离respobsibilty。只需简单地将组件拖到表单上即可轻松完成,这对封装或管理无效。通过将UI划分为责任区域,可以更轻松地管理组件之间的不同状态和关系。它还使代码更容易阅读,因为您不需要丢弃与您想要弄清楚的内容无关的内容。
  • 更好的可扩展性。在最好的情况下扩展组件并不容易,但使用基于表单的组件几乎不可能(或者至少一个数量级更难),
  • Netbeans表单编辑器代码......一团糟......

不要误会我的意思,我使用表单编辑器,但在我拿起表单编辑器之前,我已经用手工编写了Swing GUI十年。我喜欢用于布置最终屏幕的表单编辑器,并且倾向于使用手动编码的UI来完成到那一步的所有步骤,可以将挂钩放入孔中。

简短的回答是 - 直到您可以手动制作多级GUI,远离表单设计者 - 恕我直言。

我知道有些人认为他们是很好的学习工具,我认为相反,我认为他们可以让你发展懒惰和坏习惯,影响你未来的一切。

虽然开发环境不应该有所作为,但不是每个人都想要使用Netbeans,最好不要学习

  

还有更好的GUI框架吗?

这是一个意见问题。 Swing通过使用look and feel架构带来了皮肤概念,使您能够更改组件的外观和感觉。

JavaFX通过使用CSS

提供类似的功能

Swing也是高度可定制的,它很容易进入" paint"组件的级别,甚至可以根据需要生成自己的组件。

能够制作一个光滑的" UI不是关于工具包而是关于开发人员。将字段和其他组件放到容器上很容易,但是开发人员需要对底层API有很好的理解,并且需要一些实际上看起来很棒的人才才能让它看起来很棒#34; slick&#34 ;

漂亮并不总是功能相同。最好的用户界面是你不必考虑的,不会妨碍你工作的。如果您已经使用了几个小时,几天,几周的程序,那么您将不会看到UI看起来多么漂亮,但它能让您获得想要的效果 - 恕我直言

答案 1 :(得分:0)

手工编码完成的第一件事就是GUI Builder不能做到:动态改变接口。

例如:

如果您想构建一个涉及多个JTextField的表单,但您不确定构建GUI时会有多少个表单。该程序需要动态填充JTextField s。使用GUI Builder无法做到这一点。

此外,当您具有复杂的界面时,GroupLayout的调整大小行为可能会很麻烦且令人困惑。另一方面,当您编写复杂的界面时,手工编码的布局是很多工作(但至少它们的调整大小行为是可预测的)。

答案 2 :(得分:0)

应该使用经典的 GUI 构建器来制作 GUI 原型。一旦你确切地知道你想要什么,你应该摆脱它并清理代码(分解它,记录它,...简而言之,让它简单易读)。

<块引用>

我的一位朋友评论说,所有 Java 程序看起来都一样,目前看来是正确的。

并非绝对正确:JavaFX 外观可通过 css 进行自定义。 Swing 还可以通过 LAF 系统或覆盖 Paint* 方法进行完全自定义(我承认更耗时)。

如果您寻找简单且没有生成代码缺点的东西,我建议您查看ReflectionUI:简单的外观定制(这不是唯一的好处):enter image description here