我无法理解图像在 JPanel 中不显示但在 JFrame 中正常显示的原因

I can't understand the reason why Image is not displaying in JPanel but displaying normally in JFrame

我正在创建一个简单的程序,我想在其中显示一个图像和一个 button.So 我已经创建了一个 JFrame

这个 JFrame 包含两个 JPanel,其中一个面板包含 JButton,另一个面板包含我的图像。但是图像没有显示在面板中。当我将图像添加到 JFrame 时,它显示正常。请帮助编写以下代码!

main()方法:

public class NewClass2 {
public static void main(String args[]){

    EventQueue.invokeLater(new Runnable(){
        public void run(){
            JFrame frm = new JFrm();
            frm.setVisible(true);
            frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frm.setSize(500,500);
        }
    });

}
}

JFrm class 初始化 JFrame:

class JFrm extends JFrame{

JButton button;
JPanel panel0,panel1;

JFrm(){

    panel0 = new JPanel();
    panel1 = new JPanel();
    button = new JButton("Start");
    button.setPreferredSize(new Dimension(100, 30));
    panel0.add(button);

  panel1.add(new ImageComponent());   //adding image component to panel1 is not working
  //add(new ImageComponent());      //adding image component to the frame is working .. 


    add(panel1,BorderLayout.PAGE_START);
    add(panel0,BorderLayout.PAGE_END);

}

}

ImageComponent class 添加图像:

class ImageComponent extends JComponent{
Image img;
ImageComponent(){
    img = new ImageIcon("C:\Users\Kaushal28\Desktop\Aqua-Ball-icon.png").getImage();

}


@Override
public void paint(Graphics g){

    g.drawImage(img, 100,100 , null);
}

}

如何将图像添加到 JPanel

考虑将图像包装在 JLabel 中,然后再将其添加到 JPanel。 参见 Display a jpg image on a JPanel

class JFrm extends JFrame{

JButton button;
JPanel panel0, panel1;

JFrm(){

    panel0 = new JPanel();
    panel1 = new JPanel();
    button = new JButton("Start");
    button.setPreferredSize(new Dimension(100, 30));
    panel0.add(button);

    ImageIcon image = new ImageIcon("C:\Users\Kaushal28\Desktop\Aqua-Ball-icon.png");
    panel1.add(new JLabel(image));

    add(panel1, BorderLayout.PAGE_START);
    add(panel0, BorderLayout.PAGE_END);

}
}

您没有为您的自定义 JComponent 设置大小,因此 LayoutManager 会将其压缩为零大小。使用 setPreferredSize() 设置合适的大小。

ImageComponent(){
    ImageIcon temp = new ImageIcon("test.png");
    img = temp.getImage();
    setPreferredSize(new Dimension(temp.getIconWidth(),temp.getIconHeight()));
}


@Override
public void paint(Graphics g){
    g.drawImage(img, 0,0 , null);
}