본문 바로가기
프로그래밍 언어/자바

AWT - GUI 프로그래밍 #1

by 블루데이제이 2022. 9. 12.
728x90
반응형

AWT(Abstract Windows Toolkit)란 자바에서 GUI 프로그래밍을 지원하기 위해서 제공되는 패키지 모음을 말합니다.

지금까지 했던 프로그래밍은 윈도우에서 command창으로 실행을 한거라고 하면 AWT는 비주얼베이직이나 비주얼 C#과 비슷한 윈폼이라고 생각하면 됩니다. 그렇다고 윈폼과 동일 수준을 기대하시면 안됩니다.

AWT 프로그래밍 구조

AWT 프로그래밍의 구조는 크게 컴포넌트와 레이아웃 그리고 이벤트 처리로 나눌 수 있습니다. 컴포넌트는 버튼과 같은 GUI를 구성하는 요소를 말하고 레이아웃은 요소들의 위치를 설정하는 것이며 이벤트 처리는 버튼을 마우스로 클릭했을 때 특정 작업을 처리하는 것을 말합니다.

AWT 프로그래밍 구조

Hello AWT

거의 모든 GUI프로그램은 프레임을 프로그램 단위로 사용합니다. AWT를 사용하기 위해서는 기본적으로 java.awt.* 패키지를 import해야 합니다.

 

핵심 포인트
AWT를 사용하기 위해서는 java.awt.* 패키지를 import해야 합니다.
화면 출력
package awt;

import java.awt.Frame;

public class HelloAWT {
	public HelloAWT() {
		Frame frame = new Frame();      //프레임 생성
		frame.setTitle("Hello AWT");    //프레임 제목
		frame.setSize(300, 200);        //프레임 크기
		frame.setVisible(true);		    //프레임 화면에 보이기

	}
	
	public static void main(String[] args) {
		new HelloAWT();
	}
}

왼쪽 화면 처럼 너비 300, 높이 200의 Hello AWT라는 제목을 가진 프레임이 생성된 AWT가 실행되는 것을 확인할 수 있습니다.

 

 

 

 

 

 

package awt;

import java.awt.Button;
import java.awt.Frame;
import java.awt.Panel;

public class HelloAWT {
	public HelloAWT() {
		Frame frame = new Frame();
		frame.setTitle("Hello AWT");
		frame.setSize(300, 200);
		frame.setVisible(true);
		
		Button btnClose = new Button("종료");
		Button btnPrint = new Button("출력");
		
		Panel panel = new Panel();
		panel.add(btnClose);
		panel.add(btnPrint);
		
		frame.add(panel);
		
	}
	
	public static void main(String[] args) {
		new HelloAWT();
	}
}

위 소스 코드는 프레임에 종료와 출력이라는 버튼을 추가하는 소스입니다. 소스상에서 Panel은 버튼과 같은 컴포넌트를 묶은 틀이라고 생각하시면 됩니다. 프레임이나 패널에 추가할 경우에는 add() 메소드를 사용하면 됩니다.

 

소스 코드를 실행하면 왼쪽 화면처럼 한글이 깨진채로 출력됩니다.

분명 프로젝트를 UTF-8로 생성했는데 말이죠.

 

 

 

 

 

해당 파일(HelloAWT.java)의 프로퍼티(Alt+Enter)에 들어가서 Run/Debug Settings 클릭하면 해당 파일명이 보입니다. 파일을 선택선택한 후 Edit버튼을 클릭합니다.

Arguments 탭의 VM arguments에 -Dfile.encoding=MS949를 입력하고 OK버튼을 클릭합니다.

그리고 Apply and Close버튼을 클릭합니다.

 

그리고 나서 다시 AWT를 실행합니다. 그러면 왼쪽 화면처럼 한글이 제대로 출력되는 것을 확인할 수 있습니다.

 

 

 

 

 

 

이벤트 구현

화면에 생성 컴포넌트인 버튼을 클릭하거나 윈도우 창의 최소화, 최대화, 닫기를 클릭하면 WindowEvent가 발생합니다. 발생된 이벤트를 처리하기 위해서는 이벤트 리스너(Listener)를 만들어 주어야 합니다.

