سؤال

أنا أستخدم الكود التالي ،

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

لتغيير لون شريط الأدوات في JFrame. لكنها لم تنجح.

هل من الممكن تغيير لون شريط العنوان في JFrame؟

هل كانت مفيدة؟

المحلول

إنه غير ممكن. يتم التحكم في المستوى الأعلى 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);

أعتقد أن الهدف هو تحقيق تطبيق حقيقي على Win10. نظرًا لأنه لا يمكن تغيير لون عنوان النافذة إلى الحقيقي ، فإن الطريقة الوحيدة هي تخصيص النافذة.

على الرغم من أن أمثلة تثبيت متغير من LAF المعدنية تعطي مثالاً جيدًا ، فقد وجدت أن هذه المشكلة أكثر تعقيدًا. يجب أن تحتوي نافذة WIN10 الحقيقية على حدود Win10 ، الحدود الشفافة (الظل) حيث يمكن للمستخدم السحب لتغيير الحجم. يجب أن يستخدم العنوان أيقونات Win10 ، وتحوم لأزرار النوافذ.

كنت f.setundecorated (صحيح) ؛ وارسمه بمفردي ، وقم بتعيين إدراج النافذة بحيث يعمل المحتوى كالمعتاد.

(طباعة صغيرة: على الرغم من أننا جميعًا "نعرف" أنه يمكن للمرء تخصيص التأرجح مع LAFS ، فإن كتابة الحياة الحقيقية هي دائمًا أكثر تعقيدًا من مجرد تصنيف فرعي ورسم الزخرفة الخاصة بك. باعتبارها متاعبًا إضافيًا ، فإن بنية LAF لا تفعل ذلك التعبير عن جميع خصائص المكونات ، و LAF "الأصلي" بعيد جدًا عن المظهر الأصلي (على سبيل المثال ، تحقق من انخفاض WIN7) أو The Love (لا تنزلق المنسدلة ، ولا تحوم الأزرار ، ولكن الأزرار تفعل ذلك). أوه ، ناهيك عن عدم وجود مكونات تشبه 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));
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top