드림어필에서 작성된 Java 강좌에서 사용된 코드를 해설합니다.
원래 전부 드림어필에서 해결하려 했지만 코드 블록과 같은 기능을 위해
코드 설명만 Velog로 이전합니다.
package org.example;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Main extends JFrame{
public Main(){
setSize(300, 300);
setTitle("JFrame");
setLayout(new FlowLayout());
JButton button = new JButton("Button");
JLabel label = new JLabel("JFrame Is Here!");
this.add(label);
this.add(button);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
Main f = new Main();
}
}
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JLabel;
실행에 필요한 FlowLayout과 JFrame, 그리고 사용된 모듈들을 불러옵니다.
여기서는 JButton과 JLabel을 사용하였습니다.
setSize(300, 300);
창 크기를 300 X 300으로 지정합니다.
setTitle("JFrame");
창의 타이틀을 JFrame으로 설정합니다.
setLayout(new FlowLayout());
JButton button = new JButton("Button");
JLabel label = new JLabel("JFrame Is Here!");
FlowLayout을 불러오고, JButton과 JLabel을 생성합니다.
this.add(label);
this.add(button);
Label과 Button을 화면에 추가합니다.
setVisible(true)
창이 보이도록 설정합니다.
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
창을 닫았을 때 프로그램이 종료되도록 합니다.
Main f = new Main();
위에서는 Main이라는 이름의 클래스 생성자에 JFrame 코드를 작성했다. 이에 맞춰 Main의 생성자를 불러와 실행시킨다.
나의 시행착오
삽질
참으로 멍청하게도JFrame 코드가 작성된 Class의 이름을 Main으로 번경한 후에 main의 코드에서는 그대로 이전 이름인 MyFrame을 사용했다. 이로 인해 실행과 종료는 정상적으로 되지만(콘솔로 확인) GUI 창은 뜨지 않게 되었다. 이때 나는 실행 설정도 만져보고 별것을 다 했는데 결국 허무하게 끝나버린 버그이다.
나의 시행착오2
프로젝트를 만들고 JFrame을 불러오려고 하면
Package 'javax.swing' is declared in module 'java.desktop', but module 'com.example.java_learn' does not read it
이라는.. 오류가 발생했다. 원인은 제대로 찾아내지 못했지만 프로젝트 생성 시 기본으로 선택되는 JavaFX가 아닌 New Project를 눌러야 한다는 것은 알아냈다.

참 아무것도 없는 화면이다. 이제 다음 강좌에서는 Button의 클릭 이벤트를 구현해 보도록 하겠다.