如何更改 javax.swing 中标题栏的颜色?

Posted

技术标签:

【中文标题】如何更改 javax.swing 中标题栏的颜色?【英文标题】:How to change the color of the title bar in javax.swing? 【发布时间】:2021-11-26 17:09:06 【问题描述】:

我一般使用 Visual Studio Code 或 IntelliJ 进行编码。

在那,我看到标题栏是彩色的。不仅如此,我在许多应用程序中也看到了这一点。现在我也想在我自己的应用程序中尝试一下。但是我还没有找到任何可以完成我的工作的东西。

我一般都想要这样。

jframe.setTitleBarColor(...)

但上述类型不可用。 我可以使用其他任何技术来实现这一点吗?

【问题讨论】:

您是否尝试过更改 UIManager 属性? docs.oracle.com/javase/tutorial/uiswing/lookandfeel/… 标题栏的颜色由操作系统决定。 那么有没有办法做到这一点?但是 intellij 有黑色(深色),vscode 有黑色,MS 团队有蓝色。那么为什么我不能为我的应用程序也保留它.. 我不知道Intellij是用什么语言写的。也许Intellij使用OS系统调用来控制后台。 Java/Swing API 不允许我们访问标题栏的背景。 感谢大家花时间在我身上。还有你的建议?????????☺️☺️ 【参考方案1】:

我认为这是不可能的。因为***JFrame 获取了机器操作系统的外观。

顺便说一下,这个程序将帮助您在 LAF(外观和感觉)的帮助下更改框架外观:

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRootPane;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.plaf.ColorUIResource;
import javax.swing.plaf.metal.DefaultMetalTheme;
import javax.swing.plaf.metal.MetalLookAndFeel;

public class Main 
  public static void main(final String args[]) 
    JFrame f = new JFrame();
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setSize(300, 300);
    f.setLocationRelativeTo(null);

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

    JPanel panel = new JPanel();
    panel.setBackground(java.awt.Color.white);
    f.setContentPane(panel);

    MetalLookAndFeel.setCurrentTheme(new MyDefaultMetalTheme());
    try 
      UIManager.setLookAndFeel(new MetalLookAndFeel());
     catch (Exception e) 
      e.printStackTrace();
    

    SwingUtilities.updateComponentTreeUI(f);

    f.setVisible(true);
  


class MyDefaultMetalTheme extends DefaultMetalTheme 
  public ColorUIResource getWindowTitleInactiveBackground() 
    return new ColorUIResource(java.awt.Color.orange);
  

  public ColorUIResource getWindowTitleBackground() 
    return new ColorUIResource(java.awt.Color.orange);
  

  public ColorUIResource getPrimaryControlHighlight() 
    return new ColorUIResource(java.awt.Color.orange);
  

  public ColorUIResource getPrimaryControlDarkShadow() 
    return new ColorUIResource(java.awt.Color.orange);
  

  public ColorUIResource getPrimaryControl() 
    return new ColorUIResource(java.awt.Color.orange);
  

  public ColorUIResource getControlHighlight() 
    return new ColorUIResource(java.awt.Color.orange);
  

  public ColorUIResource getControlDarkShadow() 
    return new ColorUIResource(java.awt.Color.orange);
  

  public ColorUIResource getControl() 
    return new ColorUIResource(java.awt.Color.orange);
  

【讨论】:

以上是关于如何更改 javax.swing 中标题栏的颜色?的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 Windows 窗体中标题栏中的文本?

如何更改 iPhone 应用程序中状态栏的颜色? [复制]

MFC 中标题栏上的关闭按钮

python tkinter 如何将tk界面中标题栏中的tk红色字样去掉,或者换成其他的字

Xamarin.Forms UWP 项目中标题栏和选项卡之间令人讨厌的空白

如何拖动无标题栏的MFC单文档应用程序的窗口?