Java 在另一个透明对象上绘制透明对象
我将半透明的JCheckBox对象放置在半透明的JPanel上。当我将鼠标光标移动到JCheckBox对象上时,它会将JCheckBox对象重新绘制到原始JCheckBox对象的顶部,并将原始JCheckBox对象替换为几个单元格 我想让它做的是在我将鼠标光标移到它上面后看起来完全一样 之前(鼠标光标不在JCheckBox对象上): 之后(鼠标光标位于JCheckBox对象上): 代码: 很抱歉,如果已经问过这个问题。我到处找,找不到有同样问题的人。 再次抱歉,如果这篇文章不是一个合法的SSCCE。这是我在这里的第一篇文章 编辑1:编辑代码。这个问题仍然存在 编辑2:代码现在可以工作了。有关绘画工作原理的说明,以及您可以使用的解决方案,请参阅Java 在另一个透明对象上绘制透明对象,java,swing,transparency,Java,Swing,Transparency,我将半透明的JCheckBox对象放置在半透明的JPanel上。当我将鼠标光标移动到JCheckBox对象上时,它会将JCheckBox对象重新绘制到原始JCheckBox对象的顶部,并将原始JCheckBox对象替换为几个单元格 我想让它做的是在我将鼠标光标移到它上面后看起来完全一样 之前(鼠标光标不在JCheckBox对象上): 之后(鼠标光标位于JCheckBox对象上): 代码: 很抱歉,如果已经问过这个问题。我到处找,找不到有同样问题的人。 再次抱歉,如果这篇文章不是一个合法的SS
在这种情况下,我猜您需要将TransparentPanel和复选框添加到一个单独的
AlphaContainer
我添加了链接推荐的两个部分。它仍然有重新绘制的问题,但颜色更暗。@user2782185,我刚刚完成更新我的建议。该解决方案需要应用于这两个组件。我使用AlphaContainer对其进行了测试。如果要重写paintComponent()方法,则应在TransparentPanel类中执行此操作,因为使用此组件时都需要此代码。此外,它应该是super.paintComponent(…)
(不带“s”)。
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);
}
}