View

package net.jeongsam.minieditor;

import java.util.ArrayList;
import java.util.Collections;
import java.awt.*;

@SuppressWarnings("serial")
public class View extends Frame {
	ArrayList<MenuItem> lstMnuFile = new ArrayList<MenuItem>();
	ArrayList<MenuItem> lstMnuEdit = new ArrayList<MenuItem>();
	ArrayList<MenuItem> lstMnuHelp = new ArrayList<MenuItem>();
	ArrayList<Menu> lstMenu = new ArrayList<Menu>();
	MenuBar menuBar = new MenuBar();
	Menu menu = new Menu();
	TextArea taEdit = new TextArea();
	
	public View() {
		Collections.addAll(lstMnuFile,
				new MenuItem("새 파일..."), new MenuItem("열기..."),
				new MenuItem("저장"), new MenuItem("종료"));
		Collections.addAll(lstMnuEdit,
				new MenuItem("복사하기"), new MenuItem("잘라내기"),
				new MenuItem("붙여넣기"));
		Collections.addAll(lstMnuHelp, new MenuItem("이 프로그램은..."));
		Collections.addAll(lstMenu,
				new Menu("파일"), new Menu("편집"), new Menu("도움말"));
		
		for (MenuItem m : lstMnuFile) {
			m.addActionListener(new ActionModel());
			lstMenu.get(0).add(m);
		}
		for (MenuItem m : lstMnuEdit) {
			m.addActionListener(new ActionModel());
			m.setEnabled(false);
			lstMenu.get(1).add(m);
		}
		for (MenuItem m : lstMnuHelp) {
			m.addActionListener(new ActionModel());
			lstMenu.get(2).add(m);
		}
		
		for (Menu m : lstMenu)
			menuBar.add(m);
		
		add(taEdit);
		setMenuBar(menuBar);
		setSize(400, 300);
		setVisible(true);
	}
	
	public static void main(String[] args) {
		new View();
	}
}
// 다른 방법
package net.jeongsam.minieditor;

import java.util.*;
import java.awt.*;

@SuppressWarnings("serial")
public class View extends Frame {
	ArrayList<ArrayList<MenuItem>> menuItems = new ArrayList<ArrayList<MenuItem>>();
	ArrayList<MenuItem> lstMnuFile = new ArrayList<MenuItem>();
	ArrayList<MenuItem> lstMnuEdit = new ArrayList<MenuItem>();
	ArrayList<MenuItem> lstMnuHelp = new ArrayList<MenuItem>();
	ArrayList<Menu> lstMenu = new ArrayList<Menu>();
	MenuBar menuBar = new MenuBar();
	Menu menu = new Menu();
	TextArea taEdit = new TextArea();
	
	@SuppressWarnings("unchecked")
	public View() {
		Collections.addAll(lstMnuFile,
				new MenuItem("새 파일..."), new MenuItem("열기..."),
				new MenuItem("저장"), new MenuItem(),
				new MenuItem("종료"));
		Collections.addAll(lstMnuEdit,
				new MenuItem("복사하기"), new MenuItem("잘라내기"),
				new MenuItem("붙여넣기"));
		Collections.addAll(lstMnuHelp, new MenuItem("이 프로그램은..."));
		Collections.addAll(menuItems, lstMnuFile, lstMnuEdit, lstMnuHelp);
		Collections.addAll(lstMenu,
				new Menu("파일"), new Menu("편집"), new Menu("도움말"));
		
		for (int i = 0; i < menuItems.size(); i++) {
			for (MenuItem m : menuItems.get(i)) {
				if (m.getLabel().length() == 0) {
					lstMenu.get(i).addSeparator();
				} else {
					m.addActionListener(new ActionModel());
					lstMenu.get(i).add(m);
				}
			}
		}
		
		for (Menu m : lstMenu)
			menuBar.add(m);
		
		add(taEdit);
		setMenuBar(menuBar);
		setSize(400, 300);
		setVisible(true);
	}
	
	public static void main(String[] args) {
		new View();
	}
}

Controller : Command Pattern 사용

package net.jeongsam.minieditor;

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

public class ActionModel implements ActionListener {
	HashMap<String, Object> actions =
		new HashMap<String, Object>();
	public ActionModel() {
		actions.put("새 파일...", new NewFileAction());
		// Action을 여기에 추가하세요.
	}
	
	private void command(String command) {
		CommandProcess comm = (CommandProcess)actions.get(command);
		comm.doAction();
	}

	@Override
	public void actionPerformed(ActionEvent event) {
		if (event.getSource() instanceof MenuItem) {
			MenuItem m = (MenuItem)event.getSource();
			command(m.getLabel());
		}
	}
}

Model

/* 공통 인터페이스 */
package net.jeongsam.minieditor;

public interface CommandProcess {
	public void doAction();
}
/* 개별 Action */
package net.jeongsam.minieditor;

public class NewFileAction implements CommandProcess {

	@Override
	public void doAction() {
		System.out.println(getClass() + ": 새파일 명령을 실행합니다.");
	}

}

+ Recent posts