簡體   English   中英

如何更改 JFrame 中標題欄的顏色?

[英]how can i change the color of titlebar in JFrame?

我正在使用以下代碼,

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

用於更改 JFrame 中的工具欄顏色。 但它沒有用。

是否可以更改 JFrame 中標題欄的顏色?

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

這是不可能的。 頂層 JFrame 由底層操作系統的外觀控制。

您可以更改InternalFrame的顏色。

對於 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的一個簡單“切換”。真的,不醞釀自己的組件,你做不了太多。)

我知道我有點晚了,但這可能會幫助其他人:

我搜索了整個互聯網以找到改變我的基於 Swing 的應用程序的整個主題的方法。 然后我找到了一篇關於這樣做的文章:

有人可能會說:

它不可能並且由操作系統控制。

如果要訪問標題欄,首先應該具有訪問本機 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));

你不能改變它是由 OP 控制的。

是的,我找到了解決方案。 我認為這對現在看到這個的人可能會有所幫助。

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

現在我可以做到這一點:-

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM