如何让Java应用程序在Windows上看起来更本地化?

11

能否使用Java创建在Windows上看起来像本地应用程序?我不关心解决方案是否可移植,因为我只计划针对Windows用户。如果有影响,我正在使用Scala。

抱歉缺乏细节,但我以前从未使用过Java,所以甚至不确定是否可能。


3
用.NET开发它们?抱歉,我忍不住开个玩笑。 ;) - dkackman
1
我同意原生控件的重要性。每个成功的主流应用程序都使用了原生控件。你有两个选择:(1)使用像Swing这样的小部件集,试图模拟出原生外观。这从来没有完全成功过,有时候甚至非常糟糕。(2)使用像SWT这样的小部件集,它是一个(大多数情况下)原生小部件的Java封装。这个方法完美地解决了问题。在核心发行版中缺少类似SWT的包是导致Java在客户端上失败的原因。(是的,我知道Java在服务器和一些企业桌面上取得了巨大的成功。) - DigitalRoss
8个回答

23
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教程, 如carwash所建议的 这里.


1
我使用Swing并且被“虚假的”控件所欺骗。如果你使用这段代码,解释一下Swing不像Windows那样看起来和行为。 - Thomas Owens
在 Mac 上它相当糟糕,实际上非常糟糕。 - AlBlue
1
@Thomas Owens,好的,那Windows上的文件选择器怎么样?它看起来不同,键盘焦点不同,创建目录的方式不同,不会CD到创建的目录,当我输入回车时选择文件而不是进入所选目录,选择方式不同,不尊重系统字体配置,并且不遵循系统图标约定。 - DigitalRoss
@ThomasOwens 实际上这两者之间有明显的区别。将 Java Swing 外观本机 Windows 外观 进行比较即可。 - Pieter
@ThomasOwens 这太美妙了;我不知道为什么,但只是将这个复制粘贴到我的主方法中就让我的情绪变得更加明亮。我仍然计划在未来的某个时候看一下 SWT,但现在没有那么紧迫了。谢谢! - Honinbo Shusaku
显示剩余2条评论

9

其他人都发布了关于Swing的内容,所以我要扮演魔鬼的代言人并提到SWT

SWT是由Eclipse基金会开发的小部件工具包。它是系统原生GUI的薄包装器...适用于Windows、OSX和各种*nix(Linux、AIX、BSD等)。

这与Sun的JFC/Swing走的相反路线,后者绘制自己的组件。


3
我并没有做过太多桌面应用程序开发,但是主要优点在于它使用操作系统的本地渲染库而不是像Swing那样自己绘制组件。 - Powerlord
2
这里有一篇关于高级SWT和Swing的好文章:http://www.developer.com/java/other/article.php/10936_2179061_2/Swing-and-SWT-A-Tale-of-Two-Java-GUI-Libraries.htm - Smalltown2k
1
那么,为什么有人想要使用Swing呢?它带有所有特定于Swing的错误,却没有每个操作系统特定的优点。当您使用SWT时,可以最大程度地利用操作系统GUI设施,并且您的应用程序不会“看起来”像属于操作系统。它们是属于操作系统的。 - Daniel C. Sobral
1
嗯,让我看看。我可以使用Swing,它完全试图模拟本地外观小部件,但从来没有完全正确地工作,有时甚至不接近正确。它通常看起来像本地操作系统的最后一个版本,除非它看起来像过去的两个版本。或者,我可以使用SWT,令人惊叹的是,它实际上会调用本机小部件,这更快,更可靠,符合用户期望,并且始终看起来完全像运行的操作系统版本,因为它就是运行的操作系统版本。 - DigitalRoss
尽管这个答案有些陈旧,但是现在Java已经拥有了JavaFX库,它类似于Swing 2.0。 - Powerlord
显示剩余2条评论

4

请查看这里:Java™教程:如何设置外观和感觉

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

2

你必须使用Windows的外观。

你可以在命令行中指定它:

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

或者在代码中

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

这里是详细信息:如何设置外观和感觉

2
很奇怪还没有人提到JGoodies

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


0
你可以这样做:
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");

(当然,这仅适用于Windows。)结果看起来和感觉相当本地化。更多信息请参见此处


这只能在Windows上运行。如果你在其他系统上,会抛出一个“UnsupportedLookAndFeelException”异常。 - Thomas Owens
请注意,OP说“我只计划针对Windows用户”,是的,我省略了try-catch以便专注于主要问题。(这是一个已检查的异常,因此编译器会提醒任何忘记它的真实代码中的人 :)) - Jonik

0

是的,Java在Windows上确实有一个本地外观可用。查找如何更改您的外观和感觉,这应该会带您走向正确的方向。


0

你应该使用本地化的外观


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接