Java jFrame不';不要显示图像

Java jFrame不';不要显示图像,java,swing,Java,Swing,所以,伙计们,我想使用代码,我必须设置jFrame的背景,而不添加任何来自另一个类的内容(比如在jPanel中使用此代码,然后将该面板添加到jFrame)。我想做这门课上的每件事。我真的不知道该怎么办,所以我尝试了一下,但这段代码没有显示图像 import java.awt.Graphics; import java.awt.Image; import javax.swing.ImageIcon; import javax.swing.JFrame; public class panel ex

所以,伙计们,我想使用代码,我必须设置jFrame的背景,而不添加任何来自另一个类的内容(比如在jPanel中使用此代码,然后将该面板添加到jFrame)。我想做这门课上的每件事。我真的不知道该怎么办,所以我尝试了一下,但这段代码没有显示图像

import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JFrame;

public class panel extends JFrame{
    Image img;

    public void paintComponent(Graphics g){
        super.paintComponents(g);

        g.drawImage(img, 0, 0, getWidth(), getHeight(), null);
        g.dispose();
    }

    public panel(){
        img=new ImageIcon(getClass().getResource("bg_login.jpg")).getImage();
        setExtendedState(JFrame.MAXIMIZED_BOTH);
        pack();
        setVisible(true);
    }


    public static void main(String[] args){
        new panel();
    }
}

jframe
没有
paintcomponent()
方法,因为它不是一个jcomponent,而是一个容器。您可以制作一个面板,然后将
paintcomponent
方法
setcontentpane
jframe
放在该面板上

范例

public class panel extends JPanel {

    Image img;

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        if (img != null) {
            g.drawImage(img, 0, 0, getWidth(), getHeight(), null);
        }
        // g.dispose();
    }

    public panel() {
         img=new ImageIcon(getClass().getResource("bg_login.jpg")).getImage();

    }

    public static void main(String[] args) {
        JFrame jFrame = new JFrame();
        jFrame.setExtendedState(JFrame.MAXIMIZED_BOTH);
        panel panel = new panel();
        jFrame.setContentPane(panel);
        jFrame.pack();
        jFrame.setVisible(true);
    }
}

@Override
添加到
paintComponent
方法以查看惊喜…不,魔法不起作用:P当我添加@Override时,它会在paintComponent下显示一条红线。JFrame没有
paintComponent
方法我试图将paintComponent更改为paintComponents红线没有出现,但仍然没有背景,好吗@FastSnail那么我能做什么呢?回答编辑:永远不要处理已传递到paint或paintComponent方法中的图形对象,因为这会破坏绘制链,并有副作用或NPE的风险。另外
super.paintComponents
更改为
super.paintComponent
,并添加了一个空检查。thnx dude不想使用jpanel,但我想这是wt我必须要做的:D thnx(Y)@NelsonJohn如果不添加更多组件,也可以使用jlable