代码之家  ›  专栏  ›  技术社区  ›  asalamon74

在不修改应用程序的情况下更改Java外观

  •  3
  • asalamon74  · 技术社区  · 17 年前

    在真实世界环境中不修改程序,是否可以改变Java外观?

    我知道理论上答案是肯定的。我还创建了演示应用程序,甚至在运行时也改变了外观和感觉,并且它工作了。但是,当我创建了一个具有许多控件的实际应用程序时,lookandfeel更改并没有真正起作用:

    • 不同的外观和感觉有不同的缺陷(或奇怪的特征)。例如,其中一些为jtextfield和jformattedtextfield创建相同的样式,一些使用不同的样式。这一变化可能会让用户非常恼火。
    • 控件大小不同(使用不同的字体、不同的边框),因此有时更改后窗口看起来很难看。
    • 键盘快捷键也可以不同。

    在我的应用程序中,在lookandfeel更改之后(实际上,我尝试使用相同的lookandfeel和不同的皮肤,而不是更改lookandfeel),我总是必须修改应用程序。不是很大的修改,而是很多小的修改,这使得外观和感觉很难改变。

    我只是很不走运的样子和感觉我尝试(目前使用 skinlf )或者lookandfeel的更改不像在小型演示应用程序中那么容易?

    更新:我正在使用swing,现在无法更改为其他gui库。

    更新2 :在我看来,这个问题还不清楚。我知道如何改变自己的外表和感觉。我的问题是:是否有可能创建一个真正的应用程序,在这个应用程序中更改lookandfeel(或lookandfeel的皮肤)是一项简单的任务?目前,如果我更改lookandfeel不足以更改2或3行,我必须检查整个应用程序,并修复由lookandfeel更改引起的许多问题。Dhiller建议用更好的外观和感觉来代替Skinlf。你能给我看一个皮肤的外观和感觉在哪里换肤效果更好?

    5 回复  |  直到 17 年前
        1
  •  2
  •   reallyinsane    17 年前

    是的,有不同的方法可以在不修改应用程序代码的情况下以特定的外观启动应用程序。一个简单的方法是在应用程序启动时设置系统属性。例如,如果有一个shell脚本或批处理文件启动应用程序,只需从

    java -jar yourapp.jar
    

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

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

    还有一种方法可以使用java安装的swing.properties文件。更多细节请看 this .

        2
  •  1
  •   Daniel Hiller    17 年前

    一般来说,当用户已经习惯了平台的外观时,使用系统的外观来避免混淆用户是一个好主意。平台外观可以通过以下代码实现。

      UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName() );
    

    无论如何,看到 Changing the Look and Feel After Startup (java tutorial) ,那可能对你有帮助。

    顺便问:也许你用错了布局管理器?

        3
  •  1
  •   Dan Rosenstark    16 年前

    你试过在uimanager上设置外观吗?只是开玩笑。不过,说真的,如果你改变了外观和感觉,而应用程序看起来并不正确,那是因为你没有以正确的方式使用布局管理器。最容易理解的例子是使用空布局管理器。这种方法不会跨平台(极端的例子)。作为一种开发技术,您应该使用各种lookandfeel来完成所有的swing概念测试。否则你会被诱惑在你的应用程序中“让事情运转”,这不是重点。 Really understanding the layouts can be hard work.

    也就是说,有些东西,如键盘快捷键,总是需要特别处理。Mac上的菜单需要特殊处理。等。。。然后是应用程序打包。

    是的,Java在小型桌面演示中非常棒,并且需要工作来获得真正的应用程序完美。

        4
  •  0
  •   Stein G. Strindhaug    17 年前

    外观和感觉 应该 改变字体和行为,这是外观系统的追求:它应该表现为本地操作系统,不同的操作系统有不同的显示方式。我必须承认,“Java”的外观和感觉(称为“金属或某物”)通常比许多标准OS版本更漂亮(这可能自从我上次使用Java以来已经改变了几年)。我建议您在默认情况下使用操作系统的外观,因为如果“打开文件”菜单的行为与其他程序不同(很不幸,Windows用户习惯了不一致的图形用户界面,但Mac用户希望所有程序都能正常运行)会让人感到困惑。

        5
  •  0
  •   James Van Huis    17 年前

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

    这样,用户就不需要更改应用程序的选项,他们只需要修改自己的操作系统主题,这些更改就会自动提交给你的应用程序。