如何更改JFrame中标题栏的颜色?

时间:2010-03-20 12:22:45

标签: java swing jframe titlebar

我使用以下代码,

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

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

是否可以更改JFrame中标题栏的颜色?

6 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:3)

不可能。顶级JFrame由外观和外观控制。对底层操作系统的感觉。

您可以更改InternalFrame的颜色。

答案 2 :(得分: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);

答案 3 :(得分:1)

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

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

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

(小字体:虽然我们都知道"知道"可以用LAF定制Swing,在现实生活中写一个LAF总是比继承和绘制你自己的装饰复杂得多。更麻烦的是,LAF架构并没有表达所有的组件属性,并且" native" LAF与本机外观(例如检查win7下拉列表)或感觉(下拉列表不会滑动)相距甚远out,win7下拉列表没有悬停,但按钮确实如此。哦,更不用说缺少类似Windows的组件,例如体面的Office 2016功能区,甚至是Win10的简单"切换"真的。 ,如果不酿造自己的组件,就不能做太多。)

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

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

有人可能会说:

<块引用>

它不可能并且由操作系统控制。

如果你想访问标题栏,首先你应该有访问原生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