이번 시간에는 자바에서 Frame을 이용하여 메모장을 만드는 것을 해봅니다.
먼저 제가 만든 결과 화면은 아래와 같습니다.
크게 메뉴는 파일(F), 색상(C)으로 두 개 있고, 각각의 메뉴에 세부 메뉴가 있습니다.
public class MyNotePad extends Frame implements ActionListener(){ TextArea ta; MenuBar bar; menu mnFile, mnColor, mnNew, mnFntColor; MenuItem miOpen, miSave, miExit; MenuItem miBgY, miBgG, miFgR, miFgB; // 배경, 글자색 Label lb; public MyNotePad(){ super(":::MyNotePad v1.1:::"); ta=new TextArea(); add(ta, "Center"); lb=new Label("Status"); add(lb, "South"); //1.메뉴바를 Frame에 붙인다. //메뉴바를 붙일 때는 setMenuBar()를 이용 bar = new MenuBar(); setMenuBar(bar); //2.메뉴를 생성해서 메뉴바에 붙인다. mnFile=new Menu("파일(F)"); mnColor=new Menu("색상(C)"); bar.add(mnFile); bar.add(mnColor); //MenuShortcut은 단축키 지정 miOpen=new MenuItem("열기(O)", new MenuShortcut('O')); MenuShortCut ms = new MenuShortCut('S'); miSave = new MenuItem("저장(S)", ms); miExit = new MenuItem("끝내기(X)", new MenuShortcut('X', true); //구분선 주기 mnFile.addSeparator(); mnFile.add(Exit); mnFile.addSeparator(); //서브메뉴 만들기 //메뉴에 메뉴를 붙이면 서브 메뉴가 된다.' mnNew = new Menu("New(N)"); mnFile.add(mnNew); mnNew.add(new MenuItem("New File"); mnNew.add(new MenuItem("Java Project"); mnNew.add("Package"); //문자열로 메뉴 아이템을 등록해도 됨 //색상의 상단메뉴 miBgY = new MenuItem("배경색-Yellow"); miBgG = new MenuItem("배경색-Gray"); mnFntColor = new Menu("글자색"); mnColor.add(miBgY); mnColor.add(miBgG); mnColor.addSeparator(); mnColor.add(mnFntColor); //색상의 서브메뉴 miFgR = new MenuItem("Red"); miFgB = new MenuItem("Blue"); mnFntColor.add(miFgR); mnFntColor.add(miFgB); mnFntColor.addSeparator(); mnFntColor.add(new MenuItem("Reset"); //4) 메뉴아이템에 리스너 부착 miOpen.addActionListener(this); miSave.addActionListener(this); miExit.addActionListener(this); miBgY.addActionListener(this); miBgG.addActionListener(this); miFgR.addActionListener(this); miFgB.addActionListener(this); //Reset 리스너 부착 mnFntColor.addActionListener(this); }//Constructor()------ @Override public void actionPerformed(ActionEvent e){ Object o=e.getSource(); //reset 처리(문자열 비교) String cmd=e.getActionCommand(); if(cmd.equals("Reset")){ ta.setBackground(Color.white); ta.setForeground(Color.black); } if(o==miExit){ //시스템 종료 코드 System.exit(0); }else if(o==miOpen){ //FileDialog 객체를 생성해서 setVisible(true)메소드를 호출한다. //Frame f1 = new Frame(); FileDialog fd = new FileDialog(this); fd.setVisible(true); //fd에서 선택한 파일의 절대경로를 만들어서 lb에 보여주세요. String dir=fd.getDirectory(); // 상위 디렉토리 경로 String fname=fd.getFile(); // 파일명 lb.setText(dir+fname); String filename=dir+fname; //FileReadExceptionTest(제가 직접 클래스 파일로 작성했습니다) 재사용하자 try{ String contents=FileReadExceptionTest2.readFile(filename) ta.setText(contents); }catch(FileNotFoundException ee){ JOptionPane.showMessageDialog(ta, filename+"파일을 찾을 수 없습니다"); }catch(IOException ee){ ta.setText("입출력 오류 발생"); }catch(Exception ee){ lb.setText("기타 오류 발생"); } }else if(o==miSave){ //save는 딱히 구현하지 않았습니다(나중에 추가하겠습니다) }else if(o==miBgY){ ta.setBackground(Color.yellow); }else if(o==miBgG){ ta.setBackground(Color.gray); }else if(o==miFgR){ ta.setForeground(Color.red); }else if(o==miFgB){ ta.setForeground(Color.blue); } } public static void main(String args[]){ MyNotePad my = new MyNotePad(); my.setSize(500,500); my.setVisible(true); } }
댓글 없음:
댓글 쓰기