이번 시간에는 자바에서 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);
}
}


댓글 없음:
댓글 쓰기