본문 바로가기

JAVA

[Java] Swing을 이용한 간단한 JFrame 화면 만들기

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. 코드실행

그림1. JFrame 생성하기

  • 위에 상단을 보면 Swing Paint Demo라고 제목이 추가된 것을 볼 수 있습니다. 
  • f.setSize의 크기를 다르게 하면 창의 크기가 다르게 보여질 수 있습니다.
  • 현재 화면이 아무것도 없는건 컴포넌트들을 추가하지 않았기 때문이며 다음 글에서 알아보겠습니다.

 

참고자료