자바 awt 메모장 만들기(입출력 처리 미완성) JAVA

/////////////////////////////////////////////기본 틀 생성
package memo;

import memo.event.*;
import java.awt.Frame;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.TextArea;

public class JavaMemo extends Frame {

//public 을 붙이면 사용 가능하나
//파일 메뉴에 들어갈 메뉴 아이템
private MenuItem miNewWrite, miFileOpen, miFileSave, miFileSaveAs,miMemoEnd;
//서식에 들어갈 메뉴 아이템
private MenuItem miFontForm;
//도움말
private MenuItem miMemoHelp;

private TextArea writeField;
private JavaMemo() {
super("자바메모장 - [제목 없음]");
//메뉴바 생성
MenuBar mb = new MenuBar();
//메뉴 생성
Menu fileMenu = new Menu("파일");
Menu formMenu =new Menu("서식");
Menu helpMenu = new Menu("도움말");
///////메뉴 아이템 생성
miNewWrite = new MenuItem("새글");
miFileOpen = new MenuItem("열기");
miFileSave = new MenuItem("저장");
miFileSaveAs = new MenuItem("다른이름으로 저장");
miMemoEnd = new MenuItem("종료");
//서식에 들어갈 메뉴 아이템
miFontForm = new MenuItem("글꼴");
//도움말
miMemoHelp = new MenuItem("도움말");

writeField = new TextArea();
///////////메뉴바/////////////
mb.add(fileMenu);
mb.add(formMenu);
mb.add(helpMenu);
//////////////파일/////////////////////////////
fileMenu.add(miNewWrite);

//구분선 separator 추가
fileMenu.addSeparator();
fileMenu.add(miFileOpen);
fileMenu.addSeparator();//=add("-"); awt에서만 가능
fileMenu.add(miFileSave);
fileMenu.add(miFileSaveAs);
fileMenu.addSeparator();
fileMenu.add(miMemoEnd);
///////////////서식///////////////////////////
formMenu.add(miFontForm);
/////////////////도움말///////////////////////
helpMenu.add(miMemoHelp);

setMenuBar(mb);
add("Center",writeField);
//이벤트 등록

//이벤트를 등록하기 위해서 이벤트 처리클래스를 생성
MemoEvt me = new MemoEvt(this);//현재 인스턴스를 가리키기 위해 this 사용

//윈도우 이벤트 등록
addWindowListener(me);

//액션이벤트 등록(메뉴아이템을 클릭했을때)
miNewWrite.addActionListener(me);
miFileOpen.addActionListener(me);
miFileSave.addActionListener(me);
miFileSaveAs.addActionListener(me);
miMemoEnd.addActionListener(me);
miFontForm.addActionListener(me);
miMemoHelp.addActionListener(me);


///////윈도우 크기////////////
setBounds(10,40,600,400);
setVisible(true);

}

public MenuItem getMiNewWrite() {
return miNewWrite;
}
public MenuItem getMiFileOpen() {
return miFileOpen;
}
public MenuItem getMiFileSave() {
return miFileSave;
}
public MenuItem getMiFileSaveAs() {
return miFileSaveAs;
}
public MenuItem getMiMemoEnd() {
return miMemoEnd;
}
public MenuItem getMiFontForm() {
return miFontForm;
}
public MenuItem getMiMemoHelp() {
return miMemoHelp;
}
public TextArea getWriteField() {
return writeField;
}

public static void main(String[] args) {
new JavaMemo();
}//main
}//class

///////////////////////////////////////////////////////기본틀 이벤트 처리
package memo.event;
import java.awt.FileDialog;
import java.awt.TextArea;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import memo.Form;
import memo.Help;
import memo.JavaMemo;

