AWT의 컴포넌트들은 예전의 GUI 환경에서 기본적이고 필수적인 것 들이다.

 

지금은 스마트폰을 많이 쓰게 되면서 UI도 많이 변했다. 팝업메뉴 같은 것은 요새 나오는 앱에서는 잘 못보는 것 같다. 슬라이딩 메뉴바 같은 것을 많이 쓴다.

 

과거의 유물같지만 예제 한번 돌려보는 것은 나쁘지 않을 것이다.

 

1) 팝업메뉴 (Popup Menu)

 

- 팝업메뉴는 클릭시 그 자리에 생기는 메뉴를 말한다.

 

아래 소스코드가 복잡해 보이지만 컴포넌트를 한개씩 실행하다보면 분리가 된다.

 

import가 길어도 결국

 

import java.awt.*;

import java.awt.event.*;

 

두 줄이면 끝난다. 그렇다고 그 안에 무수한 클래스와 인터페이스가 들어있다는 것을 잊으면 안된다.

 

이번에는 Frame을 상속 extends 하지 않고 외부클래스로 사용했다. 사이즈 지정하고 setSize 팝업 메뉴를 만들어 준다.

 

MenuItem 클래스는 기본 메뉴 만들때도 사용했었다. PopupMenu 객체에 MenuItem을 추가하면 된다.

 

팝업메뉴는 클릭을 해야 나타나므로 이벤트처리기를 만들어줘야한다. 클릭이란 이벤트에 처리할 내용을 mouseClicked 메서드에 적고, 이벤트 리스너 MouseListenter 에게 전달한다. annoanonymous class (익명 클래스) 사용법으로 처리하면 코드가 간결해진다. (이벤트 처리기는 다다음 포스트에서 다룰 예정)

 

PopupMenu 의 메서드 show는 프레임(윈도우)안의 x와 y 좌표를 받아서 그 자리에 팝업메뉴를 띄운다.

import java.awt.Button;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Label;
import java.awt.MenuItem;
import java.awt.Panel;
import java.awt.PopupMenu;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class AwtGUI3  {

	AwtGUI3(){
		
		Frame fr1 = new Frame();
		fr1.setSize(500,500);
				
		//PopupMenu
		
		PopupMenu pm1 = new PopupMenu("편집");
		
		MenuItem item1 = new MenuItem("복사");
		MenuItem item2 = new MenuItem("자르기");
		MenuItem item3 = new MenuItem("붙여넣기");

		pm1.add(item1);
		pm1.add(item2);
		pm1.add(item3);
		
		fr1.addMouseListener(new MouseAdapter() {
			 public void mouseClicked(MouseEvent e) {
				pm1.show(fr1, e.getX(), e.getY()); 
			 }
		 });
		
		fr1.add(pm1);
		
		// Panel
		
		Panel pn1 = new Panel();
		
		pn1.setBackground(Color.CYAN);
		pn1.setSize(200, 200);
		pn1.setLocation(100, 100);
		pn1.setLayout(null);
		
		fr1.add(pn1);
		
		// Label
		
		Label lb1 = new Label("label1");
		lb1.setBounds(10, 10, 80, 30);
		pn1.add(lb1);
		Label lb2 = new Label("label1");
		lb2.setBounds(10, 50, 80, 30);
		pn1.add(lb2);
		
		// Button
		
		Button bt1 = new Button ("OK");
		bt1.setBounds(10, 150, 80, 30);
		Button bt2 = new Button("CANCEL");
		bt2.setBounds(100, 150, 80, 30);
		
		pn1.add(bt1);
		pn1.add(bt2);
		
		// below is Frame
		
		fr1.setTitle("JAVA AWT GUI");
		fr1.setLayout(null);
		fr1.setVisible(true);

		fr1.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				//fr1.dispose();
				System.exit(0);
			}
		});
		
	}
	public static void main(String[] args) {
		AwtGUI3 ag1 = new AwtGUI3();
		System.out.println("Good to go,ma'am");
	}
}

2) Panel (패널)

 

패널은 판같은 것이다. 프레임 안에 추가되서 위치를 잡아주는 역할을 한다. Frame에서의 X,Y 거리가 있고 Panel 내에서의 X,Y거리가 있다. 즉 상대좌표다. Panel 은 Container를 상속받았으며, Panel 안에 Panel을 포함할 수 있다.

 

패널

예제에서는 패널에 레이블과 버튼을 추가했다. 

패널

패널은 Frame을 기준으로 setLocation 메서드로 위치를 잡는다. 패널안의 레이블과 버튼은 setBounds에 패널안에서의 위치를 나타낸다. 정해진 레이아웃을 사용하는게 아니므로 setLayout 에 null을 설정해야 입력한 위치가 나온다.

 

간단한 예제지만 Panel을 사용함으로써 이제 하나의 윈도우를 여러개의 구역으로 나눠서 사용할 수 있을 것이다.

공유하기

facebook twitter kakaoTalk kakaostory naver band