构建Java Swing GUI的最佳方法是什么?

到目前为止,我一直在使用Netbeans Swing GUI生成function为我的java应用程序构建GUI。

现在我已经开始将Eclipse用于我的项目并且已经删除了Netbeans。 因此,除了手动编写GUI的所有代码之外,还有哪些方法可以快速且以更好的方式构建GUI。

您可以手动编码,但使用GroovyBuilders( 链接 )比使用普通java要快得多,但您需要在应用程序中嵌入Groovy lib。

否则就存在一个名为MIG Layout的布局管理器,它运行得很好(它比普通的gui构建更实用)..

我还使用了一个名为JVider的工具来构建一些简单的应用程序,但是使用可视化方法你会得到同样令人讨厌的东西:保持接口和后端同步,同时考虑视觉对象和变量名称之间的“绑定”。

自从过去2年以来,我一直在为eclipse IDE使用Visual EditorWindows Builder插件。 我发现Windows Builder非常完美! 它为您提供非常干净和高度可读的代码。 所以我更喜欢使用Windows Builder,这样你就可以做任何你在微软Visual Studio中找到的所有function“ 拖放和所有 ”。

我遇到了类似的情况,但发现NetBeans实际上有一个漂亮的“导入eclipse项目”function。 因此,我最终在NetBeans中进行可视化GUI设计工作,但使用Eclipse进行编码,调试和分析。 Netbeans为您的项目添加了一些文件,您可能想要在NetBeans中调整自动代码生成模板,但这是一个适合我的解决方案。 当然,Eclipse还附带了自己的可视化GUI构建器,但我更喜欢NetBeans用于可视化GUI设计和开发。

在NetBeans中导入Eclipse项目。

Eclipse Visual Editor项目

Luhar提到的Eclipse Visual Editor项目相当不错,它可以使用任何bean样式的swing或awt组件,并支持编辑已有的类,因为它依赖于reflection而不是单独的元数据。
此外,对于如何操作生成的代码没有任何限制,因为VEP将在修改源文件时尽力保留它。
如果你想将它用于更复杂的组件,我会推荐一个相当高端的系统,因为它非常耗费资源。
关于VEP的好消息:

  • 支持Swing / AWT / SWT
  • 使用源代码和reflection不需要额外的数据
  • 可以与现有组件一起使用(见上文)
  • 可以直接编辑代码或在预览窗口中编辑
  • 生成干净的代码,而不会破坏现有代码

不太好的事情:

  • 慢,不要忘记在直接编辑源代码时暂停预览function,它会尝试几乎不断刷新。
  • 在代码中出现编译错误时,请勿使用“预览”窗口,对预览所做的任何更改都可能导致源中的编辑混乱。 在再次使用之前,您必须清除任何编译错误。

您也可以考虑使用嵌入Clojure的 Seesaw 。

你的GUI代码看起来像是这样的:

(defn -main [& args] (invoke-later (-> (frame :title "Hello", :content "Hi there", :on-close :exit) pack! show!))) 

其中“Hi there”会自动“转换”为JLabel,但您可以将任何Swing组件放入:content

这个来自我的seesaw-buttons示例项目的更复杂的例子:

 (ns seesaw-buttons.core (:use seesaw.core)) (defn -main [& args] (invoke-later (let [open-action (action :handler (fn [e] (alert "I should open a new something.")) :name "Open ..." :key "menu O" :tip "Open a new something something.") exit-action (action :handler (fn [e] (.dispose (to-frame e))) :name "Exit" :tip "Close this window")] (-> (frame :title "Hello", :content (border-panel :north (toolbar :items [open-action exit-action]) :center "More content here..."), :on-close :exit) pack! show!)))) 

Seesaw和Clojure的优点是消除了许多样板代码,Seesaw增加了一些加速开发的function和约定。

我所做的经验是,如果你想能够一起点击你的应用程序,Netbeans就像构建Swing GUI一样好。 然而,就像你一样,我喜欢在eclipse中编写比Netbeans更多的编码(个人偏好,Netbeans仍然是伟大的编辑器imo)。 有一段时间我最终在Netbeans中创建了我的GUI,然后只是将项目导入到eclipse中。

这样做没问题,但最后我想你会得出我所做的相同结论,最好是学习布局管理器并手工编写GUI。 也许看一下JGoodies提供的那些,如果Sun提供的那些不是为你做的。

另一种方法是使用一些XML库,如SwixML 。 要使用它需要一些代码更改,但很好地将您的UI与您的代码分开。 另一方面,它只是挥杆类的包装。 这是恕我直言,无论是优势还是劣势。 它也是一个非常好的快速原型库,因为你可以(通常)尝试对话,直到它足够。