class ShowImage extends Panel {

        BufferedImage image;

        public ShowImage(String file) {
            try {

                File input = new File(file);
                image = ImageIO.read(input);
            } catch (IOException ie) {

            }
        }
        public void setImage(String file){
        try {
            File input = new File(file);
                    image = ImageIO.read(input);
        } catch (IOException ex) {

        }
        }
        public void setImage(BufferedImage img){
        image = img;
        }

        public void paint(Graphics g) {
            g.drawImage(image, 0, 0, null);
        }
    }

.....
public static void main(String[] args) throws InterruptedException, IOException {
         JFrame frame = new JFrame("Display image");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         ShowImage panel = new ShowImage("pic.jpg");
        frame.getContentPane().add(panel);
        frame.setSize(1000  , 1000);
        frame.setVisible(true);
}

ในกรณีที่ต้องการเปลี่ยนรูปไปมาเรื่อยๆ เราก็สามารถใช้คำสั่ง

panel.setImage(“img2.jpg”);
panel.update(panel.getGraphics());
แล้วในกรณีที่มีการเรียกรูปเดิมซ้ำไปซ้ำมาเป็นจำนวนมากๆ เราไม่ควรทำการโหลดรูปใหม่ทุกครั้งจากไฟล์ เพราะจะทำงานได้ช้ากว่า (ลองทำการ implement action ถ้าหากมีการกด mouse ให้เปลี่ยนรูปทุกครั้ง) ควรจะต้องทำการโหลดรูปเก็บไว้ในหน่วยความจำแล้วทำการเรียกใช้งานทีหลังเช่น

        BufferedImage image = ImageIO.read(new File("1.jpg"));
        BufferedImage image2 = ImageIO.read(new File("2.jpg"));
        BufferedImage[] imgd = {image,image2};
        panel.setImage(imgd[0]);
        panel.update(panel.getGraphics());

จะทำงานได้เร็วกว่าหลายสิบเท่าและไม่กิน CPU มากเท่ากับการอ่านจากไฟล์ทุกๆครั้ง
*Based on RoseIndia’s example