كيف يمكنني تغيير لون شريط العنوان في JFrame؟
سؤال
أنا أستخدم الكود التالي ،
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));