java Swing记事本

本文介绍了一个使用Java Swing开发的简易记事本应用程序。该应用具备基本的文件操作功能,如新建、打开、保存等,并实现了文本编辑的常用功能如全选、复制、剪切及粘贴。通过继承JFrame并实现ActionListener接口,文章详细展示了如何构建菜单栏、设置快捷键及处理文件读写过程中的异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很久之前的,忘记记录了,现在贴出来。。
package Swing记事本;

import java.awt.Container;
import java.awt.FileDialog;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Scrollbar;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
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.JPanel;
import javax.swing.JScrollBar;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.KeyStroke;

public class NoteBook extends JFrame implements ActionListener {
	JMenuBar menubar;
	JMenu menu1, menu2, menu3;
	JMenuItem item1, item2, item3, item4, item5, item6, item7, item8, item9, item10;
	private FileDialog openFileDialog;
	private FileDialog saveFileDialog;
	final JTextArea textarea;
	JPanel panel;
	String fileName;
	String title;
	int type;

	public static void main(String[] args) {
		new NoteBook().init();

	}

	public NoteBook() {
		super("555");

		menubar = new JMenuBar();
		menu1 = new JMenu("文件");
		item1 = new JMenuItem("新建");
		item2 = new JMenuItem("打开");
		item3 = new JMenuItem("保存");
		item4 = new JMenuItem("另存");
		item5 = new JMenuItem("退出");
		menu2 = new JMenu("编辑");
		item6 = new JMenuItem("全选");
		item7 = new JMenuItem("复制");
		item8 = new JMenuItem("剪切");
		item9 = new JMenuItem("粘贴");
		menu3 = new JMenu("关于");
		item10 = new JMenuItem("帮助");

		openFileDialog = new FileDialog(this, "Open File", FileDialog.LOAD);
		saveFileDialog = new FileDialog(this, "Save File", FileDialog.SAVE);

		fileName = "NoName.tet";
		textarea = new JTextArea();
		title = "ERROR MESSAGE";
		type = JOptionPane.ERROR_MESSAGE;
		panel = new JPanel();

	}

	public void init() {

		setBounds(200, 300, 500, 400);
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		panel.setLayout(new GridLayout(1, 1));
		panel.add(new JScrollPane(textarea));
		textarea.setFont(new Font("黑体", Font.BOLD, 15));
		getContentPane().add(panel);
		setJMenuBar(menubar);
		menubar.add(menu1);
		menubar.add(menu2);
		menubar.add(menu3);
		menu1.add(item1);
		menu1.add(item2);
		menu1.addSeparator();
		menu1.add(item3);
		menu1.add(item4);
		menu1.addSeparator();
		menu1.add(item5);
		menu2.add(item6);
		menu2.addSeparator();
		menu2.add(item7);
		menu2.add(item8);
		menu2.add(item9);
		menu3.add(item10);

		item1.addActionListener(this);
		item1.setMnemonic('N');
		item1.setAccelerator(KeyStroke.getKeyStroke('N', java.awt.Event.CTRL_MASK, true));

		item2.addActionListener(this);
		item2.setMnemonic('O');
		item2.setAccelerator(KeyStroke.getKeyStroke('O', java.awt.Event.CTRL_MASK, true));

		item3.addActionListener(this);
		item3.setMnemonic('S');
		item3.setAccelerator(KeyStroke.getKeyStroke('S', java.awt.Event.CTRL_MASK, true));

		item4.addActionListener(this);
		item4.setMnemonic('T');
		item4.setAccelerator(KeyStroke.getKeyStroke('T', java.awt.Event.CTRL_MASK, true));

		item5.addActionListener(this);
		item5.setMnemonic('Q');
		item5.setAccelerator(KeyStroke.getKeyStroke('Q', java.awt.Event.CTRL_MASK, true));

		item6.addActionListener(this);
		item6.setMnemonic('A');
		item6.setAccelerator(KeyStroke.getKeyStroke('A', java.awt.Event.CTRL_MASK, true));

		item7.addActionListener(this);
		item7.setMnemonic('C');
		item7.setAccelerator(KeyStroke.getKeyStroke('C', java.awt.Event.CTRL_MASK, true));

		item8.addActionListener(this);
		item8.setMnemonic('X');
		item8.setAccelerator(KeyStroke.getKeyStroke('X', java.awt.Event.CTRL_MASK, true));

		item9.addActionListener(this);
		item9.setMnemonic('P');
		item9.setAccelerator(KeyStroke.getKeyStroke('P', java.awt.Event.CTRL_MASK, true));

		item10.addActionListener(this);
		item10.setMnemonic('H');
		item10.setAccelerator(KeyStroke.getKeyStroke('H', java.awt.Event.CTRL_MASK, true));
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		Object evenSource = e.getSource();
		if (evenSource.equals(item1)) {
			textarea.setText("");
		} else if (evenSource.equals(item2)) {
			readFile();
		} else if (evenSource.equals(item3)) {
			fileName = "NoName.tet";
			writeFile(fileName);
		} else if (evenSource.equals(item4)) {
			fileName = null;
			writeFile(fileName);
		} else if (evenSource.equals(item6)) {
			textarea.selectAll();
		} else if (evenSource.equals(item7)) {
			textarea.copy();
		} else if (evenSource.equals(item8)) {
			textarea.cut();
		} else if (evenSource.equals(item9)) {
			textarea.paste();
		} else if (evenSource.equals(item10)) {
			JOptionPane.showMessageDialog(this, "666");
		} else if (evenSource.equals(item5)) {
			dispose();
			System.exit(0);
		}
	}

