gpt4 book ai didi

java - 自定义 JPanel 在第二个自定义 JPanel 中导致呈现问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:19:16 25 4
gpt4 key购买 nike

这里有点奇怪。我有两个从 JPanel 扩展的类,覆盖了两者中的 paintComponent。一个实现 Runnable(用于动画目的)。

但是,当与顶部的 Runnable 一起使用时,我在 Runnable 的背景中得到了美妙的“绘制鼠标指向的所有内容的副本”实例。请参阅下面的屏幕截图:

using_a_jpanel

using a custom component

两者之间的唯一区别是我在前者中使用JPanel,而在后者中使用带有背景图像的自定义JPanel。下面第二个 JPanel 的代码:

package view.widgets;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JPanel;

public class PaintedJPanel extends JPanel {

private static final long serialVersionUID = 1L;
private BufferedImage backgroundImage = null;

public PaintedJPanel() {
super();
}

public PaintedJPanel(File image) {
super();
try {
backgroundImage = ImageIO.read(image);
} catch (IOException e) {
e.printStackTrace();
}
}

@Override
protected void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
if(null != backgroundImage) {
g2d.drawImage(backgroundImage, 0, 0, null);
}
}

public BufferedImage getBackgroundImage() {
return backgroundImage;
}

public void setBackgroundImage(BufferedImage backgroundImage) {
this.backgroundImage = backgroundImage;
}

}

编辑:详细编辑,因为在我添加标签时回车键不应该提交问题。

完成编辑 @ 13:38。

最佳答案

啊,您的 paintComponent 方法缺少 super 调用。变化

@Override
protected void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
if(null != backgroundImage) {
g2d.drawImage(backgroundImage, 0, 0, null);
}
}

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
if(null != backgroundImage) {
g2d.drawImage(backgroundImage, 0, 0, null);
}
}

正如我在对您的问题的评论中指出的(在查看代码之前),如果不调用 super,您将破坏绘制链,可能会导致子组件渲染产生副作用。

关于java - 自定义 JPanel 在第二个自定义 JPanel 中导致呈现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30829386/

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