9

私は次のコードを使用しています、

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

JFrameのツールバーの色を変更します。しかし、それはうまくいきませんでした。

JFrameでタイトルバーの色を変更することはできますか?

4

7 に答える 7

6

不可能です。トップレベルのJFrameは、基盤となるOSのルックアンドフィールによって制御されます。

の色を変更できInternalFrameます。

于 2010-03-25T03:08:13.533 に答える
6
//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 );
                    }
                }
            );
        }
    }
于 2013-01-04T21:38:30.430 に答える
3

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);
于 2018-02-27T23:37:08.660 に答える
1

目標は、Win10で実際のアプリケーションの外観を実現することだと思います。ウィンドウのタイトルの色を実際に変更することはできないため、ウィンドウをカスタマイズするしかありません。

Metal LAFのバリアントをインストールする例は良い例ですが、この問題はもっと複雑であることがわかりました。実際のWin10ウィンドウには、win10の境界線、ユーザーがドラッグしてサイズ変更できる透明な境界線(影)が必要です。タイトルはWin10アイコンを使用する必要があり、ウィンドウボタンにはホバーします。

私はf.setUndecorated(true); 自分で描画し、コンテンツが通常どおりに機能するようにウィンドウのはめ込みを設定します。

(小さな印刷物:LAFを使用してSwingをカスタマイズできることは誰もが知っていますが、実際の生活では、LAFを作成することは、サブクラス化して独自の装飾を描画することよりも常にはるかに複雑です。余分な手間として、LAFアーキテクチャはそうではありません。すべてのコンポーネントプロパティを表現し、「ネイティブ」LAFはネイティブの外観(たとえば、win7ドロップダウンを確認)または感触(ドロップダウンはスライドアウトせず、win7ドロップダウンにはホバーがありませんが、ボタンにはホバーがあります)からかなり離れています。まともなOffice2016リボンなどのWindowsのようなコンポーネントの欠如、またはWin10の単純な「トグル」さえないことは言うまでもありません。実際、独自のコンポーネントを作成せずに多くのことを行うことはできません。)

于 2018-03-07T22:21:13.927 に答える
1

私は少し遅れていることを知っていますが、これは他の人を助けるかもしれません:

インターネット全体を検索して、スイングベースのアプリのテーマ全体を変更する方法を見つけました。それから私はそうすることについての記事を見つけました:

誰かが言うかもしれません:

それは不可能であり、OSによって制御されます。

タイトルバーにアクセスする場合は、まず、ネイティブJavaエンジンライブラリにアクセスできる必要があります。幸いなことに、それには方法があります。

最初のステップ: JNAは、Javaコード以外に何も記述せずに、Javaプログラムにネイティブ共有ライブラリへの簡単なアクセスを提供します。したがって、このリポジトリを使用してそれらにアクセスできます:JNA

Scroll down to readme and find the downloadable library.

一部の要素は、使用しているプラ​​ットフォームに基づいて延期される場合があります。したがってjna-platform-5.8.0.jar、アプリを任意のプラットフォームと互換性のあるものにするために使用するようにしてください。

2番目のステップ: JNAライブラリの使用方法がわからない場合は、例としてこれを使用できます。

とにかく、これはタイトルバーの色に関する問題を解決する可能性があります;)

主な記事:外部リンク

Help me improve my writing in English by telling me my mistakes :D

于 2021-06-02T15:20:44.847 に答える
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));
于 2011-05-27T12:54:49.333 に答える
0

はい、解決策を見つけました。今これを見ている人には役立つかもしれないと思います。

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

今、私はこれを達成することができます:-

ここに画像の説明を入力してください

于 2021-11-24T14:33:07.063 に答える