使用外观将所有JLabel设置为不透明

时间:2014-09-03 15:25:10

标签: java look-and-feel

我正在尝试默认使用自定义外观制作所有JLabels opaque。我可以设置前景(Label.foreground),但是如何设置不透明属性?

编辑#1: 我正在创建一个自定义外观&觉得延伸MetalLookAndfeel。我重写了initComponentDefaults(UIDefaults)方法。但是,我对其他涉及使用外观和方式的方式持开放态度。感觉。

编辑#2: 我尝试了Vince Emigh的建议,但它没有用。看来JLabel上的opaque属性存在错误 - 请参阅make-jlabel-backround-transparent-again

编辑#3:代码示例

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的opaque属性 - 结果相同。看来使用UIManager设置opaque属性对任何对象都没有影响。 :(

还有其他办法吗?

1 个答案:

答案 0 :(得分:0)

UIManager.put("Label.opaque", Boolean.valueOf(true));

它与任何其他财产相同


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);
            }
        });
    }
}