전체적인 내용은 AWT 프레임 형태가 대부분이고..

메모장 기능을 위해 JAVA 의 스트림 관련 기능과 FileDialog 를 사용해보기 위해 오래전에 연습용으로 만들었던 주석도 없는 썰렁한 코드들 입니다.. ^^;


AWT, Swing 을 지원하는 JVM 환경에서 동작합니다..
윈도우에서만 테스트해봤지만 아마 JVM 이 설치된 OS 에서는 대부분 그럭저럭 동작하리라 예상됩니다.. ^^;


즐거운 하루 되세요..



import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/**
작성자: JK
작성일: 2007. 11. 26.
기 능: 파일 한줄씩 읽는 답답시러운 장난감 메모장..
*/

 

class Note extends JFrame //단순한 메모장이라 주요 기능에 실제로 쓰이는건 AWT Frame이지만 Swing컴포넌트 추가할 시 사용하기 위해 JFrame을 그냥 로딩함.. 쓸데없어질 경우 Frame로딩..
{
 MenuBar mb;
 Menu file, theme;
 MenuItem mNew, mOpen, mSave, mSColor, mTGray, mTRed, mTBlue, mTWhite, mExit;
 TextArea ta;
 Label lb;
 int tBr=255, tBg=255, tBb=255, tFr=0, tFg=0, tFb=0, lBr=20, lBg=20, lBb=20, lFr=255, lFg=255, lFb=255;

 Colors cr=new Colors();

 /**생성자
 */
 public Note()
 {
  super("Note..");

  mb=new MenuBar();
  setMenuBar(mb);
  file=new Menu("파일");
  mb.add(file);
  mNew=new MenuItem("새 파일", new MenuShortcut('N'));
  mOpen=new MenuItem("열기", new MenuShortcut('O'));
  mSave=new MenuItem("저장", new MenuShortcut('S'));
  mExit=new MenuItem("종료", new MenuShortcut('X', true));

  file.add(mNew);
  file.add(mOpen);
  file.add(mSave);
  file.addSeparator();
  file.add(mExit);

  theme=new Menu("테마");
  mb.add(theme);
  //mSColor=new MenuItem("색 조절");
  mTGray=new MenuItem("dark");
  mTRed=new MenuItem("darkRed");
  mTBlue=new MenuItem("darkBlue");
  mTWhite=new MenuItem("white");

  //theme.add(mSColor);
  //theme.addSeparator();
  theme.add(mTGray);
  theme.add(mTRed);
  theme.add(mTBlue);
  theme.add(mTWhite);

  ta=new TextArea("", 7, 50); //간간히 나오는 Frame설정과 Color와 관련된 소스는 쓰잘데기 없을 수 있으니 이해안될 경우 신경쓰지 말기를..
  //ta.setBackground(new Color(tBr, tBg, tBb));
  //ta.setForeground(new Color(tFr, tFg, tFb));
  add(ta);

  lb=new Label(" Edit..", Label.LEFT);
  //lb.setBackground(new Color(lBr, lBg, lBb));
  //lb.setForeground(new Color(lFr, lFg, lFb));
  add(lb, "South");

  cr.mTBlue();

  MyHandler mh=new MyHandler();
  mNew.addActionListener(mh);
  mOpen.addActionListener(mh);
  mSave.addActionListener(mh);
  mExit.addActionListener(mh);
  mTGray.addActionListener(mh);
  mTRed.addActionListener(mh);
  mTBlue.addActionListener(mh);
  mTWhite.addActionListener(mh);

  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  //addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {System.exit(0);}});
 }

