180 likes | 312 Views
메모장 구동. import java.io.*; import java.awt.*; import java.awt.event.*; public class Memojang extends Frame implements WindowListener { private MemoActionListener mal = null; private TextArea ta = null; private MenuBar mb = null; private Menu mfile = null;
E N D
import java.io.*; import java.awt.*; import java.awt.event.*; public class Memojang extends Frame implements WindowListener { private MemoActionListener mal = null; private TextArea ta = null; private MenuBar mb = null; private Menu mfile = null; private String filename = "새파일"; private FileDialog fd = null; public Memojang() { fd = new FileDialog(this); ta = new TextArea(); add(ta,BorderLayout.CENTER); mal = new MemoActionListener(this, fd); mb = new MenuBar(); mfile = new Menu("파일"); itemAdd("새파일",mfile); itemAdd("열기",mfile); itemAdd("저장",mfile); itemAdd("종료",mfile); mb.add(mfile); setMenuBar(mb); setTitle(filename); addWindowListener(this); } private void itemAdd(String title, Menu m) { MenuItem mi = new MenuItem(title); mi.addActionListener(mal); m.add(mi); } //윈도우 종료 public void windowClosing(WindowEvent we) { System.exit(0); }
이벤트 • 그래픽 사용자 인터페이스에서 발생하는 모든 동작 • 자바의 이벤트 모델 • 위임형 모델(delegation event model) • GUI의 컴포넌트에서 이벤트가 발생되면, 해당되는 리스너(listener)에게 이벤트 처리를 넘겨주는 방식 • 이벤트 처리를 위한 컴포넌트에는 해당 리스너가 등록되어 있어야 하며, 리스너에는 이벤트를 처리할 처리루틴이 포함되어 있어야 한다 • 이벤트 처리 예.(윈도우 창닫기 이벤트) • WindowEvent.WINDOW_CLOSING 이벤트 발 • addWindowListener() • WindowListener를 이용하여 이벤트 발생 감시, 감지 • WindowAdapter 클래스로 대용 가능
import java.awt.*; import java.awt.event.*; public class Memo extends Frame { public static void main(String args[]) { Memo np = new Memo(); AdapterTest at = new AdapterTest(); np.addWindowListener(at); np.setSize(600,450); np.setVisible(true); } } class AdapterTest extends WindowAdapter { public void windowClosing(WindowEvent e){ System.exit(0); } }
public void windowClosed(WindowEvent we) {} public void windowOpened(WindowEvent we) {} public void windowIconified(WindowEvent we) {} public void windowDeiconified(WindowEvent we) {} public void windowDeactivated(WindowEvent we) {} public void windowActivated(WindowEvent we) {} public void loadFile(String fn) { //파일을 읽어 들이는 메서드를 정의한다. File file = new File(fn); FileReader fr = null; BufferedReader br = null; try { fr = new FileReader(file); br = new BufferedReader(fr); String str = null; ta.setText(""); while((str=br.readLine())!=null) { ta.append(str+"\n"); 핵심 } }catch(IOException ioe) { } filename = fn; setTitle(fn); }
TextArea • 여러 줄로 이루어진 문자를 보여주는 역할을 한다. • 수직 스크롤바, 수평 스크롤바를 부여할 수 있다.
생성자 • TextArea() • 내용이 없는 텍스트영역을 표현한다. 기본적으로 수평 및 수직 스크롤바를 가지고 있다. • TextArea(String text) • 인자의 값을 텍스트 영역에 표현한다. 기본적으로 수평 및 수직 스크롤바를 가지고 있다. • TextArea(int rows, int columns) • 행의 개수 rows, 열의 개수 columns 만큼의 사이즈로 표현된 텍스트 영역을 나타낸다. • TextArea(String text, int rows, int columns) • 행의 개수 rows, 열의 개수 columns 만큼의 사이즈로 표현된 텍스트 영역을 나타내며, 인자 text의 내용을 텍스트 영역에 나타낸다. • TextArea(String text, int rows, int columns, int scrollbars) • 행의 개수 rows, 열의 개수 columns 만큼의 사이즈로 표현된 텍스트 영역을 나타내며, 인자 text의 내용을 텍스트 영역에 나타낸다. 그리고 인자 scrollbars에서 표현한 스크롤바를 가진다.
import java.awt.*; public class Memo extends Frame { private TextArea ta = null; private String str= "텍스트 영역과 관련된 클래스 사용"; public Memo() { ta = new TextArea(str, 50, 50, TextArea.SCROLLBARS_HORIZONTAL_ONLY); add(ta, BorderLayout.CENTER); } public static void main(String args[]) { Memo np = new Memo(); np.setSize(600,450); np.setVisible(true); } }
TextArea의 편집 메서드 • append (String str) • 텍스트 영역내 현재의 텍스트에 지정된 텍스트를 추가합니다. • insert (String str, int pos) • 텍스트 영역내의 지정된 위치에 지정된 텍스트를 삽입합니다. • setRows(int rows) • getRows() • setColumns(int columns) • getColumns() • getScrollbarVisibility() • 현재의 텍스트 영역에서 사용중인 스크롤바의 형태를 반환해 준다.
public void saveFile(String fn) { File file = new File(fn); try { FileOutputStream fos = new FileOutputStream(file); PrintStream ps = new PrintStream(fos); ps.print( ta.getText() ); }catch(IOException ioe) { } filename = fn; setTitle(fn); } public void newFile() { filename = "새파일"; ta.setText(""); setTitle(filename); } public static void main(String args[]) { Memojang mj = new Memojang(); mj.setSize(600,450); mj.setVisible(true); } }
import java.awt.*; import java.awt.event.*; class MemoActionListener implements ActionListener { private TextArea ta = null; private FileDialog fd = null; private Memojang frm = null; public MemoActionListener(Memojang frm, FileDialog fd) { this.frm = frm; this.ta = ta; this.fd = fd; } public void actionPerformed(ActionEvent e) { String cmd = e.getActionCommand(); String filename = null; if(cmd.equals("열기")) { fd.setTitle("읽을 파일을 선택하세요."); fd.setVisible(true); filename = fd.getDirectory()+fd.getFile(); frm.setTitle(filename); frm.loadFile(filename); //파일의 내용을 텍스트 영역에 적는다. }
else if(cmd.equals("저장")) { fd.setTitle("저장할 파일을 선택하세요."); fd.setVisible(true); filename = fd.getDirectory()+fd.getFile(); frm.saveFile(filename); } else if(cmd.equals("종료")) { System.exit(0); } else { frm.newFile(); } } }
Menu • MenuItem에 의해 발생되는 이벤트는 ActionEvent 뿐이다. 따라서 메뉴 항목에 대한 이벤트를 처리하기 위해서는 ActionListener 클래스를 이용해야 한다. • 하부 메뉴 만들기 예. MenuBar mbar = new MenuBar(); Menu menu = new Menu("Edit"); Menu menusub = new Menu("Delete"); menu.add(menusub); mbar.add(menu);
import java.awt.*; public class Memo2 { public Memo2() { Frame frame = new Frame(); TextArea ta = new TextArea(); frame.add(ta,"Center"); MenuBar mbar = new MenuBar(); Menu menu = new Menu("Edit"); Menu menusub = new Menu("Delete"); MenuItem mitem1 = new MenuItem("Delete Line"); MenuItem mitem2 = new MenuItem("Delete Words"); menusub.add(mitem1); menusub.add(mitem2); menu.add(menusub); menu.addSeparator(); MenuItem mitem3 = new MenuItem("Select"); MenuItem mitem4 = new MenuItem("Append"); menu.add(mitem3); menu.add(mitem4); mbar.add(menu); frame.setMenuBar(mbar); frame.setSize(600,500); frame.setVisible(true); }
public static void main(String[] args) { Memo2 memo = new Memo2(); } }
import java.awt.*; public class Memo3 { public Memo3() { Frame frame = new Frame(); TextArea ta = new TextArea(); frame.add(ta,"Center"); MenuBar mbar = new MenuBar(); Menu menu = new Menu("View"); menu.add(new CheckboxMenuItem("Ruler")); menu.add(new CheckboxMenuItem("Line Number")); mbar.add(menu); frame.setMenuBar(mbar); frame.setSize(600,500); frame.setVisible(true); } public static void main(String[] args) { Memo3 memo = new Memo3(); } }