gpt4 book ai didi

Java Swing PaintComponent() 重写

转载 作者:太空宇宙 更新时间:2023-11-04 12:30:46 25 4
gpt4 key购买 nike

我想在某些JComponent(JPanelJLayeredPane,..)中将图像设置为背景。为此,我创建了类 JImagePanel 来扩展 JPanel 并重写该方法。其他组件也是如此。我现在有 3 个类,它们的区别仅在于它们扩展的内容。我想创建一个扩展 JComponent 的独特类 JImageComponent,然后所有其他类都将扩展它,但我不能,因为我创建的类已经扩展了一个类(JImagePanel 扩展了 JPanel)。我还有其他方法可以做到这一点吗?

这是我创建的类之一的代码:

public class JImagePanel extends JPanel {

private static final int DEFAULTX = 0;
private static final int DEFAULTY = 0;
private static final int DEFAULTWIDTH = 1100;
private static final int DEFAULTHEIGHT = 700;

private BufferedImage img;
private int imagex;
private int imagey;
private int imagewidth;
private int imageheight;
private static final long serialVersionUID = 1L;

public JImagePanel(String path){
super();
this.imagex=JImagePanel.DEFAULTX;
this.imagey=JImagePanel.DEFAULTY;
this.imagewidth=JImagePanel.DEFAULTWIDTH;
this.imageheight=JImagePanel.DEFAULTHEIGHT;
img = loadImage(path);
}

public JImagePanel(String path,int x,int y, int width, int height){
super();
this.imagex=x;
this.imagey=y;
this.imagewidth=width;
this.imageheight=height;
img = loadImage(path);
}

@Override
protected void paintComponent(Graphics graphics) {
super.paintComponent(graphics);

setOpaque(false);
graphics.drawImage(img, imagex, imagey,imagewidth,imageheight, null);
}
}

谢谢。

最佳答案

您所建议的内容在逻辑上是不可能的,因为 JPanelJLayeredPane 等已经扩展了 JComponent。您想要做的是在层次结构中添加一个新步骤。现在它变成了 JImagePanel -->JPanel --> JComponent 等,而您正在尝试使其成为 JImagePanel --> JPanel --> JImageComponent --> JComponent。为此,您必须更改 JPanel 类,使其实际上扩展 JImageComponent

这是我的建议:不要在已经扩展组件的类上使用JImageComponent。如果您创建的新组件不扩展现有组件,请让它们直接扩展 JImageComponentJComponent。如果您的 JImageComponent 类的目的是为您的元素提供统一性,请考虑为所有要实现的元素创建一个接口(interface)。

关于Java Swing PaintComponent() 重写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37863684/

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