gpt4 book ai didi

java - JPanel 不能很好地使用透明 JFrame 进行重绘

转载 作者:行者123 更新时间:2023-12-02 05:12:23 25 4
gpt4 key购买 nike

我正在尝试在透明的 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);
}
}

最佳答案

由于没有重量级的顶级组件,因此您需要自己管理后台。

将其添加到您的paintComponent方法中,紧接在super.paintComponent之后:

g.clearRect(0, 0, getWidth(), getHeight());

关于java - JPanel 不能很好地使用透明 JFrame 进行重绘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56319825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com