【问题标题】:Best way to build Java Swing GUI?构建 Java Swing GUI 的最佳方式?
【发布时间】:2011-01-22 04:13:44
【问题描述】:

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

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

【问题讨论】:

    标签: java swing


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您可以继续手动编码,但使用 GroovyBuilders (link) 比使用纯 java 快得多,但您需要在应用程序中嵌入 Groovy 库..

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

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

      【讨论】:

        【解决方案3】:

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

        Importing Eclipse projects in NetBeans.

        The Eclipse Visual Editor project

        【讨论】:

          【解决方案4】:

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

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

          不是很好的东西:

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

          【讨论】:

            【解决方案5】:

            你也可以考虑Seesaw,需要嵌入Clojure

            您的 GUI 代码将如下所示:

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

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

            我的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 添加了一些加快开发速度的功能和约定。

            【讨论】:

              【解决方案6】:

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

              这没问题,但最后我想你会得出和我一样的结论,那就是最好学习布局管理器并手动编写 GUI 代码。也许看看JGoodies提供的那些,如果Sun提供的那些不适合你。

              【讨论】:

                【解决方案7】:

                另一种方法是使用一些 XML 库,例如 SwixML。要使用它需要一些代码更改,但可以很好地将您的 UI 与您的代码分开。另一方面,它只是摇摆类的包装。恕我直言,这既是优点也是缺点。它也是一个非常好的快速原型设计库,因为您(通常)可以尝试一个对话框,直到它足够为止。

                【讨论】:

                  猜你喜欢
                  • 2010-09-09
                  • 2011-09-11
                  • 2018-03-02
                  • 1970-01-01
                  • 2010-10-07
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多