我有几个JRadioButton:rb1,rb2;它包含在透明的JPanel p1中,而p1包含在一个名为mainPanel的彩色面板中。 我想让这些JRadioButton透明化,这就是我的工作:
主屏幕中的:mainPanel.setBackground(Color.RED);
: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,那就没关系,但在我的情况下,结果不是我的预期:
如何解决此问题?提前谢谢!
答案 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();
}
});
}
}
。
@EntityScan