使用java实现记事本(超详细解释)

实验课老师要求写的,学习了网上n多大佬的博客后,自己写了一个简单的记事本程序
效果图:
在这里插入图片描述
实现代码:

package test;

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;

public class Notepad extends JFrame implements ActionListener {
	private static final long serialVersionUID = -6200727203246728269L;
	JTextArea jTextArea;
	// 文本框组件
	JScrollPane jScrollPane;
	// 滚动条组件
	JToolBar jToolBar;
	// 工具条组件
	JMenuBar jMenuBar;
	// 菜单栏组件
	JMenu jMenu;
	// 菜单组件
	JMenuItem jMenuItem1;
	// 子菜单组件
	JMenuItem jMenuItem2;
	// 子菜单组件
	JFileChooser jFileChooser;
	// 文件选择组件
	JButton jButton1;
	// 按钮组件
	JButton jButton2;
	// 按钮组件
	JButton jButton3;
	// 按钮组件

	FileReader fileReader;
	FileWriter fileWriter;
	// 文件IO流

	BufferedReader bufferedReader;
	BufferedWriter bufferedWriter;
	// 缓存IO流

	public Notepad() {

		jTextArea = new JTextArea();
		// 创建一个文本区域
		jScrollPane = new JScrollPane(jTextArea);
		// 创建一个滚动条,并且加到文本居于上
		jScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
		// 设置滚动条出现方式为“当需要时”

		jToolBar = new JToolBar();
		// 新建一个工具条

		jButton1 = new JButton(new ImageIcon(Notepad.class.getResource("copy.png")));
		// 新建一个按钮,图标为"copy.png"
		jButton1.setActionCommand("复制");
		// 设置按钮命令名称为“复制”
		jButton1.addActionListener(this);
		// 监听“复制”按钮的行为

		jButton2 = new JButton(new ImageIcon(Notepad.class.getResource("paste.png")));
		jButton2.setActionCommand("粘贴");
		jButton2.addActionListener(this);

		jButton3 = new JButton(new ImageIcon(Notepad.class.getResource("cut.png")));
		jButton3.setActionCommand("剪切");
		jButton3.addActionListener(this);

		jToolBar.add(jButton1);
		jToolBar.add(jButton2);
		jToolBar.add(jButton3);
		// 给工具条加上按钮

		jMenuBar = new JMenuBar();
		// 新建菜单栏
		jMenu = new JMenu("文件");
		// 新建菜单,名称为“文件”

		jMenuItem1 = new JMenuItem("打开");
		// 新建子菜单,名称为“打开”
		jMenuItem1.setActionCommand("打开");
		//设置子菜单命令名称为“打开”
		jMenuItem1.addActionListener(this);
		//监听“打开”子菜单的行为
		
		jMenuItem2 = new JMenuItem("保存");
		jMenuItem2.setActionCommand("保存");
		jMenuItem2.addActionListener(this);
		jMenuBar.add(jMenu);
		jMenu.add(jMenuItem1);
		jMenu.add(jMenuItem2);

		this.setJMenuBar(jMenuBar);
		//添加菜单栏
		this.add(jToolBar, BorderLayout.NORTH);
		//在窗口上方添加工具条
		this.add(jScrollPane, BorderLayout.CENTER);
		//添加窗口中间添加滚动条与文本框

		this.setTitle("记事本");
		//设置窗口名称为“记事本”
		this.setSize(700, 800);
		//设置大小
		this.setLocationRelativeTo(null);
		//设置窗口居中显示
		this.setVisible(true);
		//设置窗口可见
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		//设置关闭窗口的方式为关闭进程

	}

	public void actionPerformed(ActionEvent e) {
		//实现ActionListener接口
		String str = e.getActionCommand();
		//得到用户触发的命令
		if (str.equals("打开")) {
			jFileChooser = new JFileChooser();
			//新建文件选择组件
			jFileChooser.setDialogTitle("打开");
			//设置标题为“打开”
			jFileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
			//设置选择文件模式为“只可以选择文件”
			jFileChooser.showOpenDialog(null);
			//设置默认路径为null
			jFileChooser.setVisible(true);
			//设置窗口可见

			String ads = jFileChooser.getSelectedFile().getAbsolutePath();
			//得到选择文件的绝对地址
			
			try {
				fileReader = new FileReader(ads);
				//打开文件
				bufferedReader = new BufferedReader(fileReader);
				String now, all = "";
				while ((now = bufferedReader.readLine()) != null) {//读取文件
					all += now + '\n';
				}
				jTextArea.setText(all);//将读取到的内容显示到文本框中

			} catch (Exception e2) {
				JOptionPane.showMessageDialog(this, e2.getMessage(), "警告", JOptionPane.ERROR_MESSAGE);
				//抛出错误对话框,并显示错误信息
			} finally {
				try {
					bufferedReader.close();//操作完要关闭文件,避免数据丢失
					fileReader.close();
				} catch (Exception e3) {
					JOptionPane.showMessageDialog(this, e3.getMessage(), "警告", JOptionPane.ERROR_MESSAGE);
				}
			}

		}

		if (str.equals("保存")) {
			jFileChooser = new JFileChooser();
			jFileChooser.setDialogTitle("另存为");
			jFileChooser.showOpenDialog(null);
			jFileChooser.setVisible(true);

			String ads = jFileChooser.getSelectedFile().getAbsolutePath();

			try {
				fileWriter = new FileWriter(ads);
				bufferedWriter = new BufferedWriter(fileWriter);

				String all = jTextArea.getText();
				bufferedWriter.write(all);

			} catch (Exception e2) {
				JOptionPane.showMessageDialog(this, e2.getMessage(), "警告", JOptionPane.ERROR_MESSAGE);
			} finally {
				try {
					bufferedWriter.close();
					fileWriter.close();
				} catch (Exception e3) {
					JOptionPane.showMessageDialog(this, e3.getMessage(), "警告", JOptionPane.ERROR_MESSAGE);
				}
			}
		}

		if (str.equals("复制")) {
			try {
				jTextArea.copy();
			} catch (Exception e2) {
				JOptionPane.showMessageDialog(this, e2.getMessage(), "警告", JOptionPane.ERROR_MESSAGE);
			}
		}
		if (str.equals("粘贴")) {
			try {
				jTextArea.paste();
			} catch (Exception e2) {
				JOptionPane.showMessageDialog(this, e2.getMessage(), "警告", JOptionPane.ERROR_MESSAGE);
			}

		}

		if (str.equals("剪切")) {
			try {
				jTextArea.cut();
			} catch (Exception e2) {
				JOptionPane.showMessageDialog(this, e2.getMessage(), "警告", JOptionPane.ERROR_MESSAGE);
			}
		}

	}

