
Java언어로 게임을 만들고 싶어진 저는Java로 게임을 만드는 영상들을 찾아보았습니다. 찾아본 결과 먼저Swing이란GUI 라이브러리를 사용한다는 것을 알고Java Swing에 관해 공부하려고 합니다.
개발 환경 : macOS / IntelliJ IDEA / JDK 17 버전 사용

IntelliJ에서 JavaSwing 라는 이름으로 새 Java 프로젝트를 생성합니다.
swing00 라는 이름으로 새 패키지를 생성한다.

main 메서드를 포함하는 Launcher 클래스와 MainWindow 클래스 두 개를 생성한다.

package swing00;
import javax.swing.*;
public class Launcher {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new MainWindow().setVisible(true));
}
}
Launcher 클래스에서 SwingUtilities.invokeLater() 메서드를 사용하여 Swing 관련 코드가 EDT(Event Dispatch Thread)에서 실행되도록 한다.
SwingUtilities.invokeLater()메서드를 사용하는 이유는 무엇인가?
Swing 스레드는 안전하지 않으므로, 모든 Swing 관련 코드가 EDT라는 동일한 스레드에서 실행되도록 보장하기 위해 사용한다.- EDT(Event Dispatch Thread): Swing GUI 애플리케이션의 모든 화면 관련 작업을 전담하는 유일한 스레드이다.
package swing00;
import javax.swing.*;
public class MainWindow extends JFrame {
public MainWindow() {
// 창 제목 설정
setTitle("Hello Swing!");
// 기본 닫기 동작 설정
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 창 크기 설정
setSize(800, 500);
// 창 화면 중앙 배치
setLocationRelativeTo(null);
}
}
MainWindow 클래스는 JFrame을 상속 받았기 때문에 클래스 자체가 프레임의 한 종류라고 볼 수 있다.
생성자 내에서 프레임을 설정해준다.

이렇게 모니터 화면의 정중앙에 800 x 500 크기의 "Hello Swing!"이라는 제목의 창이 화면에 나타난 것을 확인할 수 있다.