bit가 눈 앞에서 왔다갔다

GUI 기초_AWT, Swing 본문

언어!/Java

GUI 기초_AWT, Swing

헬린인형 2021. 4. 30. 23:30

1. JAVA GUI

GUI: Graphical User Interface

GUI를 구성하는 기본 패키지 2가지: AWT와 Swing

AWT

1.  java.awt 패키지 제공

2. 중량 컴포넌트(heavy weight)

3. 운영체제의 도움을 받아 화면에 출력하기 때문에 OS에 부담을 끼친다.

4. 운영체제(Windows Button, Macintosh Button)에 따라 다른 모양으로 나타남

Swing(권장)

1. javax.swing 패키지 제공

2. 순수 자바 언어로 작성(운영체제의 도움받지 않음. 운영체제와 상관없이 동일하게 동작)

3. AWT 컴포넌트들이 100% 호환되도록 스윙 컴포넌트로 작성. AWT와의 구분을 위해 J를 붙임

4. AWT 패키지 필요

 

2. JAVA GUI 패키지

GUI 패키지 계층 (그림 봐야 이해 빠름)

모든 GUI 컴포넌트는 Component 클래스 반드시 상속

컨테이너

다른 GUI 컴포넌트를 포함할 수 있는 컴포넌트 (컨테이너이면서 컴포넌트!)

컴포넌트

다른 컴포넌트 포함 불가. 컨테이너에 포함되어야 화면에 출력.

AWT나 Swing의 모든 컴포넌트들이 java.awt.Component 상속, 따라서 Component 클래스에는 모든 컴포넌트들의 공통적인 속성과 기능이 있음

(컴포넌트 크기, 모양, 위치 등을 관리하는 멤버 변수, 메소드 / 컴포넌트 그리기, 이동, 삭제, 이벤트 처리 관련 메소드 등 다양한 기능 제공

최상위 컨테이너

다른 컨테이너에 속하지 않고 독립적으로 화면에 출력할 수 있는 것

JFrame, JDialong, JApplet  (나머지 컨테이너나 컴포넌트 다른 컴포넌트에 부착되어야함 -> 자식컴포넌트)

컨테이너와 컴포넌트의 포함 관계

JFrame JPanel (JButton), JPanel JLabel, JTextField, JCheckBox...

 

3. 스윙 GUI 프로그램 만들기

1) 스윙 프레임 작성

    *import문

//(패키지 아래에 써야 에러 안남..)
import java.awt.*;  		//폰트 등 그래픽 처리를 위한 기본 클래스들 경로명
import java.awt.event.*;	//이벤트 처리에 필요한 기본 클래스들의 경로명
import javax.swing.*;		//스윙 컴포넌트 클래스들의 경로명
import javax.swing.event.*; //스윙 이벤트 처리에 필요한 클래스들의 경로명

    *스윙 프레임과 컨텐트팬(Content Pane)

    스윙에서 프레임 역할 수행 -> JFrame ; Frame(java.awt.Frame), 메뉴바, 컨텐트팬으로 구성

    JFrame - 메뉴바, 컨텐트팬 부착

    컨텐트팬 - 메뉴바 제외하고 모든 GUI 컴포넌트 부착, 스윙에서는 컨텐트팬에만 컴포넌트 부착.

 

2) main() 메소드 작성

    스윙 프레임은 JFrame을 상속받아 만든다. (extends JFrame)

public class myFrame extends JFrame {
	public myFrame() {			//myFrame 생성자
		setTitle("타이틀!");
		setSize(200,200);
		setVisible(true);
	}
	
	public static void main() {		//main 기능 최소화, 프레임 생성 코드 정도만
		myFrame frame = new myFrame();	//스윙스 프레임 생성
	}
}

 

3) 프레임에 스윙 컴포넌트 붙이기

public class myFrame extends JFrame {
	public myFrame() {			//myFrame 생성자
		setTitle("타이틀!"); 
        	//super("타이틀문자열"); - super(); 자식 클래스 생성자에서 부모 클래스 불러서 생성
        	//super는 constructor의 top으로
		setSize(200,200);
		setVisible(true);
		
		Container contentPane = getContentPane();	//프레임에 부착된 컨텐프팬 알아내기
		
		JButton button = new JButton("버튼입니당");
		contentPane.add(button);
		/*JFrame frame = new JFrame
		 * JButton button = new JButton;
		 * frame.add(button); 도 가능!
		 */
	}
	
	public static void main() {
		myFrame frame = new myFrame();	//스윙스 프레임 생성
	}
}

    *컨텐트팬 변경 - setContentPane()

    프레임에 부착된 컨텐트팬 제거 후 새로운 컨텐트팬 붙일 수 있음

    ex. frame.setContentPane(new myPanel());

 

import java.awt.*;  		//폰트 등 그래픽 처리를 위한 기본 클래스들 경로명
import java.awt.event.*;	//이벤트 처리에 필요한 기본 클래스들의 경로명
import javax.swing.*;		//스윙 컴포넌트 클래스들의 경로명
import javax.swing.event.*; //스윙 이벤트 처리에 필요한 클래스들의 경로명

public class myFrame extends JFrame {
	public myFrame() {			//myFrame 생성자
		setTitle("타이틀!"); //super("타이틀문자열"); - super(); 자식 클래스 생성자에서 부모 클래스 불러서 생성 
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);	//스윙 프레임 종료
		
		Container contentPane = getContentPane();	//프레임에 부착된 컨텐프팬 알아내기
		
		JButton button = new JButton("버튼입니당");
		contentPane.add(button);
		/*JFrame frame = new JFrame
		 * JButton button = new JButton;
		 * frame.add(button); 도 가능!
		 */	
		
		setSize(200,200);
		setVisible(true);
		
		/////System.exit(0);		//자바 프로그램 종료
	}
	
	public static void main() {
		myFrame frame = new myFrame();	//스윙 프레임 생성
	}
}
반응형

'언어! > Java' 카테고리의 다른 글

자바 이벤트 처리(2)_Key Event, Mouse Event  (1) 2021.05.09
자바 이벤트 처리(1)  (0) 2021.05.08
GUI 기초_컨테이너, 배치  (0) 2021.05.02
JAVA 복습 목표!  (0) 2021.04.30
Comments