Java简易记事本

简介: Java作业,写一个简易记事本。 要求: 使用swing编写一个记事本程序。可以打开现有文本文件进行编辑,也可以新建文件进行编辑。新建、打开和保存文件使用菜单实现。如果是新建的文件或者对已有修改过但没有保存,程序将使用对话框提示用户,用户可以选择重新保存或者放弃保存直接退出。

Java作业,写一个简易记事本。

要求:

使用swing编写一个记事本程序。可以打开现有文本文件进行编辑,也可以新建文件进行编辑。新建、打开和保存文件使用菜单实现。如果是新建的文件或者对已有修改过但没有保存,程序将使用对话框提示用户,用户可以选择重新保存或者放弃保存直接退出。(提示,使用JFileChooser类获得打开文件名或者保存文件名,详见API帮助文档)。

这里记录一下步骤。

【1】实现文本区域的现实

 1 package bao;
 2 
 3 import java.awt.BorderLayout;
 4 import java.awt.Container;
 5 import javax.swing.JFrame;
 6 import javax.swing.JScrollPane;
 7 import javax.swing.JTextArea;
 8 import javax.swing.ScrollPaneConstants;
 9 
10 @SuppressWarnings("serial")
11 public class J_Line extends JFrame{
12     public J_Line(){
13         super("NewFile");
14         setUpUIComponent();//添加各个组件
15         setUpEventListener();//添加事件监听器
16         setVisible(true);//窗口可见
17     }
18     private void setUpUIComponent(){
19         setSize(640,480);//设定窗口大小
20         JTextArea textArea=new JTextArea();
21         textArea.setLineWrap(true);//换行
22         
23         JScrollPane panel = new JScrollPane(textArea,
24                   ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
25                   ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);//只有垂直方向滚动条
26         Container contentPane=getContentPane();
27         contentPane.add(panel, BorderLayout.CENTER);
28     
29     }
30     private void setUpEventListener(){
31         //add sth about event listener...
32     }
33     public static void main(String[] args){
34         J_Line app=new J_Line();
35         app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
36     }
37 }

textarea已经显示出来了。

【2】显示菜单栏

这里实现了打开和关闭的菜单操作。

  1 package bao;
  2 
  3 import java.awt.BorderLayout;
  4 import java.awt.Container;
  5 import java.awt.event.ActionEvent;
  6 import java.awt.event.ActionListener;
  7 import java.io.BufferedReader;
  8 import java.io.FileReader;
  9 import java.io.IOException;
 10 import javax.swing.JFileChooser;
 11 import javax.swing.JFrame;
 12 import javax.swing.JMenu;
 13 import javax.swing.JMenuBar;
 14 import javax.swing.JMenuItem;
 15 import javax.swing.JOptionPane;
 16 import javax.swing.JScrollPane;
 17 import javax.swing.JTextArea;
 18 import javax.swing.ScrollPaneConstants;
 19 
 20 @SuppressWarnings("serial")
 21 public class J_Line extends JFrame{
 22     JTextArea textArea;
 23     private JMenuItem menuNewfile;
 24     private JMenuItem menuOpen;
 25     private JMenuItem menuClose;
 26     private JFileChooser fileChooser;
 27     public J_Line(){
 28         super("NewFile");
 29         setUpUIComponent();//添加各个组件
 30         setUpEventListener();//添加事件监听器
 31         setVisible(true);//窗口可见
 32     }
 33     private void setUpUIComponent(){
 34         setSize(640,480);//设定窗口大小
 35         
 36         //text area
 37         textArea=new JTextArea();
 38         textArea.setLineWrap(true);//换行
 39         
 40         JScrollPane panel = new JScrollPane(textArea,
 41                   ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
 42                   ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);//只有垂直方向滚动条
 43         Container contentPane=getContentPane();
 44         contentPane.add(panel, BorderLayout.CENTER);
 45         
 46         //menu bar
 47         JMenuBar menuBar = new JMenuBar();
 48         
 49         JMenu fileMenu = new JMenu("文件");
 50         
 51         menuNewfile = new JMenuItem("新建");
 52       menuOpen = new JMenuItem("打开");
 53       menuClose = new JMenuItem("关闭");
 54       
 55 
 56       fileMenu.add(menuNewfile);
 57       fileMenu.addSeparator(); // 分隔线
 58       fileMenu.add(menuOpen);
 59       fileMenu.addSeparator(); // 分隔线
 60       fileMenu.add(menuClose);
 61       
 62       menuBar.add(fileMenu);
 63       
 64       setJMenuBar(menuBar);
 65       
 66       fileChooser=new JFileChooser();//!!!!!!!!!!
 67     }
 68     
 69     private void setUpEventListener(){
 70         //打开
 71         menuOpen.addActionListener(
 72                 new ActionListener() {
 73                     public void actionPerformed(ActionEvent e) {
 74                         // openFile();
 75                         open();
 76                     }
 77                 }
 78                 );
 79         
 80         menuClose.addActionListener(
 81                 new ActionListener(){
 82                     public void actionPerformed(ActionEvent e){
 83                         dispose();
 84                     }
 85                 }
 86                 );
 87     }
 88     
 89     private void open() {
 90         fileChooser.setDialogTitle("Open file");
 91         fileChooser.showDialog(null, null);
 92         
 93         try {
 94             // 开启选取的文件
 95             BufferedReader buf = 
 96                 new BufferedReader(
 97                    new FileReader(
 98                      fileChooser.getSelectedFile()));
 99 
100             // 设定文件标题
101             setTitle(fileChooser.getSelectedFile().toString());
102             // 清除前一次文件
103             textArea.setText("");
104             // 设定状态栏
105         //    stateBar.setText("未修改");
106             // 取得系统相依的换行字符
107             String lineSeparator = System.getProperty("line.separator");
108             // 读取文件并附加至文字编辑区
109             String text;
110             while((text = buf.readLine()) != null) {
111                 textArea.append(text);
112                 textArea.append(lineSeparator);
113             }
114 
115             buf.close();
116         }   
117         catch(IOException e) {
118             JOptionPane.showMessageDialog(null, e.toString(),
119                 "开启文件失败", JOptionPane.ERROR_MESSAGE);
120         }
121     }
122     
123     public static void main(String[] args){
124         J_Line app=new J_Line();
125         app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
126     }
127 }

 

