2008-11-18 45 views
3

是否有可能改变的Java LookAndFeel都没有在真实世界环境修改程序?更改Java的LookAndFeel无需修改应用程序

我知道,理论上的答案是肯定的。我还创建了演示应用程序,即使在运行时也改变了外观,并且工作正常。但是,当我创建了一个真正的应用程序有很多控制的LookAndFeel的变化并没有真正的工作:

  • 不同lookandfeels有不同的bug(或奇怪的功能)。例如,其中一些为JTextField和JFormattedTextField创建了相同的样式,其中一些使用了不同的样式。这种改变对用户来说可能很烦人。
  • 控制大小是不一样的(使用不同的字体,不同的边界),所以有时窗口更改后看起来丑陋。
  • 键盘快捷键也可以不同。
  • ...

LookAndFeel中的变化后,我的应用程序(实际上不是改变我使用不同的皮肤相同的LookAndFeel尝试的LookAndFeel)我总是要修改应用程序。不是一个很大的修改,但是很多小修改使得外观和感觉都变得很困难。

我是不是很喜欢我尝试过的lookfefeels(目前使用skinlf),或者在小演示程序中,lookandfeel的改变并不那么容易?

UPDATE:我使用Swing和更改为其他GUI库是不可能的,我现在。

UPDATE2:在我看来,问题并不清楚。我知道如何改变外观。我的问题是:是否有可能创建一个真正的应用程序来改变lookfefeel(或lookandfeel的皮肤)是一件容易的事情?目前,如果我改变外观并不足以改变2或3行,我必须检查整个应用程序并修复由外观和外观变化引起的相当多问题。 dhiller建议用更好的外观替换skinkin。你能告诉我一个皮肤更换效果更好的皮肤外观吗?

回答

0

外观和感觉应该更改字体和行为,这是外观和感觉系统的箴言:它应该像本机操作系统一样运行,不同的操作系统有不同的显示方式。我必须承认,“Java”的外观和感觉(称为金属或某种东西)通常比许多标准操作系统版本更加漂亮(这可能改变了自我上次使用Java以来​​的几年)。我建议你默认使用操作系统的外观和感觉,因为如果打开文件菜单的行为不像每个其他程序那样运行(windows用户不幸用于不一致的GUI,但Mac用户期望所有程序行为正常)。

+0

当然,我想使用一个lookandfeel,其行为像本地操作系统(在我的情况下,Windows)。但是对于同一个操作系统来说,有很多外观和感觉。假设我的用户厌倦了当前的蓝色设计,并且喜欢带有不同图标的绿色设计。 – asalamon74 2008-11-18 13:51:43

+0

然后您可以添加一个选项来更改默认值。窗户LAF是蓝色的?上次我检查它是丑陋的灰色赢得2000年的风格,如果它现在实际上支持(eh.2)主题的Windows用户可以改变他的Windows主题。为什么每个节目都有自己的主题? – 2008-11-18 14:21:17

2

是的,有不同的方式与一定要看启动应用程序和下跌而无需修改应用程序的代码。一个简单的方法是在应用程序启动时设置系统属性。例如。如果你有一个shell脚本或批处理文件启动应用程序,你刚刚从

java -jar yourapp.jar 

更改命令以

java -Dswing.defaultlaf=com.sun.java.swing.plaf.gtk.GTKLookAndFeel -jar yourapp.jar 

-Dswing.defaultlaf = com.sun.java.swing.plaf.gtk。 GTKLookAndFeel将设置GTKLookAndFeel使用的默认外观。

还有一种方法是使用Java安装的swing.properties文件。欲了解更多详情,请看this

+0

这不回答我的问题。你能不能读完我的整个问题。 – asalamon74 2008-11-18 13:45:12

1

通常,使用系统外观以避免在用户已经习惯了平台外观时引入新外观而使用户感到困惑,这是一个好主意。平台的外观和感觉可以通过以下代码来实现。

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 

无论如何,请参阅Changing the Look and Feel After Startup (java tutorial),这可能会帮助你。

顺便说一句:也许你正在使用错误的布局管理器?

0

如果您的最终目标是每个目标操作系统的本机外观,您可以查看SWT。这将提供操作系统原生的小部件,这些小部件随着操作系统的外观和感觉而改变。

这样,用户不需要更改应用程序的选项,他们所需要做的就是修改其操作系统主题,并且更改将自动传播到您的应用程序。

1

您是否尝试过设置UIManager的外观?开玩笑。但是,严重的是,如果您改变外观和感觉,并且该应用看起来不正确,那是因为您没有以正确的方式使用LayoutManagers。最简单的例子是使用null布局管理器。这种方法不会是跨平台的(极端例子)。作为一种开发技术,您应该使用各种lookAndFeels进行所有Swing概念测试。否则,你会被诱惑在你的应用中“做事情”,这不是重点。 Really understanding the layouts can be hard work.

也就是说,键盘快捷键等一些事情总是需要特殊的处理。 Mac上的菜单需要特殊处理。等......然后就有应用程序打包了。

所以是的,Java在小型桌面演示中很棒,并且需要工作才能获得真正的应用程序。