我正在使用以下代码,
UIManager.put("JFrame.activeTitleBackground", Color.red);
用于更改 JFrame 中的工具栏颜色。但它没有用。
是否可以更改 JFrame 中标题栏的颜色?
这是不可能的。顶层 JFrame 由底层操作系统的外观控制。
您可以更改InternalFrame.
//source : javax/swing/plaf/metal/MetalTitlePane.java
    import javax.swing.*;
    import javax.swing.plaf.*;
    import javax.swing.plaf.metal.*;
    public class TitleColor
    {
        public static void main_helper (String args[])
        {
            JFrame f = new JFrame ();
            f.setDefaultCloseOperation 
            (
                JFrame.DISPOSE_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 );
            DefaultMetalTheme z =
            new DefaultMetalTheme ()
            {
                //inactive title color
                public ColorUIResource
                getWindowTitleInactiveBackground() 
                { 
                    return new ColorUIResource 
                        (java.awt.Color.orange); 
                }
                //active title color
                public ColorUIResource
                getWindowTitleBackground() 
                { 
                    return new ColorUIResource 
                        (java.awt.Color.orange); 
                }
                //start ActiveBumps
                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); 
                }
                //end ActiveBumps
                //start inActiveBumps
                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); 
                }
                //end inActiveBumps
            };
            MetalLookAndFeel.setCurrentTheme
            (
                z
            );
            try
            {
                UIManager.setLookAndFeel
                (
                    new MetalLookAndFeel ()
                );
            }
            catch (Exception e)
            {
                e.printStackTrace ();
            }   
            SwingUtilities.updateComponentTreeUI (f);
            f.setVisible (true);
        }
        public static void main (final String args[])
        {
            SwingUtilities.invokeLater
            (
                new Runnable ()
                {
                    public void run ()
                    {
                        main_helper ( args );
                    }
                }
            );
        }
    }
对于 Windows10,在您的主要方法中,您可以使用:
UIDefaults uiDefaults = UIManager.getDefaults();
uiDefaults.put("activeCaption", new javax.swing.plaf.ColorUIResource(Color.gray));
uiDefaults.put("activeCaptionText", new javax.swing.plaf.ColorUIResource(Color.white));
JFrame.setDefaultLookAndFeelDecorated(true);
我认为目标是在 Win10 上实现真正的应用程序外观。由于无法真正更改窗口标题颜色,唯一的方法是自定义窗口。
尽管安装 Metal LAF 变体的示例提供了一个很好的示例,但我发现这个问题更复杂。一个真正的 Win10 窗口必须有 win10 边框、透明边框(阴影),用户可以在其中拖动以调整大小。标题必须使用 Win10 图标,并悬停窗口按钮。
我会 f.setUndecorated(true); 并自己绘制,并设置窗口的插图,以便内容正常工作。
(小字:虽然我们都“知道”可以使用 LAF 自定义 Swing,但在现实生活中,编写 LAF 总是比子类化和绘制自己的装饰要复杂得多。作为额外的麻烦,LAF 架构不表达所有组件属性,“原生”LAF 与原生外观(例如检查 win7 下拉菜单)或感觉(下拉菜单不会滑出,win7 下拉菜单没有悬停,但按钮可以)相去甚远。哦,更不用说缺少类似 Windows 的组件,例如像样的 Office 2016 功能区,甚至是 Win10 的简单“切换”。真的,如果不酿造自己的组件,你不能做太多事情。)
我知道我有点晚了,但这可能对其他人有所帮助:
我搜索了整个互联网以找到更改基于摇摆的应用程序的整个主题的方法。然后我找到了一篇关于这样做的文章:
有人可能会说:
它不可能并且由操作系统控制。
如果你想访问标题栏,首先你应该可以访问本地的java引擎库。幸运的是,有一种方法:
第一步: JNA 使 Java 程序可以轻松访问本机共享库,而无需编写除 Java 代码之外的任何内容。因此,您可以使用此存储库来访问它们:JNA。
Scroll down to readme and find the downloadable library.
根据您使用的平台,某些元素可能会有所延迟。因此,请确保您使用jna-platform-5.8.0.jar使您的应用程序与任何平台兼容。
第二步:如果您不知道如何使用 JNA 库,那么您可以以此为例:example
无论如何,这可以解决您关于标题栏颜色的问题;)
主条目:外部链接
Help me improve my writing in English by telling me my mistakes :D
UIManager.put("InternalFrame.activeTitleBackground", new ColorUIResource(Color.black ));
UIManager.put("InternalFrame.activeTitleForeground", new ColorUIResource(Color.WHITE));
UIManager.put("InternalFrame.titleFont", new Font("Dialog", Font.PLAIN, 11));
是的,我找到了解决方案。我认为这可能对现在看到此内容的人有所帮助。
利用FlatLaf
在那里有很多外观和感觉。你可以在这里看到它们。
要更改标题栏背景颜色和前景色,请使用以下命令:-
FlatLightLaf.setup(); //setting the look and feel
JFrame.setDefaultLookAndFeelDecorated(true);
frame.getRootPane().putClientProperty("JRootPane.titleBarBackground", new Color(23,180,252));
       frame.getRootPane().putClientProperty("JRootPane.titleBarForeground", Color.white);
现在我可以做到这一点: -