Java 设置jpanel的背景时,其组件将赢得';我没被展示出来

Java 设置jpanel的背景时,其组件将赢得';我没被展示出来,java,swing,background,jpanel,paintcomponent,Java,Swing,Background,Jpanel,Paintcomponent,我试图为我的JPanel设置一个背景图像,其中包含一些其他组件,如Jlabel、JCheckBox、JTextField。我确实通过创建另一个类并扩展JPanel添加了背景,因此覆盖了paintComponent()。图像设置得非常完美,但那些标签和,不会显示。只有按钮会显示,当我将鼠标移到按钮上时(复选框也会显示,但是,当它们显示时,它们包含自己的背景,这会干扰图像) 我的代码: public class ImagePanel extends JPanel { private Image i

我试图为我的JPanel设置一个背景图像,其中包含一些其他组件,如Jlabel、JCheckBox、JTextField。我确实通过创建另一个类并扩展JPanel添加了背景,因此覆盖了paintComponent()。图像设置得非常完美,但那些标签和,不会显示。只有按钮会显示,当我将鼠标移到按钮上时(复选框也会显示,但是,当它们显示时,它们包含自己的背景,这会干扰图像)

我的代码:

public class ImagePanel extends JPanel {

private Image image;

ImagePanel(String path){
    
    this(new ImageIcon(path).getImage());
    
}

ImagePanel(Image image){
    
    this.image=image;
    
    Dimension size=new Dimension(796, 481);
    setSize(size);
    setLayout(null);
    
}
@Override
public void paintComponent(Graphics g) {
    //numbers are the size of the main JPanel
    g.drawImage(image,0,0,796,481, this);
    
}
}

然后将它的对象添加到我的主JPanel中,它包含组件。对于这些组件,我只设置了大小和位置,没有其他设置。请帮忙

提前谢谢


答案已经找到,谢谢大家的参与。答案在评论中。

public void paintComponent(Graphics g){..
应该是
public void paintComponent(Graphics g){super.paintComponent(g);..
1)
g.drawImage(image,0,0796481,null);
应该是
g.drawImage(图像,0,0796481,此);
(每个
JComponent
都是
ImageObserver
)2)应将
@Override
符号添加到任何重写的方法中。3)
维度大小=新维度(796481);设置大小(size);
将一无所获。对于特定的大小,重写
getPreferredSize()
方法。大多数版面管理器都会尊重这一点,并将其周围的框架整齐地包装起来。4)查看应该解决的问题。5)
新建图像图标(路径)。getImage()是一种非常脆弱的加载图像的方法。使用
ImageIO.read(URL)
用于在找不到图像时提供有用的输出。另外请注意,面板的背景图像显然是一种应用程序资源,因此需要通过URL而不是文件加载…实际上,此代码应该扔掉,重新开始。它的错误比正确的多。@andrewhompson这会有什么区别?cou请解释一下?(用于添加super.paintComponent(g))您必须将您的Swing组件添加到错误绘制图像的同一JPanel中。由于您需要对所有内容进行解释,请阅读Oracle教程。跳过Netbeans部分,每隔一节学习一次。最后,从创建简单的Swing GUI开始,然后担心如何使其“美观”与背景图像。