[미니프로젝트] 메모장 만들기
2009. 9. 8. 11:04
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() + ": 새파일 명령을 실행합니다."); } }