【问题标题】:Setting the Color of the Title Bar with Netbeans Platform Application (FlatLaF)使用 Netbeans 平台应用程序 (FlatLaF) 设置标题栏的颜色
【发布时间】:2021-10-18 07:45:18
【问题描述】:

我目前正在开发一个使用 com.formdev.flatlaf.FlatLightLaf 作为外观的 Netbeans 平台应用程序。该应用程序使用 Java 11 并在 Windows 10 下运行。

我现在想更改 TitlePane 的颜色。可以通过更改 UIManager 中的属性来全局更改整个应用程序的特定元素(如 jPanel 等)的颜色。 所以我尝试从UIManager.getDefaults()UIManager.getLookAndFeelDefaults() 更改许多背景色特定设置。例如,将 TitlePane.background 属性更改为 UIManager.put("TitlePane.background", new ColorUIResource(100, 100, 100));。 然而,我改变的几十个属性都没有工作。

在使用 com.formdev.flatlaf.FlatDarkLaf(暗模式)时,TitlePane 的颜色发生了变化。

如果有人知道需要更改哪些属性才能更改 Netbeans 平台应用程序中标题窗格的颜色,我将非常感谢任何形式的帮助!

【问题讨论】:

  • 已经这样做了。 “不可能”的公认答案是错误的。设置activeCaptionactiveTitleBackground 对我没有任何帮助。而且我认为,当适当的代码已经存在并被 Netbeans 中包含的 LaF 使用时,编写对 titleBar 的访问的代码是多余的。所以我认为这个问题可能取决于我使用 Netbeans 平台和/或 FlatLaF。
  • 你检查过 FlatLaf 的来源:github.com/JFormDesigner/FlatLaf/blob/main/flatlaf-core/src/… 吗?
  • 您也应该看看 Netbeans 源代码 (github.com/apache/netbeans/tree/12.4/platform/…),因为 FlatLaf 是预先集成的,我认为 Netbeans 有自己的特定设置。
  • 感谢您的提示!在 FlatLaf 源中,titlePane 的颜色是通过“TitlePane.background”设置的。可悲的是,尽管这在这里不起作用。我还检查了 Netbeans (FlatLaF) 代码,在 FlatLFCustoms 类中,updateUnifiedBackground 方法似乎通过检查“Panel.background”并将该颜色设置为统一背景来做到这一点。尽管此选项总体上改变了很多外观(所有 jPanels 背景颜色都受到影响),但 TitleBar 本身保持不变。

标签: java user-interface netbeans-platform uimanager flatlaf


【解决方案1】:

我相信我找到了罪魁祸首。 在最近发布的 Netbeans 中,引入了为 FlatLaF 设置“TitlePane.unifiedBackground”的选项。 但是在设置UIManager.put("TitlePane.unifiedBackground", true); 时会出现上述问题,我实际上无法设置 TitlePane 的背景颜色。

从Netbeans源代码中FlatLFCustoms(https://github.com/apache/netbeans/blob/12.4/platform/o.n.swing.laf.flatlaf/src/org/netbeans/swing/laf/flatlaf/FlatLFCustoms.java)类的方法updateUnifiedBackground()可以看出,titlePane的颜色应该通过调整属性“Panel.background”来设置。 但是,这似乎无法正常工作。

一种解决方法似乎是设置UIManager.put("TitlePane.unifiedBackground", false);,然后将“TitlePane.background”设置为所需的颜色。 如果您仍然想要统一的 TitlePane 外观,您可以通过将“Panel.background”和“Toolbar.background”设置为相同的颜色来实现。

实际上,这看起来与为 TitlePane 设置统一背景相同,只是现在您可以更改颜色。 希望这可以帮助遇到同样问题的人。

【讨论】:

    【解决方案2】:

    使用此代码:-

    JFrame.setDefaultLookAndFeelDecorated(true);
    frame.getRootPane().putClientProperty("JRootPane.titleBarBackground", new Color(23,180,252));
           frame.getRootPane().putClientProperty("JRootPane.titleBarForeground", Color.white);
    

    【讨论】:

    • 据我所知,这需要访问 jFrame 实例。然而,这并没有在 Netbeans RCP 中给出,或者至少这不是人们应该如何处理 Netbeans 平台的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多