전체적인 내용은 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