Java实现仿Windows记事本程序

5 下载量 194 浏览量 更新于2024-09-03 3 收藏 101KB PDF 举报
"这是一个Java编程项目,开发者通过学习Java语言,创建了一个类似Windows系统的记事本程序。该程序实现了大部分记事本的基本功能,包括新建、打开、保存等操作,但存在一些未完善的地方,如撤销命令的功能不完整。开发者希望与Java爱好者分享代码,共同学习并接受改进意见。代码中包含了事件监听、文件读写、文本处理等多个方面的Java Swing和AWT库的应用。" 在Java编程中,这个项目展示了如何使用Java Swing库来构建一个图形用户界面(GUI)应用,类似于Windows的记事本。以下是该项目涉及的一些关键知识点: 1. **Swing组件**:项目中使用了`JFrame`作为主窗口,`JPanel`作为容器,以及`JMenuBar`和`JMenu`来创建菜单栏和子菜单。`JMenuItem`用于创建菜单项,如“新建”、“打开”和“保存”。 2. **事件监听**:为了响应用户的操作,如点击菜单项,开发者使用了`ActionListener`接口。例如,`newFile.addActionListener(e -> { ... })`这样的代码将触发特定的事件处理函数。 3. **文件操作**:项目中涉及到文件的读写,这通常通过`java.io`包中的类实现。`FileReader`, `FileWriter`或`BufferedReader`, `BufferedWriter`可以用来读取和写入文本文件。在Java中,文件操作需要处理异常,例如`IOException`。 4. **文本处理**:`javax.swing.text`包提供了处理文本的类,如`JTextComponent`(在这里可能是`JTextArea`),以及`Document`对象,用于存储和操作文本。`UndoManager`用于实现撤销/重做功能。 5. **日期和时间**:`java.text.SimpleDateFormat`和`Date`类用于格式化和显示当前日期和时间,这在文件保存时可能会用到,例如添加时间戳到文件名。 6. **菜单项的状态管理**:在代码中,可能会使用`JMenuItem.setEnabled(false)`来禁用某些功能,如在没有打开文件时禁用“保存”菜单项。 7. **MVC模式**:虽然没有明确提及,但这个项目的结构遵循了模型-视图-控制器(MVC)设计模式。`JMenuItem`是视图,它们与控制器(事件监听器)关联,而模型则可能包括文件数据和文本状态。 8. **代码优化**:开发者提到代码中可能存在重复、布局和变量命名的问题,这些都是代码质量方面需要改进的地方。在实际开发中,应遵循良好的编程实践,如DRY(Don't Repeat Yourself)原则,以及使用有意义的变量名。 通过这个项目,Java初学者可以学习到如何构建GUI应用程序,并了解与文件交互、事件处理和文本操作相关的基础知识。同时,对于有经验的开发者来说,这也是一个检查和提高自己编码风格和习惯的好例子。
2013-04-18 上传
实现了记事本的大部分功能,适合新手看。 // 文本编辑区 private JTextArea editArea = new JTextArea(); // 菜单项 private JMenu[] menus = { new JMenu("文件(F)"), new JMenu("编辑(E)"), new JMenu("格式(E)"), new JMenu("查看(V)"), new JMenu("帮助(H)") }; private JMenuItem[] fileMenu = { new JMenuItem("新建(N) "), new JMenuItem("打开(O)... "), new JMenuItem("保存(S) "), new JMenuItem("另存为(A)... "), new JMenuItem("页面设置(U)... "), new JMenuItem("打印(P)... "), new JMenuItem("退出(X) ") }; private JMenuItem[] editMenu = { new JMenuItem("撤销(U) "), new JMenuItem("剪切(T) "), new JMenuItem("复制(C) "), new JMenuItem("黏贴(P) "), new JMenuItem("删除(L) "), new JMenuItem("查找(F)... "), new JMenuItem("查找下一个(N) "), new JMenuItem("替换(R)... "), new JMenuItem("转到(G)... "), new JMenuItem("全选(A) "), new JMenuItem("时间/日期(D) ") }; private JCheckBoxMenuItem formatMenu1 = new JCheckBoxMenuItem( "自动换行(W) "); private JMenuItem formatMenu2 = new JMenuItem("字体(F)... "); private JMenuItem checkMenu = new JMenuItem("状态栏(S) "); private JMenuItem[] helpMenu = { new JMenuItem("查看帮助(H) "), new JMenuItem("关于记事本(A) ") }; private JPopupMenu pmenus = new JPopupMenu(); private JMenuItem[] popupMenu = { new JMenuItem("撤销(U) "), new JMenuItem("剪切(T) "), new JMenuItem("复制(C) "), new JMenuItem("黏贴(P) "), new JMenuItem("删除(L) "), new JMenuItem("全选(A) "), }; // 剪切板引用 private Toolkit toolKit = Toolkit.getDefaultToolkit(); private Clipboard clipBoard = toolKit.getSystemClipboard(); // 其他变量 private boolean isNewFile = true; private File currentFile; private String oldTxt; // 撤销管理器 private UndoManager undo = new UndoManager(); private UndoableEditListener undoHandler = new UndoHandler();