윈도우 창 생성
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);
}
}