【发布时间】:2019-10-12 15:51:55
【问题描述】:
我正在尝试在透明的 JFrame 上重绘 JPanel,但它会留下之前重绘的标记:
previous repaint keeps showing
我知道这是一个已知问题,并且已经发布了一个类似的问题,但答案仅解释了为什么它不起作用并且他们没有给出解决方案。
任何人都可以更改代码或添加一些代码,以达到预期的效果吗? (在透明背景上跟随鼠标的十字)
我不想把桌面拍下来画在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);
}
}
【问题讨论】:
-
您使用的是什么操作系统和 Java 版本?无法使用 Java 11 在 macOS 10.14.5 上复制它
-
@MadProgrammer 我在 Ubuntu 16.04 上使用了 Java 8.191。我了解 Java 9 或更高版本仅适用于 64 位计算机,而我的是 32 位计算机。可能是旧版本的 Java 造成了这种影响?
-
“似乎”是 Linux 的问题????
标签: java swing jframe jpanel transparency