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

时间:2016-06-01 07:54:04

标签: java image swing jpanel

我正在创建一个简单的程序,我想在其中显示图像和按钮。所以我创建了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

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 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

2 个答案:

答案 0 :(得分:0)

在将图像添加到JPanel之前,请考虑将图像包装在JLabel中。 见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);

}
}

答案 1 :(得分:0)

您没有为自定义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);
}