用清除文本区域内容的方式实现了新建。。。

  1 package bao;
  2 
  3 import java.awt.BorderLayout;
  4 import java.awt.Container;
  5 import java.awt.event.ActionEvent;
  6 import java.awt.event.ActionListener;
  7 import java.awt.event.KeyAdapter;
  8 import java.awt.event.KeyEvent;
  9 import java.awt.event.WindowAdapter;
 10 import java.awt.event.WindowEvent;
 11 import java.io.BufferedReader;
 12 import java.io.BufferedWriter;
 13 import java.io.File;
 14 import java.io.FileReader;
 15 import java.io.FileWriter;
 16 import java.io.IOException;
 17 import javax.swing.BorderFactory;
 18 import javax.swing.JFileChooser;
 19 import javax.swing.JFrame;
 20 import javax.swing.JLabel;
 21 import javax.swing.JMenu;
 22 import javax.swing.JMenuBar;
 23 import javax.swing.JMenuItem;
 24 import javax.swing.JOptionPane;
 25 import javax.swing.JScrollPane;
 26 import javax.swing.JTextArea;
 27 import javax.swing.ScrollPaneConstants;
 28 import javax.swing.SwingConstants;
 29 
 30 @SuppressWarnings("serial")
 31 public class J_Line extends JFrame{
 32     JTextArea textArea;
 33     private JMenuItem menuNewfile;
 34     private JMenuItem menuOpen;
 35     private JMenuItem menuSave;
 36     private JMenuItem menuClose;
 37     private JFileChooser fileChooser;
 38     private JLabel stateBar;
 39     
 40     public J_Line(){
 41         super("NewFile");
 42         setUpUIComponent();//添加各个组件
 43         setUpEventListener();//添加事件监听器
 44         setVisible(true);//窗口可见
 45     }
 46     private void setUpUIComponent(){
 47         setSize(640,480);//设定窗口大小
 48         
 49         //文本区域
 50         textArea=new JTextArea();
 51         textArea.setLineWrap(true);//换行
 52         
 53         JScrollPane panel = new JScrollPane(textArea,
 54                   ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
 55                   ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);//只有垂直方向滚动条
 56         Container contentPane=getContentPane();
 57         contentPane.add(panel, BorderLayout.CENTER);
 58         
 59         //菜单栏
 60         JMenuBar menuBar = new JMenuBar();
 61         
 62         JMenu fileMenu = new JMenu("文件");
 63         
 64         menuNewfile = new JMenuItem("新建");
 65       menuOpen = new JMenuItem("打开");
 66       menuSave = new JMenuItem("保存");
 67       menuClose = new JMenuItem("关闭");
 68       
 69 
 70       fileMenu.add(menuNewfile);
 71       fileMenu.addSeparator(); // 分隔线
 72       fileMenu.add(menuOpen);
 73       fileMenu.addSeparator(); // 分隔线
 74       fileMenu.add(menuSave);
 75       fileMenu.addSeparator();// 分隔线
 76       fileMenu.add(menuClose);
 77       
 78       menuBar.add(fileMenu);
 79       
 80       setJMenuBar(menuBar);
 81       
 82       fileChooser=new JFileChooser();//!!!!!!!!!!
 83       
 84       // 状态栏
 85       stateBar = new JLabel("未修改");
 86       stateBar.setHorizontalAlignment(SwingConstants.LEFT); 
 87       stateBar.setBorder(
 88               BorderFactory.createEtchedBorder());
 89       contentPane.add(stateBar, BorderLayout.SOUTH);       
 90       
 91       fileChooser = new JFileChooser();
 92     }
 93     
 94     private void setUpEventListener(){
 95         //X关闭
 96         addWindowListener(
 97                 new WindowAdapter() {
 98                     public void windowClosing(WindowEvent e) { 
 99                         closeFile();
100                     }
101                 }
102                 );
103         //新建
104         menuNewfile.addActionListener(
105                 new ActionListener(){
106                     public void actionPerformed(ActionEvent e){
107                         newFile();
108                     }
109                 }
110                 );
111         //打开
112         menuOpen.addActionListener(
113                 new ActionListener() {
114                     public void actionPerformed(ActionEvent e) {
115                         // openFile();
116                         openFile();
117                     }
118                 }
119                 );
120         //保存
121         menuSave.addActionListener(
122                 new ActionListener() {
123                     public void actionPerformed(ActionEvent e) {
124                         saveFile();
125                     }
126                 }
127             );
128         //关闭
129         menuClose.addActionListener(
130                 new ActionListener() {
131                     public void actionPerformed(ActionEvent e) {
132                         closeFile();
133                     }
134                 }
135             );
136         //状态
137         textArea.addKeyListener(
138                 new KeyAdapter() {
139                     public void keyTyped(KeyEvent e) {
140                         processTextArea();
141                     }
142                 }
143             );
144     }
145     
146     private void open() {
147         fileChooser.setDialogTitle("Open file");
148         int option=fileChooser.showDialog(null, null);
149         // 使用者按下确认键
150         if(option == JFileChooser.APPROVE_OPTION) {
151             try {
152                 // 开启选取的文件
153                 BufferedReader buf = 
154                     new BufferedReader(
155                        new FileReader(
156                          fileChooser.getSelectedFile()));
157     
158                 // 设定文件标题
159                 setTitle(fileChooser.getSelectedFile().toString());
160                 // 清除前一次文件
161                 clearTextArea();
162                 // 设定状态栏
163             //    stateBar.setText("未修改");
164                 // 取得系统相依的换行字符
165                 String lineSeparator = System.getProperty("line.separator");
166                 // 读取文件并附加至文字编辑区
167                 String text;
168                 while((text = buf.readLine()) != null) {
169                     textArea.append(text);
170                     textArea.append(lineSeparator);
171                 }
172     
173                 buf.close();
174             }   
175             catch(IOException e) {
176                 JOptionPane.showMessageDialog(null, e.toString(),
177                     "开启文件失败", JOptionPane.ERROR_MESSAGE);
178             }
179         }
180     }
181     private boolean isCurrentFileSaved() {
182         if(!stateBar.getText().equals("未修改")) {
183             return false;
184         }
185         else {
186             return true;
187         }
188     }
189     private void saveFile() {
190         // 从标题栏取得文件名称
191         File file = new File(getTitle());
192 
193         // 若指定的文件不存在
194         if(!file.exists()) {
195             // 执行另存为
196             saveFileAs();
197         }
198         else {
199             try {
200                 // 开启指定的文件
201                 BufferedWriter buf = 
202                     new BufferedWriter(
203                             new FileWriter(file));
204                 // 将文字编辑区的文字写入文件
205                 buf.write(textArea.getText());
206                 buf.close();
207                 // 设定状态栏为未修改
208                 stateBar.setText("未修改");
209             }
210             catch(IOException e) {
211                 JOptionPane.showMessageDialog(null, e.toString(),
212                   "写入文件失败", JOptionPane.ERROR_MESSAGE);
213             }
214         }
215     }
216     
217     private void saveFileAs() {
218         // 显示文件对话框
219         int option = fileChooser.showSaveDialog(null);
220 
221         // 如果确认选取文件
222         if(option == JFileChooser.APPROVE_OPTION) {
223             // 取得选择的文件
224             File file = fileChooser.getSelectedFile();
225             
226             // 在标题栏上设定文件名称
227             setTitle(file.toString());
228                 
229             try {
230                 // 建立文件
231                 file.createNewFile();
232                 // 进行文件保存
233                     saveFile();
234             }
235             catch(IOException e) {
236             JOptionPane.showMessageDialog(null, e.toString(),
237                    "无法建立新文件", JOptionPane.ERROR_MESSAGE);
238             }
239         }   
240     }
241     private void closeFile() {
242         // 是否已保存文件
243         if(isCurrentFileSaved()) {
244             // 释放窗口资源,而后关闭程序
245             dispose();
246         }
247         else {
248             int option = JOptionPane.showConfirmDialog(
249                     null, "文件已修改,是否保存?",
250                     "保存文件?", JOptionPane.YES_NO_OPTION, 
251                     JOptionPane.WARNING_MESSAGE, null);
252 
253             switch(option) {
254                 case JOptionPane.YES_OPTION:
255                     saveFile();
256                     break;
257                 case JOptionPane.NO_OPTION:
258                    dispose();
259             }
260         }
261     }
262     private void processTextArea() {
263         stateBar.setText("已修改");
264     }
265     private void openFile() {
266         if(isCurrentFileSaved()) { // 文件是否为保存状态
267             open(); // 打开
268         }
269         else {
270             // 显示对话框
271             int option = JOptionPane.showConfirmDialog(
272                     null, "文件已修改,是否保存?",
273                     "保存文件?", JOptionPane.YES_NO_OPTION, 
274                     JOptionPane.WARNING_MESSAGE, null);
275             switch(option) { 
276                 // 确认文件保存
277                 case JOptionPane.YES_OPTION:
278                     saveFile(); // 保存文件
279                      break;
280                // 放弃文件保存
281                 case JOptionPane.NO_OPTION:
282                     open();
283                     break;
284             }
285         }
286     }
287     private void clearTextArea(){
288           textArea.selectAll();
289           textArea.replaceSelection("");
290           stateBar.setText("未修改");
291     }
292     private void newFile(){
293         if(isCurrentFileSaved()) { // 文件是否为保存状态
294             open(); // 打开
295         }else {
296             // 显示对话框
297             int option = JOptionPane.showConfirmDialog(
298                     null, "文件已修改,是否保存?",
299                     "保存文件?", JOptionPane.YES_NO_OPTION, 
300                     JOptionPane.WARNING_MESSAGE, null);
301             switch(option) { 
302                 // 确认文件保存
303                 case JOptionPane.YES_OPTION:
304                     saveFile(); // 保存文件
305                      break;
306                // 放弃文件保存
307                 case JOptionPane.NO_OPTION:
308                     break;
309                 }
310             clearTextArea();
311         }
312     }
313     public static void main(String[] args){
314         J_Line app=new J_Line();
315         app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
316     }
317 }

 

