뚜sh뚜sh

GUI, AWT와 스윙(swing) 본문

Language/Java

GUI, AWT와 스윙(swing)

뚜sh뚜sh 2023. 7. 6. 15:17

GUI와 AWT, 스윙의 개념

- GUI(Graphical User Interface)

  • 그래픽 환경, 모든 운영체제의 기본 환경
  • 버튼, 이미지, 메뉴 등 제공

- AWT(Abstract Windowing Toolkit)

  • 자바 초기 GUI 프로그래밍 도구
  • 운영체제의 리소스 사용

- 스윙(swing)

  • 순수 자바 컴포넌트 패키지
  • 자체 리소스 사용, Jxxxx 클래스로 제공

 

 

 

컨테이너(Container)

- 컴포넌트를 포함하는 클래스

- AWT : Frame, Panel, Dialog, Window, Applet

- 스윙 : JFrame, JPanel, JDialog, JWindow, JApplet

 

 

 

컴포넌트(Component)

- 버튼, 이미지, 리스트 등

- 컴포넌트는 반드시 컨테이너에 포함됨

 

 

 

스윙을 위한 기본 패키지 포함문

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

 

 

 

스윙 프로그램 순서

- 1단계 : 프레임 생성

  • JFrame = Frame + 메뉴 + 컨텐트 팬(컨테이너 클래스)

※ 컨텐트 팬은 컴포넌트가 연결

 

1. JFrame 객체를 생성하여 프레임을 생성하는 소스

- module-info.java 파일 코드(아래 import를 사용하기 위해 필요한 코드)

module test {
	requires java.desktop;
	requires java.sql;
}

- test2.java 파일 코드

package test2;

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

public class test2 {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		JFrame MainFrame = new JFrame();
		MainFrame.setTitle("swing 연습");
		MainFrame.setSize(200, 200);
		MainFrame.setVisible(true);
	}
}

 

2. JFrame을 상속하여 프레임을 생성하는 소스

package test2;

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

public class test2 extends JFrame {
	test2() {
		setTitle("swing 연습");
		setSize(200, 200);
		setVisible(true);
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		test2 MainFrame = new test2();
	}
}

 

- 2단계 : 컴포넌트 연결

  • 컨텐트 팬에 컴포넌트 추가 => 연결
  • (위 글 upgrade) JDK 1.5부터는 JFrame에 직접 추가
  • 레이아웃 관리자(FlowLayout, BorderLayout, GridLayout, CardLayout)
package test2;

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

public class test2 extends JFrame {
	test2() {
		setTitle("swing 연습");
		setSize(300, 300);
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		// 1) 버튼을 컨텍트 팬을 통해 추가하는 코드
//		Container ContentPane = getContentPane();
//		ContentPane.setLayout(null);
//		JButton button = new JButton("test");
//		button.setSize(70, 70);
//		button.setLocation(50, 50);
//		ContentPane.add(button);
		
		// 2) JFrame을 통해 버튼을 추가하는 코드 JDK 1.5
		this.setLayout(null);
		JButton button = new JButton("test");
		button.setSize(70, 40);
		button.setLocation(50, 80);
		this.add(button);
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		test2 MainFrame = new test2();
	}
}

- 자바 프로그램 종료 : System.exit(0)

- 스윙 프로그램 종료 : 닫기 버튼(X) - setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

 

- 3단계 : 이벤트 처리

  • 이벤트 처리 => 리스너(listener)
  • 리스너의 실체 => 인터페이스(이벤트 처리를 위한 메소드 정의)

 

 

 

레이아웃 관리자

- 컨테이너에 컴포넌트를 위치시키는 방법 => 레이아웃 관리자

- 기본 레이아웃 관리자 : setLayout() 메소드

  • Window, JWindow(컨테이너) : BorderLayout(기본 레이아웃 관리자)
  • Frame, JFrame : BorderLayout
  • Dialog, JDialog : BorderLayout
  • Panel, JPanel : FlowLayout
  • Applet, JApplet : FlowLayout

 

 

 

BorderLayout 관리자

- 컨테이너를 5개의 영역(동, 서, 남, 북, 중앙)으로 분할하여 컴포넌트를 배치

- 분할 영역 설정 코드

  • setLayout(new BorderLayout());
  • add(new Button("North"), BorderLayout.NORTH);
  • add(new Button("South"), BorderLayout.SOUTH);
  • add(new Button("East"), BorderLayout.EAST);
  • add(new Button("West"), BorderLayout.WEST);
  • add(new Button("Center"), BorderLayout.CENTER);

- 컴포넌트의 수직과 수평 간격 설정

  • BorderLayout(int hgap, int vgap)
  • void setHgap(int hgap)
  • void setVgap(int vgap)

 

 

 

GridLayout 관리자

- 컨테이너 공간을 격자 모양으로 나누는 관리자

  • setLayout(new GridLayout(3, 2));
  • add(new button("1"));
  • add(new button("2"));
  • add(new button("3"));
  • add(new button("4"));
  • add(new button("5"));
  • add(new button("6"));

- 컴포넌트의 수직과 수평 간격 설정

  • GridLayout(int rows, int cols)
  • GridLayout(int rows, int cols, int hgap, int vgap)
  • void setHgap(int hgap)
  • void setRows(int rows)
  • void setVgap(int vgap)

 

 

 

FlowLayout 관리자

- 컴포넌트를 왼쪽에서부터 오른쪽으로 순차적으로 위치시키는 관리자

  • FlowLayout(int align)
  • FlowLayout(int align, int hgap, int vgap)
  • void setHgap(int hgap)
  • void setVgap(int vgap)

 

 

 

CardLayout 관리자

- 컴포넌트가 겹쳐서 나열되는 레이아웃 관리자

  • CardLayout(int hgap, int vgap)
  • void setHgap(int hgap)
  • void setVgap(int vgap)

 

 

 

레이아웃 관리자 없이 컴포넌트 설정하기

- 기존 레이아웃 제거 : setLayout(null);

- 컴포넌트 위치 설정과 크기 변경

  • void setLocation(int x, int y);
  • void setSize(int width, int height)
Comments