public class MemoEvt extends WindowAdapter implements ActionListener {

JavaMemo jm;

public MemoEvt(JavaMemo jm){
this.jm=jm;
//MemoEvt 클래스에서 디자인 클래스를 사용할수있다.
}//MemoEvt

@Override
public void windowClosing(WindowEvent e) {
//System.exit(0);
jm.dispose();
}//windowClosing

private void newWrite(){
//새글
//글이있는지 판단하고 저장여부를 묻고
//저장 - 파일다이얼로그를 호출하든,
//아니오- 텍스트에어리어의 내용을그냥삭제
//취소- 원래의 상태로 보여준다.

TextArea taTemp=jm.getWriteField();
taTemp.setText("");

//프레임의 타이틀바의 내용을 새글로 변경
jm.setTitle("자바메모장 - [ 새글 ]");

}//newWrite

//열기메서드
private void openFile(){

//텍스트에어리어에 내용이 없으면 열기
//텍스트에어리어에 내용이 있으면
//처음열었을때의 내용과 같으면 그냥 열기
//다르면 저장여부 묻기 (예,아니오,취소)

FileDialog open=new FileDialog(jm,"파일열기",FileDialog.LOAD);
open.setVisible(true);

// String path=open.getDirectory();
String file=open.getFile();

//타이틀바의 내용 변경
if(file != null){
jm.setTitle("자바메모장(열기) - [ "+file+" ]");
}//end if

}//private

//저장
private void saveFile(){
//텍스트에어리어의 내용이 있든 없든 저장다이얼로그띄운다.
//열기를 한후에 저장이 눌리면 현재 연파일명으로 덮어쓰기
//를 한다.
saveDialog();
}//saveFile

//저장다이얼로그를 띄우는 메서드
private void saveDialog(){

FileDialog save=new
FileDialog(jm,"파일저장",FileDialog.SAVE);
save.setVisible(true);

// String path=save.getDirectory();
String file=save.getFile();

if(file != null){
jm.setTitle("자바메모장(저장) - [ " +file+" ]");
}//end if

}//saveDialog

//다름이름으로 저장
private void saveAsFile(){
//모든상황에서 저장다이얼로그를 띄운다
saveDialog();
}//saveAsFile

//종료
private void end(){
//텍스트에어리어에 내용이없으면 그냥 종료
//텍스트에어리어에 내용이있으면
//저장여부를 묻는다. (예,아니오,취소)
//파일이열린상태에서 최초열었을때와 변경된 것이없으면
//그냥 종료, 변경된 내용이있으면 저장여부를 묻는다.
//System.exit(0);
jm.dispose();
}//end
//글꼴
private void fontForm(){
//다이얼로그를 상속받은 클래스를 객체화
new Form(jm);

}//form

//도움말
private void memoHelp(){
new Help(jm);
}//memoHelp

public void actionPerformed(ActionEvent ae) {
if(ae.getSource() == jm.getMiNewWrite()){ //새글
newWrite();
}//end if
if(ae.getSource() == jm.getMiFileOpen()){ //열기
openFile();
}//end if
if(ae.getSource() == jm.getMiFileSave()){ //저장
saveFile();
}//end if
if(ae.getSource() == jm.getMiFileSaveAs()){ //다른이름저장
saveAsFile();
}//end if
if(ae.getSource() == jm.getMiMemoEnd()){ //종료
end();
}//end if
if(ae.getSource() == jm.getFont()){ //글꼴
fontForm();
}//end if
if(ae.getSource() == jm.getMiMemoHelp()){ //도움말
memoHelp();
}//end if

}//actionPerformed

}//class

//////////////////////////////////////////////////////글꼴 다이얼로그 생성
package memo;

import java.awt.Button;
import java.awt.Choice;
import java.awt.Color;
import java.awt.Dialog;
import java.awt.Font;
import java.awt.Label;
import java.awt.List;
import java.awt.TextField;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import memo.event.FontFormEvt;