目录
相关文章
|
7月前
|
Java
Java记事本编写HelloWorld程序
Java记事本编写HelloWorld程序
87 0
|
3月前
|
Java
基于Java Swing实现的日历记事本系统【源码+报告文档】
基于Java Swing实现的日历记事本系统【源码+报告文档】
|
小程序 Java
Java——在命令提示符(cmd)窗口下,使用记事本创建并运行一个Java程序(整数a+b)
Java——在命令提示符(cmd)窗口下,使用记事本创建并运行一个Java程序(整数a+b)
Java——在命令提示符(cmd)窗口下,使用记事本创建并运行一个Java程序(整数a+b)
|
Java
在记事本上实现简单的Java程序及原理解析(Hello World!!!)
在记事本上实现简单的Java程序及原理解析(Hello World!!!)
192 0
在记事本上实现简单的Java程序及原理解析(Hello World!!!)
|
Java
编写Java程序,使用菜单组件制作一个记事本编辑器
编写Java程序,使用菜单组件制作一个记事本编辑器
213 0
编写Java程序,使用菜单组件制作一个记事本编辑器
|
Java Windows
Java初学者作业——使用记事本编写Java程序
Java初学者作业——使用记事本编写Java程序
228 0
Java初学者作业——使用记事本编写Java程序
|
移动开发 Java 存储
杨老师课堂_Java核心技术下之控制台模拟记事本案例
预览效果图: 背景介绍: 编写一个模拟记事本的程序通过在控制台输入指令,实现在本地新建文件打开文件和修改文件等功能。 要求在程序中:   用户输入指令1代表“新建文件”,此时可以从控制台获取用户输入的文件内容;   指令2代表打开文件,此时可将指定路径的txt文件的内容展现到控制台,   指令3代...
1102 0