스레드를 이용한 그래픽 프로그램은 자바의 멀티스레딩 기능을 사용하여 화면에 동적인 요소를 추가할 수 있게 해줍니다. 이번 글에서는 JFrame을 사용하여 간단한 그래픽 프로그램을 작성하고, 스레드를 사용하여 랜덤한 위치에 사각형을 그리는 예제
run 메서드를 오버라이드하여 스레드에서 실행될 코드를 작성합니다.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();
}
}
GraphicThread 클래스는 JFrame을 상속받고 Runnable 인터페이스를 구현합니다.int x, y, num: 사각형의 x, y 좌표와 반복 횟수를 저장하는 변수입니다.Color color: 사각형의 색상입니다.Random random: 난수 생성을 위한 객체입니다.GraphicThread(int num): 스레드에서 그릴 사각형의 개수를 인자로 받습니다. 프레임의 크기를 설정하고, 화면에 표시합니다.num 번 랜덤한 위치에 그립니다.repaint(): 컴포넌트를 다시 그리도록 요청합니다.Thread.sleep(50): 0.05초 동안 스레드를 멈춥니다.Graphics 객체를 사용하여 사각형을 그립니다. super.paint(g)를 호출하여 기본 페인트 작업을 수행합니다.GraphicThread 객체를 생성하고, 새로운 스레드를 시작합니다.