【问题标题】:Getting java applications to look native on windows - how?让 Java 应用程序在 Windows 上看起来是原生的 - 如何?
【发布时间】:2010-12-08 03:10:09
【问题描述】:

是否可以使用 Java 创建在 Windows 上看起来像原生的应用程序?我不在乎解决方案是否可移植,因为我只打算针对 Windows 用户。如果这很重要,我正在使用 Scala。

抱歉,没有详细说明,但我以前从未使用过 Java,所以我什至不确定这是否可行。

【问题讨论】:

  • 在 .NET 中开发它们?抱歉无法抗拒。 ;)
  • 我同意原生控件很重要。每个成功的主流应用程序都使用了原生控件。您有两个选择 (1) 使用像 Swing 这样的小部件集,它试图伪造原生外观。这永远不会完全奏效,有时它是完全可怕的。 (2) 使用像 SWT 这样的小部件集,它是(主要是)本地小部件的 Java 包装器。这完美地工作。核心发行版中缺少像 SWT 这样的包注定了客户端上的 Java。 (是的,Java 在服务器和一些企业桌面上取得了巨大成功,我知道。)

标签: java windows user-interface scala


【解决方案1】:

是的,Java 在 Windows 上确实具有 Windows 原生的外观和感觉。看看如何改变你的外观和感觉,这应该会带你走向正确的方向。

【讨论】:

    【解决方案2】:
    try {
        // Set the Look and Feel of the application to the operating
        // system's look and feel.
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    }
    catch (ClassNotFoundException e) {
    }
    catch (InstantiationException e) {
    }
    catch (IllegalAccessException e) {
    }
    catch (UnsupportedLookAndFeelException e) {
    }
    

    这应该将外观设置为系统外观。您将在任何 GUI 代码之前执行此操作。例如,在您的 main 方法中。

    如果您想了解更多关于外观和感觉的信息,我会查看Java Tutorial on themas suggested by carwash

    【讨论】:

    • 这个答案暗示的是使用 Swing 进行控制。这是传统的 Java 智慧和官方的 Sun 包,没有人可以责怪它的建议。但是,您不会获得本机控件,并且伪造的控件不会欺骗任何人。当 Eclipse 免费向 Sun 提供 SWT 时,Sun 应该接受它。事实上,Sun 只提供不适合桌面客户端应用程序的小部件(Swing 和 AWT),因此它们几乎没有,而且似乎有点放弃了 Swing,只是让它一瘸一拐地继续前进。
    • 我使用 Swing 并且被“伪造的”控件所欺骗。说明如果使用此代码,Swing 的外观和行为与 Windows 不同。
    • 它在 Mac 上很糟糕,实际上非常糟糕。
    • @Thomas Owens,好的,Windows 上的文件选择器怎么样。它看起来不同,键盘焦点是否不同,创建目录的方式不同,不会 cd 到创建的目录,当我键入 return 而不是进入所选目录时选择文件,选择不同,不尊重系统字体配置,不遵循系统图标约定。
    • DigitalRoss:当您使用系统外观和感觉时,我看不出两者之间有什么区别。
    【解决方案3】:

    你会做这样的事情:

    UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
    

    (这当然只适用于 Windows。)结果看起来和感觉都相当原生。更多信息,例如here.

    【讨论】:

    • 这仅适用于 Windows。如果您在不同的系统上,则会抛出 UnsupportedLookAndFeelException
    • 请注意,OP 说“我只打算针对 Windows 用户”。是的,我确实省略了 try-catch 以专注于要点。 (这是一个检查异常,所以编译器会提醒任何从真实代码中忘记它的人:)
    【解决方案4】:

    请看这里:Java™ Tutorials: How to Set the Look and Feel

    try {
        // Set System L&F
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    } 
    catch (UnsupportedLookAndFeelException e) {
       // handle exception
    }
    

    【讨论】:

      【解决方案5】:

      您必须使用 Windows 外观。

      你可以在命令行指定它:

      java -Dswing.defaultlaf=com.sun.java.swing.plaf.windows.WindowsLookAndFeel MyApp
      

      或者在代码中

      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
      

      详情如下:How to set the look and feel

      【讨论】:

        【解决方案6】:

        你应该使用原生Look&Feel

        【讨论】:

          【解决方案7】:

          其他人都发布了 Swing 的东西,所以我将扮演恶魔的拥护者并提及 SWT

          SWT 是 Eclipse 基金会生产的一个小部件工具包。它是系统原生 GUI 的一个精简包装器……适用于 Windows、OSX 和各种风格的 *nix(Linux、AIX、BSD?等……)。

          这是 Sun 的 JFC/Swing 采取的相反路线,它绘制自己的组件。

          【讨论】:

          • 我很好奇在 Eclipse RCP 开发之外使用 SWT 优于 Swing 的优势是什么。我相信大多数操作系统都被 UIManager.getSystemLookAndFeelClassName() 覆盖了,那我为什么要为此引入一个外部库呢?
          • 我没有做过很多桌面应用开发,但主要优点是它使用了操作系统的原生渲染库,而不是像 Swing 那样绘制自己的组件。
          • 优秀的高级 SWT 与 Swing 在这里:developer.com/java/other/article.php/10936_2179061_2/…
          • 好吧,为什么会有人想要 Swing?它带有 Swing 特有的所有错误,并且没有每个操作系统特有的优点。当您使用 SWT 时,您可以优化使用 OS GUI 工具,并且您的应用程序不会“看起来”像它们属于 OS。它们属于操作系统。
          • 嗯,让我们看看。我可以使用 Swing,它完全试图伪造一个本地显示的小部件,但从来没有完全正确地工作,有时甚至无法正常工作。它通常看起来像本机操作系统的最后一个版本,除非它看起来像过去的两个版本。或者,我可以使用 SWT,这将是一个非常棒的想法,实际上称为 NATIVE WIDGET,它更快、更可靠,符合用户的期望,并且看起来总是与正在运行的操作系统版本完全一样,因为它是正在运行的操作系统版本。
          【解决方案8】:

          奇怪的是还没有人提到JGoodies

          JGoodies Windows 外观和感觉专注于在以下领域精确模拟 Windows 95/98/NT/ME/2000:菜单、图标、颜色、边框、字体、字体大小、插图和小部件尺寸。它支持屏幕分辨率(96dpi 与 120 dpi)来调整大小、插图和小部件尺寸。 (Source)

          【讨论】:

            猜你喜欢
            • 2017-10-08
            • 2023-04-03
            • 1970-01-01
            • 2016-05-14
            • 1970-01-01
            • 1970-01-01
            • 2012-07-21
            • 2014-10-17
            • 1970-01-01
            相关资源
            最近更新 更多