开发一个简单的记事本应用(Notepad)使用Java Swing
在这篇博客中,我们将开发一个简易的记事本应用程序(Notepad),使用 Java Swing 库来创建图形用户界面(GUI)。这个项目不仅能帮助你理解如何使用Swing组件,还能教你如何处理文件操作、文本编辑以及实现简单的菜单和撤销功能。
项目背景
记事本应用是一个经典的编程练习项目,它不仅能够帮助我们理解Java GUI编程的基本概念,还能掌握如何进行文件操作。这个项目适合刚接触Swing的Java开发者,帮助你加深对图形界面编程和事件驱动模型的理解。
项目功能
-
文本编辑: 允许用户输入和编辑多行文本。
-
文件操作: 可以打开、保存文本文件。
-
编辑操作: 提供剪切、复制、粘贴、撤销等基本编辑功能。
-
界面设计: 设计一个简单的用户界面,包含文本输入区域和菜单栏。
技术栈
-
Java Swing: 用于开发图形界面。
-
JTextArea: 用于文本输入。
-
JMenuBar 和 JMenuItem: 用于创建菜单栏。
-
JFileChooser: 用于文件选择对话框。
设计思路
1. 界面布局
本应用的核心界面是一个简单的文本编辑区域,使用JTextArea来显示和编辑文本。为了实现文件操作和编辑功能,我们将使用Swing的JMenuBar组件来创建一个菜单栏。菜单栏将包括文件操作和编辑操作。
2. 文件操作
我们使用JFileChooser来实现打开和保存文件的功能。JFileChooser提供了一个标准的文件选择对话框,用户可以通过它选择本地的文件进行打开或保存。
-
打开文件: 通过
JFileChooser读取文件内容并显示在JTextArea中。 -
保存文件: 将
JTextArea中的内容保存到文件。
3. 编辑操作
编辑操作包括剪切、复制、粘贴和撤销:
-
剪切、复制、粘贴: 使用
JTextArea自带的方法来处理这些操作。 -
撤销操作: 使用
UndoManager来实现撤销功能。UndoManager能够监听编辑事件并记录操作,允许用户撤销最近的操作。
4. 窗口布局
使用JScrollPane来使文本区域支持滚动,保证用户在输入大量文本时能够查看所有内容。
代码实现
下面是Java代码的完整实现,我们将通过JTextArea和JMenuBar实现一个简易的记事本应用。
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.undo.*;
public class SimpleNotepad extends JFrame {
// JTextArea 用于文本输入
private JTextArea textArea;
// UndoManager 用于撤销操作
private UndoManager undoManager;
public SimpleNotepad() {
// 设置窗口标题
setTitle("简单记事本");
// 初始化文本区
textArea = new JTextArea();
textArea.setFont(new Font("Arial", Font.PLAIN, 16));
// 初始化UndoManager
undoManager = new UndoManager();
textArea.getDocument().addUndoableEditListener(new UndoableEditListener() {
public void undoableEditHappened(UndoableEditEvent e) {
undoManager.addEdit(e.getEdit());
}
});
// 设置滚动条
JScrollPane scrollPane = new JScrollPane(textArea);
// 创建菜单栏
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);
// 文件菜单
JMenu fileMenu = new JMenu("文件");
menuBar.add(fileMenu);
JMenuItem newItem = new JMenuItem("新建");
JMenuItem openItem = new JMenuItem("打开");
JMenuItem saveItem = new JMenuItem("保存");
fileMenu.add(newItem);
fileMenu.add(openItem);
fileMenu.add(saveItem);
// 编辑菜单
JMenu editMenu = new JMenu("编辑");
menuBar.add(editMenu);
JMenuItem undoItem = new JMenuItem("撤销");
JMenuItem cutItem = new JMenuItem("剪切");
JMenuItem copyItem = new JMenuItem("复制");
JMenuItem pasteItem = new JMenuItem("粘贴");
editMenu.add(undoItem);
editMenu.add(cutItem);
editMenu.add(copyItem);
editMenu.add(pasteItem);
// 设置文件操作
newItem.addActionListener(e -> textArea.setText(""));
openItem.addActionListener(e -> openFile());
saveItem.addActionListener(e -> saveFile());
// 设置编辑操作
undoItem.addActionListener(e -> undoAction());
cutItem.addActionListener(e -> textArea.cut());
copyItem.addActionListener(e -> textArea.copy());
pasteItem.addActionListener(e -> textArea.paste());
// 设置主界面
add(scrollPane, BorderLayout.CENTER);
setSize(600, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null); // 居中显示
// 显示窗口
setVisible(true);
}
// 打开文件
private void openFile() {
JFileChooser fileChooser = new JFileChooser();
int option = fileChooser.showOpenDialog(this);
if (option == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile();
try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
textArea.read(reader, null);
} catch (IOException e) {
JOptionPane.showMessageDialog(this, "文件打开失败!", "错误", JOptionPane.ERROR_MESSAGE);
}
}
}
// 保存文件
private void saveFile() {
JFileChooser fileChooser = new JFileChooser();
int option = fileChooser.showSaveDialog(this);
if (option == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile();
try (BufferedWriter writer = new BufferedWriter(new FileWriter(file))) {
textArea.write(writer);
} catch (IOException e) {
JOptionPane.showMessageDialog(this, "文件保存失败!", "错误", JOptionPane.ERROR_MESSAGE);
}
}
}
// 撤销操作
private void undoAction() {
if (undoManager.canUndo()) {
undoManager.undo();
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(SimpleNotepad::new);
}
}
运行效果
在运行该程序时,用户会看到一个简单的记事本界面,如下图所示:



主界面截图:
文件操作:
-
点击“文件”菜单可以选择新建、打开或保存文件。
编辑操作:
-
通过“编辑”菜单可以剪切、复制、粘贴文本,或撤销最近的操作。
总结与扩展
总结:
-
本项目使用Java Swing实现了一个简单的记事本应用,展示了如何用Swing组件创建用户界面,如何进行文件操作以及如何实现文本编辑功能。
-
通过这个项目,你可以深入了解Swing编程,特别是如何管理文本输入区域和菜单栏,以及如何处理文件输入输出。
参与人员
23计科6班吕嘉鑫,23计科6班郭玉林,23计科班张文磊
1214

被折叠的 条评论
为什么被折叠?



