Swing实现简单记事本

这里Swing实现记事本,我只是简单的实现了打开,保存,和另存为的功能。这里比较难的就是保存功能了,因为这里需要一个判断,如果这个文件已经打开过或者已经另存为过,那么当我们去保存的时候,就不会显示文件筛选菜单而是直接保存到这个文件中。如果这个文件没有打开过也没有另存为过,那么就要打开文件筛选器选择文件位置和规定文件名。
接下来直接看源码:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;

import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

/**
 * 记事本
 * @author Hercules
 *
 */
public class Notepad extends JFrame{

	public Notepad() {
		init();
	}
	
	private JTextArea textArea;
	
	private File curFile;//当前打开的文件
	
	public void init() {
		setTitle("记事本");
		setSize(400, 500);
		setLocationRelativeTo(null);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		textArea = new JTextArea();
		textArea.addKeyListener(new KeyAdapter() {
			@Override
			public void keyPressed(KeyEvent e) {
				super.keyPressed(e);
				if(e.isControlDown()) {//ctrl按下
					if(e.getKeyCode() == KeyEvent.VK_O) {//按下了o
						open();
					}else if(e.getKeyCode() == KeyEvent.VK_S) {
						save();
					}
				}
			}
		});
		//添加一个滚动条
		JScrollPane jScrollPane = new JScrollPane(textArea);
		add(jScrollPane);
		//上面的菜单栏
		JMenuBar menuBar = new JMenuBar();
		setJMenuBar(menuBar);
		JMenu file = new JMenu("file");
		menuBar.add(file);
		//打开
		JMenuItem open = new JMenuItem("open");
		open.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				open();
			}
		});
		file.add(open);
		//保存
		JMenuItem save = new JMenuItem("save");
		save.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				save();
			}
		});
		file.add(save);
		//另存为
		JMenuItem saveAs = new JMenuItem("saveAs");
		saveAs.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				saveAs();
			}
		});
		file.add(saveAs);
		setVisible(true);
	}
	/**
	 * 打开
	 */
	public void open() {
		JFileChooser fileChooser = new JFileChooser();
		fileChooser.showOpenDialog(null);
		File file = fileChooser.getSelectedFile();
		if(file != null) {
			curFile = file;//打开的时候,当前打开的文件就是选中的文件
			Reader reader = null;
			BufferedReader br = null;
			StringBuilder sb = new StringBuilder();
			try {
				reader = new FileReader(file);
				br = new BufferedReader(reader);
				String str = null;
				while ((str = br.readLine()) != null) {
					sb.append(str);
					sb.append("\n");
				}
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			} finally {
				if(br != null) {
					try {
						br.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
				if(reader != null) {
					try {
						reader.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}
			textArea.setText(sb.toString());
		}
	}
	/**
	 * 保存
	 */
	public void save() {
		if(curFile != null) {
			writeFile(curFile);
		}else {
			saveAs();
		}
	}
	
	/**
	 * 另存为
	 */
	public void saveAs() {
		JFileChooser fileChooser = new JFileChooser();
		fileChooser.showSaveDialog(null);
		File file = fileChooser.getSelectedFile();
		if(file != null) {
			//另存为的时候,另存为的文件就是当前打开的文件
			curFile = file;
			writeFile(file);
		}
	}
	
	
	
	/**
	 * 文件写出
	 * @param file
	 */
	private void writeFile(File file) {
		Writer writer = null;
		BufferedWriter bw = null;
		try {
			writer = new FileWriter(file);
			bw = new BufferedWriter(writer);
			bw.write(textArea.getText());
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if(bw != null) {
				try {
					bw.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			if(writer != null) {
				try {
					writer.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
	
	
	
	
	public static void main(String[] args) {
		try {
			//设置windows自带的主题
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (UnsupportedLookAndFeelException e) {
			e.printStackTrace();
		}
		new Notepad();
	}
}

随后是运行结果:
这是主页面:
在这里插入图片描述
而后可以检验一下滚动条功能:
在这里插入图片描述
可以看到这两边都生成了滚动条

而后再跑一个打开文件功能,比如就打开我桌面上的这个文件:
在这里插入图片描述
下面选择打开功能
这是一个文件筛查界面:
在这里插入图片描述
接下来是打开后的效果:
在这里插入图片描述
可以看到我的文本成功打开了。

而后再跑一下保存功能:
我在文本域编辑一些文字,加上一些换行
如下:
在这里插入图片描述
因为这是第一次保存所以单击保存如下:
在这里插入图片描述
文本文件图标如下:
在这里插入图片描述
打开文本文件j.txt文件内容结果如下:
在这里插入图片描述
接下来再在记事本中加入一些内容:
在这里插入图片描述
再点击保存就不会再打开文件筛查器,而是直接保存到j.txt中,而后再打开j.txt结果如下:
在这里插入图片描述
最后再跑一个另存为功能,就将原来内容存在桌面上命名为k.txt:
在这里插入图片描述
内容如下:
在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值