메모장(notepad) 만들기 - 열기, 저장, 새 파일, 종료 메서드 구현 ②
TO Do.
■ 메모장 제작
✓ 텍스트 파일을 읽고 쓰기 기능 구현
✓ 자바의 입출력 적용
✓ 자바의 그래픽 처리와 이벤트 처리 적용
목표: 열기, 저장, 새 파일, 종료 메서드 구현하기
1. 메모장의 인터페이스 구현
레이아웃은 메모장 만들기 1편의 인터페이스를 참고했습니다. 못 보신 분들은 먼저 1을 보고 와주세요!!
2. 클래스 다이어그램
Notepad 클래스 다이어그램
Notepad 클래스의 중요 메서드
메서드 | 기능 |
public Notepad() | 메모장에 필요한 SWING 컴포넌트를 생성하고 배치 |
public void itemAdd(String, Menu) | 메뉴바에 메뉴를 추가 |
public void newFile() | 메모장을 초기화 |
public void loadFile(String) | 파일이름을 인자로 받아 파일 객체와 스트림 객체를 생성하고 내용을 읽어와 텍스트 에어리어에 출력 |
public void saveFile(String) | 텍스트 에어리어의 내용을 인자로 받은 파일이름으로 저장 |
3. Notepad.java
이벤트 처리에 대한 부분은 메모장 만들기 3편에서 작성하려고 합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
package notepad.step02;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
public class Notepad extends JFrame {
// 멤버변수
public JTextArea ta = new JTextArea();
JFileChooser chooser = new JFileChooser();
JMenuBar mb = new JMenuBar();
String fileName = "";
// 생성자
public Notepad() {
this.setTitle("Notepad");
this.setSize(500, 500);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 2. 메뉴생성
String[] smenu = { "파일" };
JMenu[] mfile = new JMenu[10];
for (int i = 0; i < smenu.length; i++) {
mfile[i] = new JMenu(smenu[i]);
mb.add(mfile[i]);
}
String[] ScrItem = { "새파일", "열기", "저장", "다른이름으로저장", "종료" };
JMenuItem[] item = new JMenuItem[5];
for (int i = 0; i < ScrItem.length; i++) {
item[i] = new JMenuItem(ScrItem[i]);
// 1. 이벤트 소스: JMenuItem
// 2. 이벤트 종류: ActionEvent
// 3. 리스너 구현: ActionListener - > 독립리스너
// 4. 리스너 연결
NoteActionListener nal = new NoteActionListener(this);
item[i].addActionListener(nal);
// 4. 메뉴바 설정
this.setJMenuBar(mb);
mfile[0].add(item[i]);
}
// 컴포넌트 추가
this.add(ta);
this.setVisible(true);
}
/* 새파일 */
public void newFile() {
ta.setText("");
}
/* 열기 */
public void openFile() {
int ret = chooser.showOpenDialog(null);
if (ret != JFileChooser.APPROVE_OPTION) {
JOptionPane.showMessageDialog(null, "파일을 선택하지 않았습니다.", "경고", JOptionPane.WARNING_MESSAGE);
return;
} else {
File inFile = chooser.getSelectedFile();
BufferedReader in;
try {
in = new BufferedReader(new FileReader(inFile));
String c;
ta.setText("");
while ((c = in.readLine()) != null) {
ta.append(c + "\r\n");
}
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
fileName = chooser.getSelectedFile().toString();
setTitle(chooser.getSelectedFile().getName());
}
/* 파일 저장 */
public void saveFile(String fn) {
BufferedWriter out = null;
File file = new File(fileName);
try {
out = new BufferedWriter(new FileWriter(file));
out.write(fn);
this.setTitle(file.getName());
out.close();
}
catch(IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new Notepad();
}
}
|
cs |
소스에 대해 지적할 사항이나 잘못된 점이 있다면 댓글로 적극적인 피드백 부탁드립니다.!
'Language > JAVA' 카테고리의 다른 글
[JAVA] UDP 기반 통신 (JAVA 네트워크) | Yoon's Dev (0) | 2021.06.12 |
---|---|
[JAVA] 메모장(notepad) 만들기 - ActionListener 객체의 속성과 동작 구현 ③ | Yoon's Dev (0) | 2021.05.29 |
[JAVA] 메모장(notepad) 만들기 ① - 인터페이스 구현 | Yoon's Dev (0) | 2021.05.25 |
[JAVA] 스트림(Stream) 연산 옵션 타입 | Yoon's Dev (0) | 2021.05.20 |
[JAVA] 스트림(Stream) 연산 느긋한 연산, 조급한 연산, 병렬 처리 | Yoon's Dev (0) | 2021.05.18 |