[英]JPanel doesn't repaint well using transparent JFrame
我试图通过透明的JFrame
重新绘制JPanel
,但它让上一个重绘的标记:
我知道这是一个已知的问题,并且已经发布了类似的问题,但答案只能解释为什么它不起作用而且他们没有给出解决方案。
任何人都可以在代码中进行更改或添加一些,这样可以产生预期的效果吗? (鼠标悬停在透明背景上的十字架)
我不想拍摄桌面照片并在JPanel
绘制它。
代码如下
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
final class Transparency extends JFrame{
private NewPanel np;
Transparency(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setUndecorated(true);
setLocation(200,200);
setBackground(new Color(0,0,0,0));
np = new NewPanel();
setContentPane(np);
pack();
setVisible(true);
}
public static void main(String []args){
Transparency li = new Transparency();
}
}
final class NewPanel extends JPanel{
private Point p = new Point(0,0);
private final int length = 25;
NewPanel(){
setPreferredSize(new Dimension(400,400));
setOpaque(false);
addMouseMotionListener(new MouseAdapter(){
public void mouseMoved(MouseEvent e){
p = e.getPoint();
repaint();
}
});
}
public void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(Color.GREEN);
g.drawLine(p.x-length,p.y,p.x+length,p.y);
g.drawLine(p.x,p.y-length,p.x,p.y+length);
g.setColor(Color.WHITE);
g.drawRect(0,0,399,399);
}
}
由于没有重量级的顶级组件,您需要自己管理背景。
将它添加到paintComponent方法中,就在super.paintComponent之后:
g.clearRect(0, 0, getWidth(), getHeight());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.