public class Form extends Dialog {

private JavaMemo jm;

private Label output;
private TextField tfFont, tfStyle, tfSize;
private List listFont, listStyle, listSize;
private Button btAccept, btCancel;



public Form(JavaMemo jm) {

super(jm, "글꼴", true);

Label lbFont = new Label("글꼴 (F):");
Label lbStyle = new Label("글꼴 스타일(Y):");
Label lbSize = new Label("크기(S):");
output = new Label("가나다AaBbYyZz");
// /////////////////textFiled///////////////
tfFont = new TextField();
tfStyle = new TextField();
tfSize = new TextField();

// //////////////////list///////////////
listFont = new List();
listStyle = new List();
listSize = new List();
// listFont에 들어갈 아이템 생성
listFont.add("Dialog");
listFont.add("DialogInput");
listFont.add("Monospaced");
listFont.add("Serif");
listFont.add("SansSerif");
// listStyle에 들어갈 아이템 생성
// System.out.println(Font.PLAIN+" "+Font.BOLD);
//인덱스 번호 확인
listStyle.add("보통");
listStyle.add("굵게");
listStyle.add("기울임꼴");
listStyle.add("굵은 기울임꼴");

//listSize에 글꼴의 크기

for(int i=10;i<41;i+=2){
listSize.add(String.valueOf(i));
}



// 다이얼로그의 기본 배치관리자는 BoardLayout이 기본레이아웃
btAccept = new Button("적용");
btCancel = new Button("취소");

setLayout(null);
// 숙제 각 컴포넌트를 배치

// 배치코드를 넣어주세여
// 윈도우종료 이벤트만 처리

// 프레임(부모창),"타이틀바",모달(modal
// 모달 true-자식창이 실행되었을 때 부모창이 선택되지 않는것
// false - 자식창이 실행되었을때 부모창이 선택되는것
this.jm = jm;

// 프레임은 현재 자신의 좌표를 반환하는 메서드가 존재
// X좌표는 getX,Y좌표는 getY()

lbFont.setBounds(15, 35, 100, 20);
lbStyle.setBounds(198, 35, 100, 20);
lbSize.setBounds(335, 35, 100, 20);

tfFont.setBounds(15, 56, 171, 20);
tfStyle.setBounds(198, 56, 126, 20);
tfSize.setBounds(335, 56, 63, 20);

listFont.setBounds(15, 76, 171, 92);
listStyle.setBounds(198, 76, 126, 92);
listSize.setBounds(335, 76, 62, 92);

btAccept.setBounds(405, 56, 80, 25);
btCancel.setBounds(405, 90, 80, 25);

output.setBounds(200, 200, 150, 70);
output.setBackground(new Color(232,232,232));
add(output);
add(lbFont);
add(lbSize);
add(lbStyle);

add(tfFont);
add(tfSize);
add(tfStyle);

add(listFont);
add(listSize);
add(listStyle);

add(btAccept);
add(btCancel);

// 윈도우 종료 이벤트 만 처리 System
FontFormEvt ffe = new FontFormEvt(this);

// 윈도우 이벤트에 객체를 등록 처리할 곳 기술
addWindowListener(ffe);
//리스트 이벤트 등록
listFont.addItemListener(ffe);
listStyle.addItemListener(ffe);
listSize.addItemListener(ffe);
//액션이벤트 등록
btAccept.addActionListener(ffe);
btCancel.addActionListener(ffe);

setBounds(jm.getX() + 50, jm.getY() + 100, 508, 323);
setVisible(true);

}
//getter를 만든 목적은 이벤트처리클래스나(외부클래스에서)
//현재클래스의 인스턴스 필드에 선언한 변수(객체)
public JavaMemo getJm() {
return jm;
}
public Label getOutput() {
return output;
}
public TextField getTfFont() {
return tfFont;
}
public TextField getTfStyle() {
return tfStyle;
}
public TextField getTfSize() {
return tfSize;
}
public List getListFont() {
return listFont;
}
public List getListStyle() {
return listStyle;
}
public List getListSize() {
return listSize;
}
public Button getBtAccept() {
return btAccept;
}
public Button getBtCancel() {
return btCancel;
}
}
////////////////////////////////////////////////////////글꼴 다이얼로그 이벤트 처리
package memo.event;

import java.awt.Font;
import java.awt.List;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import memo.Form;

