在不修改应用程序的情况下更改java lookandfeel

时间:2008-11-18 10:24:16

标签: java swing look-and-feel

是否可以在不修改实际环境中的程序的情况下更改java lookandfeel?

我知道理论上答案是肯定的。我还创建了演示应用程序,甚至在运行时也改变了外观和效果。但是当我创建一个包含大量控件的真实应用程序时,lookandfeel变更并没有真正起作用:

  • 不同的外观和感觉有不同的错误(或奇怪的功能)。例如,其中一些为JTextField和JFormattedTextField创建了相同的样式,其中一些使用不同的样式。这种变化对用户来说非常烦人。
  • 控件尺寸不一样(使用不同的字体,不同的边框),因此有时候更改后窗口看起来很难看。
  • 键盘快捷键也可以不同。
  • ...

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

我对我尝试的外观和感觉非常不走运(目前正在使用skinlf),或者在小型演示应用程序中,外观和感觉变化并不那么容易?

更新:我正在使用Swing并且现在无法更改到其他GUI库。

UPDATE2 :在我看来问题不明确。我知道如何改变外观和感觉。我的问题是:是否有可能创建一个真正的应用程序,其中改变lookandfeel(或lookandfeel的皮肤)是一项容易的任务?目前,如果我改变外观和感觉,仅仅改变2或3行是不够的,我必须检查整个应用程序并解决由于外观和感觉变化引起的相当多的问题。 dhiller建议用更好的外观和感觉替换皮肤。你能告诉我皮肤更换效果更好吗?

5 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

一般来说,IMO最好使用系统的外观和感觉,以避免在用户习惯平台外观时引入新的外观而使用户感到困惑。平台外观可以通过以下代码实现。

  UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName() );

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

BTW:也许你使用错误的布局管理器?

答案 2 :(得分:1)

您是否尝试过在UIManager上设置外观?开玩笑。但是,严肃地说,如果你改变了外观并且应用看起来不正确,那是因为你没有以正确的方式使用LayoutManagers。最容易实现的例子是使用null布局管理器。这种方法不是跨平台的(极端例子)。作为一种开发技术,您应该使用各种lookAndFeel进行所有Swing概念测试。否则你会在你的应用程序中“让事情变得有效”,这不是重点。 Really understanding the layouts can be hard work.

也就是说,像键盘快捷键这样的东西总是需要特殊处理。 Mac上的菜单需要特殊处理。等等......然后是应用包装。

所以是的,Java在小型桌面演示中非常出色,并且需要努力才能让真正的应用变得完美。

答案 3 :(得分:0)

外观应该改变字体和行为,这是外观和感觉系统的本质:它应该像本机操作系统一样,不同的操作系统有不同的显示方式。我必须承认,“Java”外观(称为金属或其他东西)通常比许多标准操作系统版本更漂亮(自从我上次使用Java以来​​,这可能已经改变了几年)。我建议你默认使用操作系统的外观和感觉,因为如果打开文件菜单不像其他所有程序那样表现令人困惑(不幸的是,Windows用户习惯使用不一致的gui,但Mac用户期望所有程序表现得很好。

答案 4 :(得分:0)

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

这样,用户无需更改应用程序的选项,他们只需修改操作系统主题,更改就会自动传播到您的应用程序。