Java 使用look and feel将所有JLabel设置为不透明

Java 使用look and feel将所有JLabel设置为不透明,java,look-and-feel,Java,Look And Feel,我正在尝试使用自定义的外观使所有jlabel默认不透明。我可以设置前台Label.foreground,但如何设置不透明属性 编辑1: 我正在创建一个扩展MetalLookAndfeel的定制外观和感觉。我重写了initComponentDefaultsUIDefaults方法。然而,我对使用外观的其他方式持开放态度 编辑2: 我试过文斯·埃米尔的建议,但没有成功。JLabel上的不透明属性似乎有一个bug-请参阅 EDIT3:代码示例 class Demo { public stati

我正在尝试使用自定义的外观使所有jlabel默认不透明。我可以设置前台Label.foreground,但如何设置不透明属性

编辑1: 我正在创建一个扩展MetalLookAndfeel的定制外观和感觉。我重写了initComponentDefaultsUIDefaults方法。然而,我对使用外观的其他方式持开放态度

编辑2: 我试过文斯·埃米尔的建议,但没有成功。JLabel上的不透明属性似乎有一个bug-请参阅

EDIT3:代码示例

class Demo {
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                UIManager.put("Label.opaque", Boolean.valueOf(true));
                UIManager.put("Label.background", new ColorUIResource(Color.RED));

                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation(3);

                JLabel yoyo = new JLabel("YOYOYOYO");
                yoyo.setOpaque(true);// try once with this commented out and note difference

                JPanel panel = new JPanel();
                panel.setSize(200, 200);
                panel.setBackground(Color.BLUE);
                panel.add(yoyo);

                frame.add(panel);
                frame.pack();
                frame.setVisible(true);
            }
        });
    }
}
我还尝试设置JPanel的不透明属性-结果相同。似乎使用UIManager设置不透明属性对任何对象都没有影响:

还有别的办法吗

UIManager.put("Label.opaque", Boolean.valueOf(true));
它和其他任何财产一样


您使用的是哪种外观管理器?Synth?我想你不能在构造函数中只是子类JLabel和setOpaquetrue?我必须尝试一下。我以前没有这样做的原因是,当我使用Label查看金属的L&F属性列表时,我没有看到不透明列表。@BigMac66我不确定您所指的列表在链接中没有看到列表,但我在发布之前测试了这一点。让我知道,如果你得到的结果,你正在寻找不幸的是,它没有工作。我在Windows7计算机上运行java版本1.7.021。顺便说一句,在我的链接指向的网站上没有列表-有一个演示应用程序,我发现它对调查各种L&F很有用-它们并不完全相同!将L&F设置为Metal并选择Label,您将看到JLabel的所有默认值。您是否可以发布用于测试的代码-我想看看我是否在做与我应该做的不同的事情。-谢谢。@BigMac66对不起,我最终删除了测试代码,我正在休假,我写了一个小演示。请记住,Swing默认使用金属
class Demo {
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                UIManager.put("Label.opaque", Boolean.valueOf(true));

                JFrame frame = new JFrame();
                frame.setDefaultCloseOperation(3);

                JPanel panel = new JPanel();
                panel.setSize(200, 200);
                panel.setBackground(Color.BLUE);
                panel.add(new JLabel("YOYOYOYO");

                frame.add(panel);
                frame.pack();
                frame.setVisible(true);
            }
        });
    }
}