JPanel无法加载图片?

时间:2017-07-22 06:03:55

标签: java image swing image-processing jpanel

我尝试使用这些代码在JPanel(在JFrame内)的本地文件夹中创建一个Image输出,但JFrame没有显示任何内容:

package photo;

import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.Color;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.awt.image.PixelGrabber;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class UI extends javax.swing.JFrame {


    public UI() {
        initComponents();
   }
public class ImagePanel extends javax.swing.JPanel{

    private BufferedImage image;

    public ImagePanel() {
       try {                
         image = ImageIO.read(new File("D://Programming/Image Processing/Colour Temperature/Vampire-full.jpg"));
       } catch (IOException ex) {
            // handle exception...
       }
    }
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(image, 0, 0, this);      
    }

}


    public static void main(String args[]) {

        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new UI().setVisible(true);
            }
        });
    }



    // Variables declaration - do not modify                     
    private javax.swing.JPanel Image;
    // End of variables declaration                   
}

我不知道我是否使用了正确的语义,请帮忙。 谢谢。

1 个答案:

答案 0 :(得分:0)

正如@MadProgrammer在评论中所说,你应该将你的面板添加到框架中。如果您想在启动应用程序时看到某些内容,还需要设置JFrame的大小。

例如,将UI构造函数更改为:

public UI() {
   // set up the size of your frame
   this.setSize(800, 600);
   // set up a layout manager
   this.setLayout(new BorderLayout());
   initComponents();
}

您可以根据框架的宽度和高度使用所需的任何值。您还应该设置要使用的布局管理器类型(例如BorderLayout的实例)

然后使用您的initComponents()方法添加面板

private void initComponents() {
   this.add(new ImagePanel());
}

通过这些更改,您的框架将显示ImagePanel中加载的图像