Event Listener

package net.jeongsam.gui;

import java.awt.*;
import java.awt.event.*;
import java.io.*;

@SuppressWarnings("serial")
public class MiniNotePad extends Frame implements ActionListener {
	private MenuItem[][] mnuItems;
	private TextArea taContent;
	
	public MiniNotePad() {
		super("MiniMini Notepad v0");
		
		String[] strMenus = {"파일", "편집", "도움말"};
		String[][] strMenuItems = {{"열기", "끝내기"},
				{"복사", "잘라내기", "붙여넣기"}, {"이 프로그램은"}};
		
		MenuBar menu = new MenuBar();
		Menu[] mnuMenus = new Menu[strMenus.length];
		mnuItems = new MenuItem[strMenuItems.length][];
		taContent = new TextArea();
		
		for (int i = 0; i < strMenuItems.length; i++)
			mnuItems[i] = new MenuItem[strMenuItems[i].length];
		
		for (int i = 0; i < strMenuItems.length; i++) {
			mnuMenus[i] = new Menu();
			for (int j = 0; j < strMenuItems[i].length; j++) {
				mnuItems[i][j] = new MenuItem();
				mnuItems[i][j].setLabel(strMenuItems[i][j]);
				mnuItems[i][j].addActionListener(this);
				mnuMenus[i].add(mnuItems[i][j]);
			}
		}
		
		for (int i = 0; i < strMenus.length; i++) {
			mnuMenus[i].setLabel(strMenus[i]);
			menu.add(mnuMenus[i]);
		}
		
		add(taContent);
		
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				dispose();
				System.exit(0);
			}
		});
		
		setMenuBar(menu);
		setSize(400, 300);
		setVisible(true);
	}

	private void openFile() throws IOException {
		FileDialog fd = new FileDialog(this, "열기");
		fd.setVisible(true);
		
		String line = null;
		
		BufferedReader br = new BufferedReader(
				new FileReader(new File(fd.getDirectory() + "\\" + fd.getFile())));
		
		taContent.setText("");
		while ((line = br.readLine()) != null) {
			taContent.setText(taContent.getText() + "\n" + line);
		}
	}
	
	private void exit() {
		dispose();
		System.exit(0);
	}
	
	public static void main(String[] args) {
		new MiniNotePad();
	}
	

	@Override
	public void actionPerformed(ActionEvent e) {
		for (MenuItem[] items : mnuItems)
			for (MenuItem item : items) {
				if (e.getSource() == item) {
					cmdSelector(item.getLabel());
				}
			}
	}
	
	public void cmdSelector(String str) {
		if (str.equals("열기"))
			try {
				openFile();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		if (str.equals("끝내기")) exit();
	}
}
package net.jeongsam.gui;

import java.awt.*;
import java.awt.event.*;

@SuppressWarnings("serial")
class EventEx01 extends Frame implements ActionListener {
	/**
	 * 프레임에 버튼을 추가하고 윈도우 닫기 이벤트 핸들러 추가.
	 * 버튼에 클릭 이벤트 핸들러 추가.
	 */
	public EventEx01() {
		super("이벤트 예제1"); // 프레임 인스턴스 생성
		Button b = new Button("클릭"); // 버튼 인스턴스 생성
		b.addActionListener(this); // 버튼 인스턴스에 액션 리스너 인터페이스 등록
		setLayout(new FlowLayout()); // 플로우 레이아웃 매니저 지정
		add(b); // 프레임에 버튼 인스턴스 추가
		/**
		 * 프레임에 종료 버튼의 구현을 위해 윈도우 리스너 등록.
		 * 내부 익명 클래스를 사용하여 윈도우 리스너 인터페이스 대신 윈도우 어댑터 클래스 추가.
		 * -- 윈도우 리스너의 경우 7개의 메서드를 구현해야 하는 반면, 윈도우 어댑터는 필요한
		 * -- 메서드만 구현하면 된다.
		 */
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				dispose(); // 현재 리소스 반납후 프레임 종료.
				System.exit(0); // 프로그램 종료.
			}
		});
		setSize(400, 300); // 프레임의 폭, 높이 값을 지정. 
		setVisible(true); // 프레임 화면에 표시.
	}
	
	/**
	 * 버튼을 눌렀을 경우 동작하는 이벤트 핸들러 구현
	 */
	@Override
	public void actionPerformed(ActionEvent arg0) {
		System.out.println("버튼을 눌렀음.");	
	}

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

	}
}

+ Recent posts