자바의 GUI 기초

mDev_97·2022년 1월 9일
0

Java

목록 보기
16/28
post-thumbnail

GUI(Graphical User Interface)

GUI의 목적

• 그래픽을 이용하기 위함
-> 사용자에게 이해하기 쉬운 모양의 정보를 제공

자바 GUI 특징

• 강력한 GUI 컴포넌트를 제공한다.
• GUI 프로그래밍이 쉽다.

자바 GUI 프로그래밍 방법

• GUI 컴포넌트와 그래픽을 이용
-> AWT 패키지와 Swing 패키지 이용
AWT : java.awt 패키지 사용
Swing : javax.swing 패키지 사용

AWT(Abstract Windowing Toolkit)

• 자바가 처음 나온 시기에 함께 배포된 GUI 라이브러리
• java.awt 패키지를 사용
• AWT 컴포넌트는 중량 컴포넌트이다.
-> 처리 속도는 빠르지만 운양체제에 부담이 많이 간다.
-> native 운영체제의 GUI 컴포넌트의 도움을 받기 때문

Swing(스윙)

• AWT 기술 기반으로 순수 자바 언어로 만들어진 라이브러리
• AWT 기능 + 고급 컴포넌트
• AWT 컴포넌트에 J를 붙인 이름의 클래스
• 그 외 J로 기작하는 클래스
• javax.swing 패키지를 사용
• Swing 컴포넌트는 경량 컴포넌트이다.
-> native 운영체제에 의존 x

Swing 클래스의 특징

• 클래스 이름이 J로 시작한다.
• 쉽게 GUI 프로그래밍이 가능
JComponent를 상속받는 클래스
-> 공통적인 속성을 구현한 추상 클래스 (인스턴스 생성 x)

AWT의 Container를 상속받는 클래스
-> JFrame, JDialog 등

컴포넌트(Component)

컨테이너에 포함되어야 화면에 출력할 수 있는 순수 컴포넌트
• 모든 컴포넌트는 java.awt.Component를 상속받는다.
• 모든 스윙 컴포넌트는 javax.swing.JComponent를 상속받는다.

컨테이너(Container)

• 다른 GUI 컴포넌트를 포함할 수 있는 컴포넌트
• java.awt.Container를 상속
• 다른 컨테이너에 포함 가능
• AWT 컨테이너와 Swing 컨테이너가 존재

최상위 컨테이너

• 다른 컨테이너에 속하지 않고도 독립적으로 출력이 가능한 컨테이너
• 모든 컴포넌트는 컨테이너에 포함되어야 화면에 출력이 가능하다.
• JFrame, JDialog, JApplet

스윙 프레임

• 모든 스윙 컴포넌트를 포함하는 최상위 GUI 컨테이너
• JFrame을 상속
• 컴포넌트를 화면에 출력하기 위해서는 스위 프레임에 포함되어야 한다.

스윙 프레임(JFrame)의 기본 구성

프레임 : 스윙 프로그램의 기본 틀
메뉴바 : 메뉴들이 포함되는 공간
컨텐트 팬 : GUI 컴포넌트들이 포함되는 공간

// 스윙 프레임 만들기
import javax.swing.*;

public class SwingFrameEx extends JFrame {
    public SwingFrameEx() {
        setTitle("스윙 프레임 만들기 예제");
        setSize(500, 500); // 프레임의 크기를 설정
        setVisible(true); // 프레임을 출력하기 위해서 필요
    }
    
    public static void main(String[] args) {
        SwingFrameEx frame = new SwingFrameEx();
    }
}

• 실행 결과

프레임에 컴포넌트 붙이기

// 프레임의 타이틀을 다는 방법
public SwingFrameEx() {
    // 1.메소드를 호출하여 설정
    setTitle("타이틀 이름");
    // 2. Jframe의 생성자를 호출하는 방법
    super("타이틀 이름");
}

// 컨텐트팬 알아내기
Container contentPane = frame.getContentPane();

// 컴포넌트 달기
Container contentPane = frame.getContentPane();
JButton jb = new JButton("OK");
contentPane.add(jb);

// 컨텐트팬 변경하기
JPanel jp = new JPanel();
frame.setContentPane(jp);

사용 예제


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

public class SwingFrameEx extends JFrame {
    public SwingFrameEx() {
        setTitle("컴포넌트 붙이기 예제");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // 프레임 종료버튼 사용 시 응용 프로그램도 종료시키는 방법
        
        // 컨텐트팬 알아내기
        Container contentPane = getContentPane();
        // 컨텐트팬 배경색 설정
        contentPane.setBackground(Color.YELLOW);
        // 컨턴트팬 레이아웃 설정
        contentPane.setLayout(new FlowLayout());
        
        // 프레임에 JButton 컴포넌트 추가하기
        contentPane.add(new JButton("Java"));
        contentPane.add(new JButton("Python"));
        contentPane.add(new JButton("C"));
        
        setSize(300, 200);
        setVisible(true);
    }
    
    public static void main(String[] args) {
    	SwingFrameEx frame = new SwingFrameEx();
    }
}

• 실행 결과

profile
안녕하세요. 백엔드, 클라우드, 인프라에 관심과 열정이 있는 김문성입니다. 😊

0개의 댓글

관련 채용 정보