	private void writeFile(String fileName) {
		File filesa;
		String messagef = "文件未找到";
		FileOutputStream outputfile = null;
		if (fileName == null) {
			JFileChooser savefile = new JFileChooser();
			savefile.setApproveButtonText("保存");
			savefile.setDialogTitle("保存文件");
			savefile.showSaveDialog(this);
			filesa = savefile.getSelectedFile();
			if (filesa == null)
				return;
		} else {
			filesa = new File(fileName);
		}
		try {
			outputfile = new FileOutputStream(filesa);
		} catch (FileNotFoundException ee) {
			JOptionPane.showMessageDialog(this, messagef, title, type);
		}
		String filecontent = textarea.getText();
		String wrmessage = "下文件错误!";
		try {
			outputfile.write(filecontent.getBytes());
		} catch (IOException ee) {
			JOptionPane.showMessageDialog(this, wrmessage, title, type);
		}
		String cmessage = "关闭流发生错误!";
		try {
			outputfile.close();
		} catch (IOException ee) {
			JOptionPane.showMessageDialog(this, cmessage, title, type);
		}
	}

	private void readFile() {
		JFileChooser openfile = new JFileChooser();
		openfile.setDialogTitle("打开文件");
		openfile.setApproveButtonText("打开");
		openfile.showOpenDialog(this);
		File file = openfile.getSelectedFile();
		if (file != null) {
			FileInputStream inputfile = null;
			String message = "文件不能找到!";
			try {
				inputfile = new FileInputStream(file);

			} catch (FileNotFoundException ee) {
				JOptionPane.showMessageDialog(this, message, title, type);
			}
			int readbytes;
			String message1 = "读文件发生错误!";
			try {
				while ((readbytes = inputfile.read()) != -1) {
					textarea.append(String.valueOf((char) readbytes));
				}
			} catch (IOException ee) {
				JOptionPane.showMessageDialog(this, message1, title, type);
			}
			String closemessage = "关闭文件发生错误!";
			try {
				inputfile.close();
			} catch (IOException ee) {
				JOptionPane.showMessageDialog(this, closemessage, title, type);
			}
		}

	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值