Java 기반 그래픽 인터페이스 구성: 윈도우, 컴포넌트 및 이벤트 처리

윈도우 창 생성

GUI 애플리케이션의 기본 단위인 JFrame를 사용하여 창을 생성하고 설정할 수 있습니다.

기본 창 구현 예제
package com.example.ui;

import javax.swing.*;

public class WindowExample {
    public static void main(String[] args) {
        JFrame window = new JFrame();
        
        window.setSize(600, 400);
        window.setTitle("간단한 윈도우");
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setLocationRelativeTo(null); // 화면 중앙 배치
        window.setVisible(true);
    }
}

컴포넌트 배치 및 관리

창 내부에 표시되는 요소들(버튼, 레이블 등)은 모두 컴포넌트이며, 직접 위치 지정을 위해 레이아웃 매니저 비활성화가 필요합니다.

버튼 (JButton)

사용자 입력을 받는 대표적인 컴포넌트입니다. 클릭 이벤트를 처리할 수 있습니다.

텍스트 및 이미지 표시 (JLabel)

정적 텍스트나 이미지를 표시하는 데 사용되며, 이미지 리소스는 경로를 명시해 로드해야 합니다.

컴포넌트 추가 예제
package com.example.ui;

import javax.swing.*;
import java.awt.*;

public class ComponentDemo {
    public static void main(String[] args) {
        JFrame frame = new JFrame("컴포넌트 예시");
        frame.setSize(500, 500);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(null); // 절대 위치 사용

        // 버튼 생성 및 위치 설정
        JButton submitBtn = new JButton("확인");
        submitBtn.setBounds(100, 80, 120, 50);
        frame.getContentPane().add(submitBtn);

        // 텍스트 레이블
        JLabel messageLabel = new JLabel("안녕하세요!");
        messageLabel.setBounds(100, 150, 150, 30);
        frame.getContentPane().add(messageLabel);

        // 이미지 레이블
        ImageIcon imageIcon = new ImageIcon("/path/to/image.jpg");
        JLabel imageView = new JLabel(imageIcon);
        imageView.setBounds(100, 220, 100, 100);
        frame.getContentPane().add(imageView);

        frame.setVisible(true);
    }
}

이벤트 처리 시스템

사용자 상호작용(클릭, 키보드 입력 등)을 감지하고 반응하기 위한 이벤트 모델을 구현합니다.

이벤트 리스너 등록

버튼 클릭이나 키 입력과 같은 이벤트를 특정 메서드로 연결할 수 있습니다.

키보드 입력 처리

창 자체에 키 이벤트 리스너를 부착하여 방향키 등 입력을 감지할 수 있습니다. 단, 컴포넌트가 포커스를 가져야 하므로 setFocusable(false) 설정 주의.

이벤트 처리 코드 예제
package com.example.event;

import javax.swing.*;
import java.awt.event.*;

public class EventHandlingDemo {
    public static void main(String[] args) {
        JFrame window = new JFrame("이벤트 처리 예제");
        window.setSize(500, 500);
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setLayout(null);

        JButton actionBtn = new JButton("클릭하세요");
        actionBtn.setBounds(100, 100, 120, 50);
        window.getContentPane().add(actionBtn);

        // 버튼의 포커스 제거 (키 이벤트를 창에서 받기 위함)
        actionBtn.setFocusable(false);

        // 마우스 클릭 이벤트
        actionBtn.addActionListener(e -> System.out.println("버튼 클릭됨"));

        // 키 입력 이벤트 - 키보드 상태 확인
        window.addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                int key = e.getKeyCode();
                switch (key) {
                    case KeyEvent.VK_LEFT:
                        System.out.println("왼쪽 화살표");
                        break;
                    case KeyEvent.VK_UP:
                        System.out.println("위쪽 화살표");
                        break;
                    case KeyEvent.VK_RIGHT:
                        System.out.println("오른쪽 화살표");
                        break;
                    case KeyEvent.VK_DOWN:
                        System.out.println("아래쪽 화살표");
                        break;
                }
            }
        });

        // 창이 활성화될 때 포커스 요청
        window.setFocusable(true);
        window.requestFocusInWindow();

        window.setVisible(true);
    }
}

태그: JFrame JButton JLabel ActionListener KeyListener

6월 18일 22:22에 게시됨