리스너는 컴포넌트에서 발생하는 이벤트를 처리해주는 인터페이스를 말합니다. 이벤트를 처리하기 위해서는 java.awt.event.* 패키지를 import해야 합니다.

먼저 버튼 클릭 이벤트 리스너를 구현하겠습니다.

package awt;

import java.awt.Button;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class HelloAWT {
	public HelloAWT() {
		Frame frame = new Frame();
		
		ButtonListener listener = new ButtonListener();  //이벤트 리스너 생성
		
		Button btnClose = new Button("종료");
		Button btnPrint = new Button("출력");
		
		btnClose.setActionCommand("exit");              //ActionCommand 설정
		btnClose.addActionListener(listener);           //이벤트 리스너 등록
		
		btnPrint.setActionCommand("print");             //ActionCommand 설정
		btnPrint.addActionListener(listener);           //이벤트 리스너 등록
		
		Panel panel = new Panel();
		panel.add(btnClose);
		panel.add(btnPrint);
		
		frame.add(panel);

        frame.setTitle("Hello AWT");
		frame.setSize(300, 200);
		frame.setVisible(true);
		
	}
	
	public static void main(String[] args) {
		new HelloAWT();
	}
	
	class ButtonListener implements ActionListener{

		@Override
		public void actionPerformed(ActionEvent e) {
			String cmd = e.getActionCommand();
			
			if(cmd.equals("exit")) {
				System.exit(0);
			}else if(cmd.equals("print")) {
				System.out.println("출력");
			}
		}
		
	}
}

두 개의 버튼은 같은 이벤트 리스너를 사용하고 있으며 구분은 setActionCommand() 메소드로 처리합니다. 그러면 리스너에서 getActionCommand() 메소드로 구분하여 처리합니다.

다음은 프레임에 있는 닫기 버튼 이벤트를 처리하겠습니다.

package awt;

import java.awt.Button;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

public class HelloAWT {
	public HelloAWT() {
		Frame frame = new Frame();
		frame.addWindowListener(new FrameListener());       //WindsowsListener 등록
		
		ButtonListener listener = new ButtonListener();
		
		Button btnClose = new Button("종료");
		Button btnPrint = new Button("출력");
		
		btnClose.setActionCommand("exit");
		btnClose.addActionListener(listener);
		
		btnPrint.setActionCommand("print");
		btnPrint.addActionListener(listener);
		
		Panel panel = new Panel();
		panel.add(btnClose);
		panel.add(btnPrint);
		
		frame.add(panel);

        frame.setTitle("Hello AWT");
		frame.setSize(300, 200);
		frame.setVisible(true);
		
	}
	
	public static void main(String[] args) {
		new HelloAWT();
	}
	
	class ButtonListener implements ActionListener{

		@Override
		public void actionPerformed(ActionEvent e) {
			String cmd = e.getActionCommand();
			
			if(cmd.equals("exit")) {
				System.exit(0);
			}else if(cmd.equals("print")) {
				System.out.println("출력");
			}
		}
		
	}
	
	class FrameListener implements WindowListener{

		@Override
		public void windowOpened(WindowEvent e) {
			
		}

		@Override
		public void windowClosing(WindowEvent e) {
			System.exit(0);
		}

		@Override
		public void windowClosed(WindowEvent e) {
		}

		@Override
		public void windowIconified(WindowEvent e) {
		}

		@Override
		public void windowDeiconified(WindowEvent e) {
		}

		@Override
		public void windowActivated(WindowEvent e) {
		}

		@Override
		public void windowDeactivated(WindowEvent e) {
		}
		
	}
}

프레임에 WindowListener를 등록하고 닫기버튼을 클릭하면 윈도우폼이 종료되는 프로그램입니다.

 

기본적인 AWT를 알아봤습니다.

솔직히 Visual Basic이나 Visual C#보다 손이 조금 많이 갑니다. ^^

728x90
반응형

'프로그래밍 언어 > 자바' 카테고리의 다른 글

AWT - GUI 프로그래밍 #3 Button  (0) 2022.09.12
AWT - GUI 프로그래밍 #2 Label  (0) 2022.09.12
예외 처리  (0) 2022.09.12
날짜 다루기  (0) 2022.09.12
벡터와 해시테이블  (0) 2022.09.12