본문 바로가기

Swing/Moving Image

Image Moving with JPanel

JPanel 에서 이동하는 이미지 예


아래의 클래스는 JPanel 을 상속하여 그림을 로드하고 그리는 내용이다.

이 클래스의 인스턴스를 생성하여 JFrame 의 getContentPane().add(panel) 를 사용하면 화면에 그림을 출력할 수 있다

그림을 그릴 때 위치를 매번 변경하기 때문에 이미지가 이동하는 효과를 볼 수 있다

테스트환경: JDK 8, Netbeans 8.0.2

프로젝트가 저장되는 폴더로 이동해서 현재 클래스 소속 패키지 안에 images 폴더를 생성하고 그 안에 smile.jpg 를 복사해두면 된다


package org.kdea.java;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.*;
import java.io.IOException;
import java.io.InputStream;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.*;

public class ImagePanel extends JPanel {

    BufferedImage img;
    int x, y;
    
    ImagePanel() {
        this.setBounds(0, 0, 600, 400);
        InputStream ins = getClass().getResourceAsStream("images/smile.jpg");
        try {
            img = ImageIO.read(ins);
        } catch (IOException ex) {
            Logger.getLogger(ImagePanel.class.getName()).log(Level.SEVERE, null, ex);
        }
        new Thread() {
            @Override
            public void run() {
                for(int i=0;i<1000;i++) {
                    x++;
                    y++;
                    repaint();
                    try {
                        Thread.sleep(33);
                    } catch (InterruptedException ex) {
                        ex.printStackTrace();
                    }
                }
            }
        }.start();
    }
    
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g;
        g2d.drawImage(img, x,y, null);
    }

}