【问题标题】:How to change the color of titlebar in JFrame?如何更改 JFrame 中标题栏的颜色?
【发布时间】:2011-01-29 18:59:20
【问题描述】:

我正在使用以下代码,

UIManager.put("JFrame.activeTitleBackground", Color.red);

用于更改 JFrame 中的工具栏颜色。但它没有用。

JFrame中标题栏的颜色可以改变吗?

【问题讨论】:

  • 在我看来,两个人正在处理同一个作业问题。巧合?
  • 也许不是功课,但肯定是同样的问题!
  • 等一下 - 有人想改变标题栏的颜色,但 Venkats 说的是工具栏,通常理解为菜单下方包含主要按钮的区域(“打开” 、“保存”、“复制”、“粘贴”等...)
  • 你不能改变“JFrame的工具栏”颜色或“窗口标题栏”颜色?
  • 我找到了解决方案。看我的回答

标签: java swing jframe titlebar


【解决方案1】:

是的,我找到了解决方案。我认为这可能对现在看到此内容的人有所帮助。

使用FlatLaf

其中有很多外观和感觉。你可以看到他们here

要更改标题栏背景颜色和前景色,请使用以下命令:-

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);

现在我可以做到这一点:-

【讨论】:

    【解决方案2】:

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

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

    有人可能会说:

    这是不可能的,由操作系统控制。

    如果你想访问标题栏,首先你应该可以访问本地的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

    【讨论】:

      【解决方案3】:

      对于 Windows10,在你的 main 方法中,你可以使用:

      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);
      

      【讨论】:

      • 这不起作用。在 win7 上,会显示默认的玻璃窗口标题。
      • JFrame.setDefaultLookAndFeelDecorated(true);投票赞成
      【解决方案4】:

      我认为目标是在 Win10 上实现真正的应用程序外观。由于无法真正更改窗口标题颜色,唯一的方法是自定义窗口。

      虽然安装 Metal LAF 变体的示例提供了一个很好的示例,但我发现这个问题更复杂。一个真正的 Win10 窗口必须有 win10 边框、透明边框(阴影),用户可以在其中拖动以调整大小。标题必须使用 Win10 图标,并悬停窗口按钮。

      我会 f.setUndecorated(true);并自己绘制,并设置窗口的插图,以便内容正常工作。

      (小字:虽然我们都“知道”可以使用 LAF 自定义 Swing,但在现实生活中,编写 LAF 总是比仅仅继承和绘制自己的装饰要复杂得多。作为额外的麻烦,LAF架构没有表达所有组件属性,“原生”LAF 与原生外观(例如检查 win7 下拉菜单)或感觉(下拉菜单不会滑出,win7 下拉菜单没有悬停,但按钮可以)相去甚远. 哦,更不用说缺少类似 Windows 的组件了,比如像样的 Office 2016 功能区,甚至是 Win10 的简单“切换”。真的,如果不酿造自己的组件,你不能做太多事情。)

      【讨论】:

        【解决方案5】:
        //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 );
                            }
                        }
                    );
                }
            }
        

        【讨论】:

        • 很好的例子。然而,这不仅改变了颜色,而且安装了一个新的 LAF,它使应用程序看起来回到了 90 年代。 :)
        【解决方案6】:
        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));
        

        【讨论】:

        • OP 要求更改 JFrame 颜色。答案是内部框架。
        【解决方案7】:

        这是不可能的。顶层 JFrame 由底层操作系统的外观控制。

        您可以更改InternalFrame 的颜色。

        【讨论】:

        猜你喜欢
        • 2022-10-03
        • 1970-01-01
        • 1970-01-01
        • 2021-11-26
        • 2011-10-12
        • 1970-01-01
        • 2023-03-19
        • 1970-01-01
        相关资源
        最近更新 更多