	public static void main(String[] args) {
		Notepad notepad = new Notepad();
	}
}

  • 13
    点赞
  • 132
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
实现记事本界面,可以使用 Java Swing GUI 库来构建用户界面。以下是一个简单的记事本界面的实现,包括菜单栏、工具栏、文本区和状态栏等。 ```java import java.awt.*; import java.awt.event.*; import javax.swing.*; public class MyNotepad extends JFrame implements ActionListener { private JTextArea textArea; private JFileChooser fileChooser; private String currentFile = "Untitled"; private boolean isSaved = true; public MyNotepad() { super("My Notepad"); // 创建菜单栏 JMenuBar menuBar = new JMenuBar(); setJMenuBar(menuBar); // 创建文件菜单 JMenu fileMenu = new JMenu("File"); menuBar.add(fileMenu); // 创建打开菜单项 JMenuItem openItem = new JMenuItem("Open"); openItem.addActionListener(this); fileMenu.add(openItem); // 创建保存菜单项 JMenuItem saveItem = new JMenuItem("Save"); saveItem.addActionListener(this); fileMenu.add(saveItem); // 创建另存为菜单项 JMenuItem saveAsItem = new JMenuItem("Save As"); saveAsItem.addActionListener(this); fileMenu.add(saveAsItem); // 添加分隔符 fileMenu.addSeparator(); // 创建退出菜单项 JMenuItem exitItem = new JMenuItem("Exit"); exitItem.addActionListener(this); fileMenu.add(exitItem); // 创建工具栏 JToolBar toolBar = new JToolBar(); add(toolBar, BorderLayout.NORTH); // 创建打开工具按钮 JButton openButton = new JButton(new ImageIcon("open.png")); openButton.addActionListener(this); toolBar.add(openButton); // 创建保存工具按钮 JButton saveButton = new JButton(new ImageIcon("save.png")); saveButton.addActionListener(this); toolBar.add(saveButton); // 添加分隔符 toolBar.addSeparator(); // 创建文本区 textArea = new JTextArea(); add(new JScrollPane(textArea), BorderLayout.CENTER); // 创建状态栏 JLabel statusLabel = new JLabel("Ready"); add(statusLabel, BorderLayout.SOUTH); // 创建文件选择器 fileChooser = new JFileChooser("."); } @Override public void actionPerformed(ActionEvent e) { String command = e.getActionCommand(); if (command.equals("Open")) { int result = fileChooser.showOpenDialog(this); if (result == JFileChooser.APPROVE_OPTION) { String fileName = fileChooser.getSelectedFile().getPath(); currentFile = fileName; setTitle(currentFile); isSaved = true; try { textArea.setText(""); java.io.BufferedReader reader = new java.io.BufferedReader(new java.io.FileReader(fileName)); String line = null; while ((line = reader.readLine()) != null) { textArea.append(line); textArea.append("\n"); } reader.close(); } catch (java.io.IOException ex) { ex.printStackTrace(); } } } else if (command.equals("Save")) { if (isSaved) { try { java.io.BufferedWriter writer = new java.io.BufferedWriter(new java.io.FileWriter(currentFile)); writer.write(textArea.getText()); writer.close(); } catch (java.io.IOException ex) { ex.printStackTrace(); } } else { actionPerformed(new ActionEvent(this, 0, "Save As")); } } else if (command.equals("Save As")) { int result = fileChooser.showSaveDialog(this); if (result == JFileChooser.APPROVE_OPTION) { String fileName = fileChooser.getSelectedFile().getPath(); currentFile = fileName; setTitle(currentFile); isSaved = true; try { java.io.BufferedWriter writer = new java.io.BufferedWriter(new java.io.FileWriter(currentFile)); writer.write(textArea.getText()); writer.close(); } catch (java.io.IOException ex) { ex.printStackTrace(); } } } else if (command.equals("Exit")) { System.exit(0); } } public static void main(String[] args) { MyNotepad notepad = new MyNotepad(); notepad.setSize(800, 600); notepad.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); notepad.setVisible(true); } } ``` 在该代码中,我们使用了 JFrame、JMenuBar、JMenu、JMenuItem、JToolBar 和 JTextArea 等 Swing 组件来构建记事本界面。我们还使用了 JFileChooser 组件来支持文件的打开和保存操作。其中,菜单栏和工具栏的事件处理都委托给了 MyNotepad 类本身来处理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值