Как я могу изменить цвет заголовка в JFrame?

Я использую следующий код,

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

для изменения цвета панели инструментов в JFrame. Но это не сработало.

Можно ли изменить цвет заголовка в JFrame?

8 ответов

Решение

Это невозможно. 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);

Да, я нашел решение. Я думаю, что это может быть полезно для людей, которые видят это сейчас.

Использовать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);

Теперь я могу добиться этого:-

Я знаю, что немного опаздываю, но это может помочь другим:

Я обыскал весь Интернет, чтобы найти способ полностью изменить тему моего приложения на основе свинга. Затем я нашел статью об этом:

Кто-то может сказать:

Это невозможно и не контролируется ОС.

Если вы хотите получить доступ к строке заголовка, сначала у вас должен быть доступ к собственным библиотекам движка Java. К счастью, есть способ:

Первый шаг: JNA предоставляет программам Java легкий доступ к собственным общим библиотекам без написания чего-либо, кроме кода Java. Таким образом, вы можете использовать этот репозиторий для доступа к ним: JNA.

      Scroll down to readme and find the downloadable library.

Некоторые элементы могут откладываться в зависимости от используемой вами платформы. Поэтому убедитесь, что вы используете jna-platform-5.8.0.jar чтобы ваше приложение было совместимо с любыми платформами.

Второй шаг: если вы не знаете, как использовать библиотеки JNA, вы можете использовать это в качестве примера: пример

в любом случае, это может решить вашу проблему с цветом строки заголовка;)

Основная статья: Внешняя ссылка

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

Я думаю, что цель состоит в том, чтобы добиться реального вида приложения на Win10. Поскольку невозможно реально изменить цвет заголовка окна, единственный способ - настроить окно.

Хотя примеры установки варианта Metal LAF дают хороший пример, я обнаружил, что эта проблема сложнее. Реальное окно Win10 должно иметь границу win10, прозрачную границу (тень), куда пользователь может перетащить для изменения размера. В заголовке должны использоваться значки Win10 и указатель мыши для кнопок окна.

Я f.setUndecorated(правда); и нарисуйте его самостоятельно, и установите вставки окна так, чтобы содержимое работало как обычно.

(Мелкий шрифт: хотя мы все "знаем", что можно настроить Swing с помощью LAF, в реальной жизни написание LAF всегда намного сложнее, чем просто создание подклассов и рисование собственных украшений. В качестве дополнительной проблемы архитектура LAF не выразить все свойства компонента, и "нативный" LAF довольно далек от нативного внешнего вида (например, проверьте выпадающий список win7) или ощущений (выпадающие списки не выдвигаются, выпадающие выпадающие окна win7 не имеют всплывающих окон, а кнопки -). не говоря уже об отсутствии Windows-подобных компонентов, таких как приличная лента Office 2016, или даже о простом "переключении" Win10. Действительно, вы не можете сделать слишком много, не заваривая свои собственные компоненты.)

вы не можете изменить это управляется ОП.

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));
Другие вопросы по тегам