Graphic Thread(쓰레드를 활용한 그래픽 프로그램)

Soozoo·2024년 6월 27일

JAVA

목록 보기
29/41

스레드를 이용한 그래픽 프로그램은 자바의 멀티스레딩 기능을 사용하여 화면에 동적인 요소를 추가할 수 있게 해줍니다. 이번 글에서는 JFrame을 사용하여 간단한 그래픽 프로그램을 작성하고, 스레드를 사용하여 랜덤한 위치에 사각형을 그리는 예제

주요 클래스 및 메서드 설명

  1. JFrame: 자바의 스윙(Swing) 라이브러리에서 제공하는 기본 윈도우 창을 생성하는 클래스입니다.
  2. Runnable: 스레드로 실행될 작업을 포함하는 인터페이스입니다. run 메서드를 오버라이드하여 스레드에서 실행될 코드를 작성합니다.
  3. Random: 난수 생성을 위한 클래스입니다.
  4. Thread: 스레드를 생성하고 실행하기 위한 클래스입니다.
  5. repaint(): Swing 컴포넌트를 다시 그리도록 요청하는 메서드입니다.

코드

package ex03.thread;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.util.Random;
import javax.swing.JFrame;

public class GraphicThread extends JFrame implements Runnable {
    int x, y, num;
    Color color;
    Random random;

    public GraphicThread(int num) {
        this.num = num;
        color = Color.red;
        random = new Random();

        setSize(500, 400); // 프레임 화면 크기 - 너비, 높이
        setVisible(true); // 화면 보여주기
        
        setLocation(300,150); //보여질 프레임(화면) 우치 지정

        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    @Override
    public void run() { // 스레드 실행부
        Rectangle rect = getBounds();

        for (int i = 0; i < num; i++) {
            x = random.nextInt(rect.width);
            y = random.nextInt(rect.height);

            repaint();

            try {
                Thread.sleep(50); // 0.05초
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    } //end run()

    @Override
    public void paint(Graphics g) {
        super.paint(g); // JFrame의 기본 페인트 메서드를 호출하여 화면을 지웁니다.
        g.setColor(color);
        //g.fillRect(x, y, 10, 10); // 사각형 크기를 좀 더 크게 변경
        g.fillOval(x, y, 10, 10);
    }

    public static void main(String[] args) {
        GraphicThread gt = new GraphicThread(100);
        Thread t = new Thread(gt);
        t.start();
    }
}

코드 설명

  1. 클래스 및 변수 선언:
    • GraphicThread 클래스는 JFrame을 상속받고 Runnable 인터페이스를 구현합니다.
    • int x, y, num: 사각형의 x, y 좌표와 반복 횟수를 저장하는 변수입니다.
    • Color color: 사각형의 색상입니다.
    • Random random: 난수 생성을 위한 객체입니다.
  2. 생성자:
    • GraphicThread(int num): 스레드에서 그릴 사각형의 개수를 인자로 받습니다. 프레임의 크기를 설정하고, 화면에 표시합니다.
  3. run 메서드:
    • 스레드가 실행되는 메서드입니다. 사각형을 num 번 랜덤한 위치에 그립니다.
    • repaint(): 컴포넌트를 다시 그리도록 요청합니다.
    • Thread.sleep(50): 0.05초 동안 스레드를 멈춥니다.
  4. paint 메서드:
    • Graphics 객체를 사용하여 사각형을 그립니다. super.paint(g)를 호출하여 기본 페인트 작업을 수행합니다.
  5. main 메서드:
    • GraphicThread 객체를 생성하고, 새로운 스레드를 시작합니다.
profile
넙-죽

0개의 댓글