我在半透明的JPanel上放置一个半透明的JCheckBox对象。当我将鼠标光标移动到JCheckBox对象上时,它会重新绘制原始JCheckBox对象顶部的JCheckBox对象,从原始JCheckBox对象中移出一些单元格。
我想要它做的是在我将鼠标光标移到它上面之后看起来完全相同。
之前(鼠标光标不在JCheckBox对象上):
之后(鼠标光标在JCheckBox对象上):
代码:
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
class TransparentPanel extends JPanel{
public TransparentPanel(){
super();
setOpaque(false);
setBackground(new Color(0, 0, 0, 100));
JCheckBox checkBox=new JCheckBox("Check Box"){
protected void paintComponent(Graphics g){
g.setColor(getBackground());
g.fillRect(0, 0, getWidth(), getHeight());
super.paintComponent(g);
}
};
checkBox.setFocusable(false);
checkBox.setOpaque(false);
checkBox.setBackground(new Color(200, 200, 200, 50));
add(checkBox);
}
@Override
protected void paintComponent(Graphics g){
g.setColor(getBackground());
g.fillRect(0, 0, getWidth(), getHeight());
super.paintComponent(g);
}
public static void main(String[] args){
JFrame frame=new JFrame();
frame.setSize(200, 100);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new TransparentPanel());
frame.setVisible(true);
}
}
很抱歉,如果已经提出这个问题。我全神贯注地找不到有同样问题的人。 如果这篇文章不是合法的SSCCE,那就再说一遍。这是我在这里的第一篇文章。
编辑1:编辑代码。问题依然存在。
编辑2:代码现在有效。
答案 0 :(得分:2)
有关绘画如何工作的解释,请参阅Backgrounds With Transparency。
在这种情况下,我猜你需要将TransparentPanel和checkBox添加到单独的AlphaContainer
。