繁体   English   中英

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

[英]Best way to build Java Swing GUI?

直到现在,我一直在使用Netbeans Swing GUI生成功能为我的java应用程序构建GUI。

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

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

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

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

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

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

在NetBeans中导入Eclipse项目。

Eclipse Visual Editor项目

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

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

不太好的事情:

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

您也可以考虑使用嵌入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增加了一些加速开发的功能和约定。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM