在科学技术发展日新月异的今时今日,一门新技术的掌握就显得举足轻重了。很多人选择去学习java语言以谋求更高的薪资和更好的生活水平。今天就来为大家介绍一下java记事本功能如何实现,并且通过实际的代码为大家展示,一起来看看吧。
一、java记事本功能的实现
1、实现了记事本的文件打开和保存功能(主要功能);
2、更换了标题栏默认的java图标,改成记事本图标;
3、记事本输入框采用滚动条加文本框设计;
4、实现了文件读取、写入、命名、路径选择等功能;
5、文中多次运用JOptionPane和JFileChooser对话框,尽量做到与windows运行机制一样,包含大量操作提示信息;
6、重写了窗体关闭事件方法,点击关闭按钮时,先做文件是否保存判断,若文件已保存则直接退出程序,否则弹出是否保存文件对话框;
二、实际的代码如下所示:
package com.liao.notepad0822; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.io.OutputStreamWriter; import javax.swing.ImageIcon; 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.JScrollPane; import javax.swing.JTextArea; public class MainUI extends JFrame { private static final long serialVersionUID = -8533346717300013642 L; private JTextArea jta; private JScrollPane jsp; private static String name; private JFileChooser jfc = new JFileChooser(); public static void main(String[] args) { new MainUI() .init(); } // 初始化界面 public void init() { setSize(800, 600); setLocationRelativeTo(null); // 设置关闭按钮动作不执行任何操作 setDefaultCloseOperation(0); name = "新建文本文档.txt"; // 设置标志图案 ImageIcon ii = new ImageIcon("file\\1.png"); setIconImage(ii.getImage()); // 设置文件名 setTitle(name + " - 记事本"); // 添加菜单栏 addMenu(); // 添加文本框 jta = new JTextArea(); // 添加滚动条 jsp = new JScrollPane(jta); jsp.setPreferredSize(new Dimension(780, 550)); add(jsp, BorderLayout.CENTER); setVisible(true); // 设置窗口可见 addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { if (showSaveDialog() != JOptionPane.CANCEL_OPTION) // 若不是取消按钮,关闭程序 setDefaultCloseOperation(3); } }); } // 添加菜单栏 private void addMenu() { // 添加菜单栏 JMenuBar jmb = new JMenuBar(); // 设置菜单栏位置在顶级窗口的顶部 setJMenuBar(jmb); // 菜单栏菜单 JMenu jm_file = new JMenu("文件"); JMenu jm_edit = new JMenu("编辑"); jmb.add(jm_file); jmb.add(jm_edit); // 给文件菜单添加菜单项 JMenuItem item1 = new JMenuItem("打开"); JMenuItem item2 = new JMenuItem("保存"); jm_file.add(item1); jm_file.add(item2); // "打开"菜单项添加动作监听器 item1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 是否保存对原文件修改 if (showSaveDialog() == JOptionPane.CANCEL_OPTION) { // 取消按钮,则返回 return; } // 弹出一个 "Open File" 文件选择器对话框 int select = jfc.showOpenDialog(MainUI.this); // 选择打开文件,则读写文件 if (select == JFileChooser.APPROVE_OPTION) { jta.setText(readFile()); // 写入文本框 jta.setCaretPosition(0); // 定位光标至行首 } } }); // “保存”菜单项添加动作监听器 item2.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (jfc.getSelectedFile() == null) { createFile(); //调用创建文件方法 } else { showSaveDialog(); //调用文件是否保存方法 } } }); } // 读取文件 private String readFile() { // 声明缓冲字符流变量 BufferedReader br = null; StringBuilder sb = null; try { br = new BufferedReader(new FileReader(jfc.getSelectedFile())); sb = new StringBuilder(); // 创建缓冲字符串 String str; int count = 0; //控制添加换行符,与原文保持一致 while ((str = br.readLine()) != null) { if (count == 0) sb.append(str); if (count++ != 0) sb.append("\n" + str); // 添加换行 } } catch (FileNotFoundException e1) { // 弹出“文件未找到”对话框,返回null JOptionPane.showMessageDialog(null, "未找到该文件!"); return null; } catch (IOException e1) { // 弹出“文件读取异常”对话框,返回null JOptionPane.showMessageDialog(null, "文件读取异常"); return null; } finally { // 关闭字符流 if (br != null) try { br.close(); } catch (IOException e1) { e1.printStackTrace(); } } name = jfc.getSelectedFile() .getName(); setTitle(name + " - 记事本"); //设置文件名 return sb.toString(); } // 保存对话框 private int showSaveDialog() { int select = 0; // 判断文本框是否为空 if (!jta.getText() .equals("")) { // 判断文件是否为空 if (jfc.getSelectedFile() == null) { select = JOptionPane.showConfirmDialog(MainUI.this, "是否保存修改?"); if (select == JOptionPane.YES_OPTION) { createFile(); //文件不存在,则创建文件 } } else { if (!isSaved()) { // 文件未保存 select = JOptionPane.showConfirmDialog(MainUI.this, "是否保存修改?"); if (select == JOptionPane.YES_OPTION) { saveFile(jfc.getSelectedFile()); } } } } return select; // 返回选项 } // 创建新文件 private void createFile() { // String name = null; File file = null; // 选择保存或取消 if (jfc.showSaveDialog(MainUI.this) == JFileChooser.APPROVE_OPTION) { file = jfc.getSelectedFile(); // 获取选中的文件 } else { return; } name = jfc.getName(file); // 获取输入的文件名 if (file.exists()) { // 若选择已有文件----询问是否要覆盖 int i = JOptionPane.showConfirmDialog(null, "该文件已存在,是否覆盖原文件", "确认", JOptionPane.YES_NO_OPTION); if (i == JOptionPane.YES_OPTION) { saveFile(file); } else { jfc.showSaveDialog(MainUI.this); // 重新选择 } } else { //文件不存在,则直接保存 saveFile(file); } } // 判断文件是否保存 private Boolean isSaved() { // 比较内容 if (jta.getText() .equals(readFile())) { return true; } return false; } // 保存文件,文件不存在则创建新文件 private void saveFile(File file) { BufferedWriter bw = null; try { bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file))); bw.write(jta.getText()); //写入文件 bw.flush(); } catch (FileNotFoundException e1) { JOptionPane.showMessageDialog(MainUI.this, "文件保存出错" + e1.getMessage()); } catch (IOException e1) { e1.printStackTrace(); } finally { try { if (bw != null) bw.close(); } catch (IOException e1) {} } } }
以上就是关于java记事本功能如何实现的主要内容了。并且通过代码实例方便大家更好的理解。想要了解更多java经典例子以及常见问题,敬请关注奇Q工具网。
推荐阅读: