如何在特定情况下使JRadioButton透明?

时间:2016-09-17 12:38:35

标签: java swing transparency jradiobutton

我有几个JRadioButton:rb1,rb2;它包含在透明的JPanel p1中,而p1包含在一个名为mainPanel的彩色面板中。 我想让这些JRadioButton透明化,这就是我的工作:

主屏幕中的

mainPanel.setBackground(Color.RED);

p1中的

p1.setBackground(new Color(0,0,0,0));

和rb1和rb2:

rb1.setOpaque(false);
        rb1.setContentAreaFilled(false);
        rb1.setBorderPainted(false);
        rb2.setOpaque(false);
        rb2.setContentAreaFilled(false);
        rb2.setBorderPainted(false);

如果rb1和rb2包含在mainPanel中或者p1不是透明的JPanel,那就没关系,但在我的情况下,结果不是我的预期:result

如何解决此问题?提前谢谢!

1 个答案:

答案 0 :(得分:4)

你看到的奇怪的绘画文物是由此引起的:

setOpaque

这样就不会通知父容器清除它的背景并重新绘制。因此,如果您希望面板完全透明,请改用setOpaque(false)。您还需要在单选按钮上调用此方法,而不是其他任何内容。

paintComponent会通知家长重新粉饰,但如果您想要一个半透明的面板,则必须覆盖super.paintComponent(Graphics)并手动拨打import java.awt.Color; import java.awt.EventQueue; import javax.swing.ButtonGroup; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JRadioButton; public class Example { public void createAndShowGUI() { JRadioButton encryptButton = new JRadioButton("Encrypt"); encryptButton.setOpaque(false); JRadioButton decryptButton = new JRadioButton("Decrypt"); decryptButton.setOpaque(false); ButtonGroup group = new ButtonGroup(); group.add(encryptButton); group.add(decryptButton); JPanel subPanel = new JPanel(); subPanel.setOpaque(false); subPanel.add(encryptButton); subPanel.add(decryptButton); JPanel mainPanel = new JPanel(); mainPanel.setBackground(Color.CYAN); mainPanel.add(subPanel); JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setContentPane(mainPanel); frame.pack(); frame.setVisible(true); } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { new Example().createAndShowGUI(); } }); } }

enter image description here

@EntityScan