无法更改标题栏和 JMenuBar 的颜色

Cannot change color of Titlebar and JMenuBar

我尝试修改 Windows 标题栏的颜色或 JMenuBar 的颜色。我通过 UIManager.put( "XXXXXXX", Color.GREEN) 将每个外观键设置为 Color.GREEN,其中 XXXXX 只是一个占位符。大多数元素会改变,但有些不会。例如,请参见图片。

红色的是我的问题(其他的也很奇怪但是没关系)。

使用 netbeans gui builder 构建 GUI (JFrame ->JMenuBar)

也许我应该提一下:

  1. 使用 LAF“Windows”
  2. 二手 OS: Windows 10

解决方案更新 - 临时 好吧,我现在有一些工作(不能测试太多稍后会做)。 我必须在更改为 Windows LAF 之前创建 JFrame,这会导致像 @bhavna garg 和 @Ganesh Patel 这样的框架,然后我将 LAF 更改为 windows,所有其他元素看起来都像我想要的那样。颜色不对,我认为这不是一个可行的解决方案,但我稍后会检查

See for titlebar See This image要设置标题栏的颜色,请使用:

  frame.getRootPane().setWindowDecorationStyle(5);

5 是常量,它将为您的菜单栏提供绿色。您可以使用 1 到 8 之间的数字。示例:8 将呈现橙色。

要设置菜单栏的颜色,请使用:

 menubar.setBackground(Color.RED);
 menubar.setOpaque(true);

我希望您可以使用金属外观,我可以在其中更改标题栏的颜色以及更改菜单栏和菜单的颜色。

这是代码:

import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JRootPane;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.plaf.ColorUIResource;
import javax.swing.plaf.metal.DefaultMetalTheme;
import javax.swing.plaf.metal.MetalLookAndFeel;

public class MyLookAndFeel {
  JFrame frame;
  JMenuBar menubar;
  MetalLookAndFeel metal;
  JMenu menu;

  public MyLookAndFeel() {
    metal = new MetalLookAndFeel();
    metal.setCurrentTheme(new MetalTheme());
    try {
      UIManager.setLookAndFeel(metal);
    }
    catch(UnsupportedLookAndFeelException e) {
      e.printStackTrace();
    }
    frame = new JFrame("Hello");

    frame.setUndecorated(true);
    frame.getRootPane().setWindowDecorationStyle(JRootPane.FRAME);

    menubar = new JMenuBar();
    menubar.setOpaque(true);
    menubar.setBackground(Color.green);

    menu = new JMenu("File");
    menubar.add(menu);
    frame.setJMenuBar(menubar);

    frame.setVisible(true);
    frame.setSize(100,100);

  }
  public class MetalTheme extends DefaultMetalTheme {

    @Override
    public ColorUIResource getMenuBackground() {
      return new ColorUIResource(Color.GREEN);
    }
    public ColorUIResource getWindowTitleBackground() {
        return new ColorUIResource(java.awt.Color.green);
    }
  }
  public static void main(String args[]) {
    new MyLookAndFeel();
  }
}

可以看到框架

我切换到 JavaFX。最初的概念对我不起作用,但感谢您的帮助。

我知道我来晚了,但这可能对其他人有帮助:

我搜索了整个互联网以找到更改 swing-based 应用程序整个主题的方法。然后我找到了一篇关于这样做的文章:

有人可能会说:

Its not possible. The top level JFrame is controlled by the look & feel of the underlying OS.

如果要访问标题栏,首先,您应该有权访问本机 java 引擎库。还好有办法:

第一步: JNA 提供 Java 程序轻松访问本机共享库,除了 Java 代码外无需编写任何内容。 所以你可以使用这个存储库来访问它们:JNA.

Scroll down to readme and find the downloadable library.

根据您使用的平台,某些元素可能会延迟。因此,请务必使用 jna-platform-5.8.0.jar 让您的应用兼容任何平台。

第二步:如果您不知道如何使用 JNA 库,那么您可以以此为例:example

无论如何,这可以解决您关于标题栏颜色的问题 ;)

主要文章:External Link

Help me improve my writing in English by telling me my mistakes :D