JAVA
[Java] Swing을 이용한 간단한 JFrame 화면 만들기
메가구글
2022. 4. 14. 18:26
1. 기초 설명
- 모든 그래픽 인터페이스는 디스플레이를 하기 위해서는 어플리케이션의 프레임이 필요하다.
- 여기서 사용하는 프레임이 우리가 공부할 JFrame이다.
2. 주의 사항
- Swing으로 프로그래밍을 할떄는 GUI를 만들 때 Event Dispatch Thread(EDT)를 활용한다.
- 이게 혹시나 있을 데드락(deadlock)이나 race condition으로 프로그래밍이 멈추는 것을 막아준다.
- EDT를 간단히 설명하자면 EDT는 작업하는 사람이고, Queue에서 작업물을 1개씩 가져온다.
- 만약에 작업하는 사람이 여럿이고 작업물 1개를 동시에 작업하면, 갱신이나 덮어씌어질 수있다.
3. 코드
import javax.swing.SwingUtilities;
import javax.swing.JFrame;
public class JFrameDemo {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
private static void createAndShowGUI() {
System.out.println("Created GUI on EDT? "+
SwingUtilities.isEventDispatchThread());
JFrame f = new JFrame("Swing Paint Demo");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(250,250);
f.setVisible(true);
}
}
4. 코드 설명
- SwingUtilities.invokeLater(new Runnable(){ }은 Runnable 인터페이스의 익명으로 구현된 인스턴스를 만들고 이를 invokeLater에 전달하면서 큐에 넣고, 다른 쓰레드 EDT는 해당 큐에서 Runnable을 꺼내고 해당 실행 메소드를실행합니다.
- 사실 위의 코드는 우리가 메소드를 약속하듯이 쓰는 공식이라 생각해서 깊게 들여다볼 필요는 없다고 생각합니다.
- 여기서 우리가 JFrame을 생성하는 부분은 JFrame f = new JFrame("Swing Paint Demo")이며 제목을 Swing Paint Demo로 설정합니다.
- f.setSize(250,250)은 JFrame의 크기 조절, f.setVisible(true)는 true여야 보입니다 false면 안보입니다.
- f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)은 JFrame에서의 나가기(X버튼)을 눌러도 이것을 설정하지 않으면 창이 꺼지지않습니다. 이것은 필수로 꼭꼭 넣어주세요!
5. 코드실행
- 위에 상단을 보면 Swing Paint Demo라고 제목이 추가된 것을 볼 수 있습니다.
- f.setSize의 크기를 다르게 하면 창의 크기가 다르게 보여질 수 있습니다.
- 현재 화면이 아무것도 없는건 컴포넌트들을 추가하지 않았기 때문이며 다음 글에서 알아보겠습니다.