Language/JAVA

[JAVA] 메모장(notepad) 만들기 - 열기, 저장, 새 파일, 종료 메서드 구현 ② | Yoon's Dev

Yooniron 2021. 5. 26. 21:56

메모장(notepad) 만들기  - 열기, 저장, 새 파일, 종료 메서드 구현 ②

 

 


TO Do.

 

■ 메모장 제작

 텍스트 파일을 읽고 쓰기 기능 구현

 자바의 입출력 적용

 자바의 그래픽 처리와 이벤트 처리 적용

 


목표:  열기, 저장, 새 파일, 종료 메서드 구현하기

 


1. 메모장의 인터페이스 구현

 

레이아웃은 메모장 만들기 1편의 인터페이스를 참고했습니다. 못 보신 분들은 먼저 1을 보고 와주세요!!

 

[JAVA] 메모장(notepad) 만들기 ① - 인터페이스 구현 | Yoon's Dev

메모장(notepad) 만들기 ① - 인터페이스 구현 TO Do. ■ 메모장 제작 ✓ 텍스트 파일을 읽고 쓰기 기능 구현 ✓ 자바의 입출력 적용 ✓ 자바의 그래픽 처리와 이벤트 처리 적용 목표: 메모장의 인

yooniron.tistory.com

 


 

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(500500);
        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

 

소스에 대해 지적할 사항이나 잘못된 점이 있다면 댓글로 적극적인 피드백 부탁드립니다.!