我的JRadioButton使用setOpaque更改外观(false)

时间:2014-09-10 10:13:39

标签: java swing transparent look-and-feel jradiobutton

我想删除我的JRadioButton的背景但仍然保持相同的外观&感觉。 图像会自行说明:

当我执行此代码时:

JRadioButton myJRadioButton = new JRadioButton("My JRadioButton");
add(myJRadioButton);

我明白了:

enter image description here

当我用这段代码运行它时:

JRadioButton myJRadioButton = new JRadioButton("My JRadioButton");
myJRadioButton.setForeground(Color.white); //To see it on the black background.
myJRadioButton.setOpaque(false); 
add(myJRadioButton);

我明白了:

enter image description here

我有一个类似于"明星"而不是一个伟大而美丽的圈子。 而我想要的是保留第一张图片的伟大而美丽的圆圈,但没有根据它的默认背景。

2 个答案:

答案 0 :(得分:2)

文件说

public void setOpaque(boolean isOpaque)  
  

如果为true,则组件绘制其边界内的每个像素。除此以外,   组件可能无法绘制部分或全部像素,从而允许   显示底层像素。此属性的默认值   对于JComponent,它是假的。但是,此属性的默认值   在大多数标准JComponent子类(如JButton和JTree)上   依赖于外观。

它说的全部。

答案 1 :(得分:1)

您可以创建一个扩展JRadioButton的类,并在类中添加所有属性:

        setOpaque(false);
        setContentAreaFilled(false);
        setBorderPainted(false);
        setForeground(Color.white);
        setBackground(Color.BLACK);

样本输出:

picture

代码:

public class Sample extends JPanel {

    public Sample() {
        super(new BorderLayout());
        setBackground(Color.BLACK);

        TransparentButton testButton = new TransparentButton("hello");
        testButton.setSelected(true);

        add(testButton, BorderLayout.LINE_START);
        setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
    }

    private static void createAndShowGUI() {
        JFrame frame = new JFrame("Hello Word demo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JComponent newContentPane = new Sample();
        newContentPane.setOpaque(true);
        frame.setContentPane(newContentPane);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                createAndShowGUI();
            }
        });
    }

    class TransparentButton extends JRadioButton {
        public TransparentButton(String string) {
            super(string);
            setOpaque(false);
            setContentAreaFilled(false);
            setBorderPainted(false);
            setForeground(Color.white);
            setBackground(Color.BLACK);
        }
    }

}