【问题标题】:Why is my look and feel look very weird when I launch my program?为什么我启动程序时的外观和感觉看起来很奇怪?
【发布时间】:2018-10-22 23:43:47
【问题描述】:

我有两个班级,Game.javaGameOver.java

Game.java
GameOver.java

这部分代码在我启动程序时不起作用:

try {
        UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
    } catch (Throwable e) {
        e.printStackTrace();
    }

外观不会第一次设置,尽管当GameOver 类运行并按下重试时,外观确实设置。我试图追查这个问题,但我不知道是什么原因造成的。我的代码有什么问题,如何解决?

【问题讨论】:

  • 代码应该发布在论坛上,而不是其他网站上。此外,在将来,发布一个正确的minimal reproducible example 来演示该问题。你的问题是关于 LAF 不起作用。因此,与重新创建 GUI 相关的代码与问题无关。发布代码时简化问题。因此,在开始测试整个应用程序之前,首先让代码与一些组件一起工作。
  • UIManager.setLookAndFeel("..WindowsLookAndFeel"); 不要对 String 进行硬编码。 Windows PLAF 将仅在 Windows 上可用(Linux 和 OS X 用户通常对此表示感谢)。而是使用UIManager.getSystemLookAndFeelClassName() ..
  • @AndrewThompson 谢谢!这是一个很好的建议,虽然它没有解决问题。
  • 顺便说一句,我使用的是 WindowBuilder,所以这就是字符串被硬编码的原因。

标签: java swing look-and-feel


【解决方案1】:

这部分代码在我启动程序时不起作用。

我的猜测是问题在于您没有在事件调度线程 (EDT) 上执行代码。

您的部分代码在常规线程上执行,而创建组件的部分在 EDT 上执行。我猜想在执行 GUI 创建代码时没有设置 LAF。

所有与 GUI 相关的代码都应在 EDT 上执行。

【讨论】:

  • 我该如何解决这个问题?不知道在哪里改代码
  • @AwesomeMaster 课堂上的第一条语句是设置 LAF。您的第二个语句是为您的 invokeLater() 创建 Runnable 对象。 LAF 应添加到 Runnable 代码中。阅读 Concurrency 上的 Swing 教程,了解有关 EDT 的更多信息。
  • 谢谢!这解决了它!
【解决方案2】:

你在一个类的静态初始化器中做的太多了。有一个应用程序类(您在其中设置 LAF)和另一个由应用程序类创建和显示的 JFrame 类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-16
    • 2011-03-15
    • 2011-02-12
    • 1970-01-01
    相关资源
    最近更新 更多