 class Colors
 {
  public void mTGray()
  {
   tBr=33; tBg=33; tBb=33; tFr=151; tFg=151; tFb=151; lBr=25; lBg=28; lBb=31; lFr=246; lFg=246; lFb=246;
   ta.setBackground(new Color(tBr, tBg, tBb));
   ta.setForeground(new Color(tFr, tFg, tFb));
   lb.setBackground(new Color(lBr, lBg, lBb));
   lb.setForeground(new Color(lFr, lFg, lFb));
  }
  public void mTRed()
  {
   tBr=102; tBg=0; tBb=0; tFr=241; tFg=41; tFb=56; lBr=32; lBg=8; lBb=9; lFr=255; lFg=204; lFb=204;
   ta.setBackground(new Color(tBr, tBg, tBb));
   ta.setForeground(new Color(tFr, tFg, tFb));
   lb.setBackground(new Color(lBr, lBg, lBb));
   lb.setForeground(new Color(lFr, lFg, lFb));
  }
  public void mTBlue()
  {
   tBr=54; tBg=66; tBb=74; tFr=165; tFg=172; tFb=176; lBr=27; lBg=35; lBb=42; lFr=255; lFg=255; lFb=255;
   ta.setBackground(new Color(tBr, tBg, tBb));
   ta.setForeground(new Color(tFr, tFg, tFb));
   lb.setBackground(new Color(lBr, lBg, lBb));
   lb.setForeground(new Color(lFr, lFg, lFb));
  }
  public void mTWhite()
  {
   tBr=255; tBg=255; tBb=255; tFr=0; tFg=0; tFb=0; lBr=20; lBg=20; lBb=20; lFr=255; lFg=255; lFb=255;
   ta.setBackground(new Color(tBr, tBg, tBb));
   ta.setForeground(new Color(tFr, tFg, tFb));
   lb.setBackground(new Color(lBr, lBg, lBb));
   lb.setForeground(new Color(lFr, lFg, lFb));
  }
 }

 /**이벤트 처리용 이너 클래스
 */
 class MyHandler implements ActionListener
 {
  Colors cr=new Colors();

  public void actionPerformed(ActionEvent e)
  {
   Object o=e.getSource();

   String gf, gd, line="";

   if (o==mNew)
   {
    ta.setText("");
    lb.setText(" Edit..");
   }
   else if (o==mOpen)
   {
    FileDialog fd=new FileDialog(Note.this, "열기");
    fd.setVisible(true);

    gf=fd.getFile(); //파일 다어얼로그를 사용해 파일명과 디렉토리명을 얻어온다.
    gd=fd.getDirectory();

    ta.setText(""); //append()로 한줄씩 출력하는 방식이라 파일을 읽어 들일 시 새로운 내용을 출력하기 위해 초기화.

    try{
     BufferedReader brf=new BufferedReader(new FileReader(gd+gf)); //파일명을 파일리더를 통해 버퍼드리더에 넣는다.
     while ((line=brf.readLine())!=null)
     {
      ta.append(line+"\n"); //한줄씩 TextArea에 출력한다.
     }
     brf.close(); //버퍼드리더를 닫는다.
    } catch (IOException ioe) {ioe.printStackTrace();}

    if (gf==null) lb.setText(" Edit..");
    else lb.setText(" Opened: "+gd+gf);
   }
   else if (o==mSave)
   {
    FileDialog fd=new FileDialog(Note.this, "저장", FileDialog.SAVE);
    fd.setVisible(true);

    gf=fd.getFile();
    gd=fd.getDirectory();

    String bd=ta.getText(); //TextArea에 적힌 내용을 스트링형 변수에 담는다.

    try
    {
     BufferedReader br=new BufferedReader(new StringReader(bd)); //스트링리더로 읽은 내용을 버퍼드리더에 담고 버퍼드라이터를 통해 파일라이터로 연결해서 파일로 출력한다.
     BufferedWriter bw=new BufferedWriter(new FileWriter(gd+gf));
     while ((line=br.readLine())!=null)
     {
      bw.write(line);
      bw.newLine(); //줄바꾸기.
      bw.flush();
     }
     br.close();
     bw.close();
    } catch (IOException ioe) {ioe.printStackTrace();}

    lb.setText(" Saved: "+gd+gf);
   }
   else if (o==mExit)
   {
    lb.setText(" Exit..");
    System.exit(0);
   }
   else if (o==mTGray)
   {
    cr.mTGray();
   }
   else if (o==mTRed)
   {
    cr.mTRed();
   }
   else if (o==mTBlue)
   {
    cr.mTBlue();
   }
   else if (o==mTWhite)
   {
    cr.mTWhite();
   }
  }
 }

 public static void main(String[] args)
 {
  Note note=new Note();
  note.setSize(700, 650);
  note.setVisible(true);
 }
}

Note.java
Note.class