【问题标题】:Changing java lookandfeel without modifying the application在不修改应用程序的情况下更改 Java 外观
【发布时间】:2008-11-18 10:24:15
【问题描述】:

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

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

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

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

我只是对我尝试的外观(目前使用skinlf)非常不走运,还是外观更改不像在小型演示应用程序中那么容易?

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

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

【问题讨论】:

    标签: java swing look-and-feel


    【解决方案1】:

    是的,有多种方法可以在不修改应用程序代码的情况下以某种外观启动您的应用程序。一种简单的方法是在应用程序启动时设置系统属性。例如。如果你有一个 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

    【讨论】:

    • 这不能回答我的问题。请您阅读我的整个问题。
    【解决方案2】:

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

      UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName() );
    

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

    顺便说一句:也许您使用了错误的布局管理器?

    【讨论】:

      【解决方案3】:

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

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

      是的,Java 非常适合小型桌面演示,并且需要努力才能使真正的应用程序完美。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 当然,我想使用表现得像本机操作系统(在我的例子中是 Windows)的外观。但是同一个操作系统有很多外观。假设我的用户对当前的蓝色设计感到厌烦,而更喜欢带有不同图标的绿色设计。
        • 然后您可以添加一个选项来更改默认值。窗户 LAF 是蓝色的吗?上次我检查它是丑陋的灰色 win 2000 风格,如果它现在真的支持 (eh. 2) windows 主题,用户可以更改他的 windows 主题。为什么每个程序都应该有自己的主题?
        【解决方案5】:

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

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

        【讨论】:

        • 糟糕,我忘了提到我正在使用 Swing,而现在改用 SWT(虽然听起来很有趣)对我来说不是一个选择。我将编辑我的问题以显示此信息。
        猜你喜欢
        • 1970-01-01
        • 2021-03-12
        • 1970-01-01
        • 1970-01-01
        • 2016-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多