public class FontFormEvt extends WindowAdapter
implements ActionListener,ItemListener {

Form form;
//이벤트처리클래스가 생성되면 부모창의 텍스트 에어리어의
//글꼴정보를 저장하는 변수
Font jmTextArea;

String temp_font="";//사용자가 선택한 글꼴을 저장
int temp_style=0,temp_size=0;//사용자가 선택한 스타일,크기

public FontFormEvt(Form form){
this.form=form;
//메모장클래스의 텍스트에어리어의 글꼴정보를 얻는다.
jmTextArea=form.getJm().getWriteField().getFont();
temp_font=jmTextArea.getFamily();
temp_style=jmTextArea.getStyle();
temp_size=jmTextArea.getSize();

//디자인클래스의 텍스트필드에 부모창에서 얻어낸 폰트정보를
//설정한다.
form.getTfFont().setText(temp_font);
form.getTfStyle().setText(
form.getListStyle().getItem(temp_style));
form.getTfSize().setText(String.valueOf(temp_size));


}//FontFormEvt
@Override
public void windowClosing(WindowEvent we){
//System.exit(0);
//현재 JVM에 올라와있는 모든 인스턴스를 종료시킨다.
//윈도우컴포넌트에는 dispose메서드가 존재해서
//현재 인스턴스만 종료 시킬 수 있다.
form.dispose();
}//windowClosing
@Override
public void windowClosed(WindowEvent we){

//윈도우 종료시 가장 마지막으로 해야할 일이 있다면
//처리하는 메서드
//System.out.println("windowClosed");
}//windowClosed


//리스트에서 이벤트가 발생했다
public void itemStateChanged(ItemEvent ie) {


//글꼴리스트가 선택
if(ie.getSource() == form.getListFont()){
//리스트의 선택된 값을 텍스트 필드에 기록
//form.getTfFont().setText(form.getListFont().getSelectedItem());
//디자인 클래스에서 텍스트필드를 얻어오고
TextField tfTemp=form.getTfFont();
//디자인 클래스에서 리스트를 얻어오고
List listTemp=form.getListFont();
//리스트에 현재사용자가 선택한 아이템값을 얻어와서
String str=listTemp.getSelectedItem();
//디자인클래스의 텍스트필드에 넣어준다.
tfTemp.setText(str);

//출력라벨에 폰트를 변경하기위해서 변수에 저장
temp_font=str;

}//end if

//스타일리스트가 선택
if(ie.getSource() == form.getListStyle()){
//리스트에 선택된 값을 텍스트필드에 넣어준다.
form.getTfStyle().setText(
form.getListStyle().getSelectedItem());
//출력라벨에 스타일을 변경하기위해서 변수에 저장
temp_style=form.getListStyle().getSelectedIndex();

}//end if

//크기 리스트가 선택
if(ie.getSource() == form.getListSize()){
//리스트에 선택된 값을 텍스트필드에 넣어준다.
form.getTfSize().setText(
form.getListSize().getSelectedItem());
//출력라벨에 크기를 변경하기위해서 변수에 저장
temp_size=Integer.parseInt(
form.getListSize().getSelectedItem());
}//end if

//디자인클래스의 output라벨의 텍스트를 변경해서 미리보기를
//구현한다.
Font font=new Font(temp_font,temp_style,temp_size);
form.getOutput().setFont(font);

}//itemStateChanged
//버튼에서 이벤트가 발생했다.
public void actionPerformed(ActionEvent ae) {

//적용눌리면 부모창의 텍스트에어리어에 현재 설정을
//저장한후 종료
if( ae.getSource() == form.getBtAccept()){
form.getJm().getWriteField().setFont(
new Font(temp_font, temp_style, temp_size));
/* //폰트클래스를 사용자가 선택한 설정으로 생성
Font setting=new Font(temp_font, temp_style, temp_size);
//부모창의 텍스트에어리어를 얻어온 후
TextArea jmWriteField=form.getJm().getWriteField();
//생성된 폰트를 부모창의 텍스트에어리어에 설정한다.
jmWriteField.setFont(setting);
*/
}//end if
//취소가 눌리면 그냥 종료

form.dispose();
}//actionPerformed

}//class

//////////////////////////////////////도움말 다이얼로그 생성
package memo;

import java.awt.Button;
import java.awt.Dialog;
import java.awt.List;

import javax.swing.ImageIcon;
import javax.swing.JLabel;

import memo.event.HelpEvt;

public class Help extends Dialog {

public Help(JavaMemo jm){
super(jm,"도움말",true);
String path=
"D:/memo/img.jpg";
ImageIcon img=new ImageIcon(path);
JLabel label=new JLabel(img);
List msg=new List();
msg.add("자바 메모장");
msg.add("");
msg.add("제작자 : James Dean");
msg.add("자바로 만든 메모장 입니다. 아무나 가져다쓰세요");
msg.add("Ver 1.0 라이센스없슴, 업데이트없슴");

Button bt=new Button("종료");

setLayout(null);

label.setBounds(10, 40, 100, 144);
msg.setBounds(115, 40, 300 , 100);
bt.setBounds(350, 150, 50, 20);

add(label);
add(msg);
add(bt);

//이벤트 등록
HelpEvt he = new HelpEvt(this);
//윈도우 이벤트 등록
addWindowListener(he);
//액션 이벤트 등록
bt.addActionListener(he);

setBounds(jm.getX()+100, jm.getY()+100, 425, 200);
setVisible(true);
setResizable(false);

}//Help
}//class

/////////////////////////////////////////////////////다이얼로그 이벤트 처리
package memo.event;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;

import memo.Help;

public class HelpEvt extends WindowAdapter implements ActionListener {
Help help;

public HelpEvt(Help help) {
this.help = help;
}

public void actionPerformed(ActionEvent e) {
help.dispose();

}// acPer
}// class








트랙백

이 글과 관련된 글 쓰기 (트랙백 보내기)
TrackbackURL : http://Ymoons.egloos.com/tb/84716 [도움말]

덧글

댓글 입력 영역