为特定Java的LookAndFeel,UIManager,UIDefaults定制一些组件UI

时间:2017-06-03 00:11:33

标签: java swing customization look-and-feel override

我想根据LookAndFeel更改对象的默认值。

对于Java上的LookAndFeel,有些具有相同的对象,但值不同。 例如:

Metal : javax.swing.plaf.metal.MetalLookAndFeel
    Slider.background : javax.swing.plaf.ColorUIResource[r=238,g=238,b=238]
    SliderUI : javax.swing.plaf.metal.MetalSliderUI

Nimbus : javax.swing.plaf.nimbus.NimbusLookAndFeel
    Slider.background : DerivedColor(color=214,217,223 parent=control offsets=0.0,0.0,0.0,0 pColor=214,217,223
    SliderUI : javax.swing.plaf.synth.SynthLookAndFeel


CDE/Motif : com.sun.java.swing.plaf.motif.MotifLookAndFeel
    Slider.background : javax.swing.plaf.ColorUIResource[r=147,g=151,b=165]
    SliderUI : com.sun.java.swing.plaf.motif.MotifSliderUI


GTK+ : com.sun.java.swing.plaf.gtk.GTKLookAndFeel
    Slider.background : javax.swing.plaf.ColorUIResource[r=214,g=210,b=208]
    SliderUI : javax.swing.plaf.synth.SynthLookAndFeel


Mac OS X : com.apple.laf.AquaLookAndFeel
    Slider.background : com.apple.laf.AquaImageFactory$SystemColorProxy[r=238,g=238,b=238]
    SliderUI : com.apple.laf.AquaSliderUI


Windows : com.sun.java.swing.plaf.windows.WindowsLookAndFeel
    Slider.background : javax.swing.plaf.ColorUIResource[r=240,g=240,b=240]
    SliderUI : com.sun.java.swing.plaf.windows.WindowsSliderUI


Windows Classic : com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel
    Slider.background : javax.swing.plaf.ColorUIResource[r=240,g=240,b=240]
    SliderUI : com.sun.java.swing.plaf.windows.WindowsSliderUI

.

根据LookAndFeel,您可以看到它具有相同的对象,在本例中为Slider.background,但具有不同的默认值。

我想知道:如何更改Nimbus的默认值(为它们建立不同的值),适用于Metal和Motif。

示例:

Metal -> Slider.background:Color.RED
Nimbus -> Slider.background:Color.GREEN
Motif -> Slider.background:Color.BLUE

下一个方法的问题是所有人的变化,但如何选择特定的LAF?

UIDefaults sliderDefaults = new UIDefaults();
sliderDefaults.put("Slider.background", THE_COLOR_SELECTED);
UIManager.put("Slider.background", THE_COLOR_SELECTED);

我不想将LookAndFeel设置为更改其值的组件...我想在LookAndFeel之前更改,并在以后应用它更改LAF(我不知道是否可行)。

UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");

假设存在一个方法(这确实不起作用),如下所示:

UIManager.getLookAndFeel("javax.swing.plaf.metal.MetalLookAn‌​dFeel").put("Slider.‌​background", Color.RED); 
UIManager.getLookAndFeel("com.sun.java.swing.plaf.motif.Moti‌​fLookAndFeel").put("‌​Slider.background", Color.GREEN); 
UIManager.getLookAndFeel("javax.swing.plaf.nimbus.NimbusLook‌​AndFeel").put("Slide‌​r.background", Color.BLUE);

根据LookAndFeel,我正在为同一个对象建立不同的DEFAULT颜色。

注意 Color 仅适用于演示海豚,因为我想对其他类型的对象使用相同的原则。

0 个答案:

没有答案