diff --git a/src/java2022spring/notebook.java b/src/java2022spring/notebook.java new file mode 100644 index 0000000000000000000000000000000000000000..2683f4ebd700c8c21d150df06147d73caeb6c3be --- /dev/null +++ b/src/java2022spring/notebook.java @@ -0,0 +1,387 @@ +package java2022spring; +import java.awt.Color; + +import java.awt.Container; +import java.awt.FileDialog; +import java.awt.FlowLayout; +import java.awt.Menu; +import java.awt.MenuBar; +import java.awt.MenuItem; +import java.awt.MenuShortcut; +import java.awt.TextArea; +import java.awt.Toolkit; +import java.awt.Window; +import java.awt.datatransfer.Clipboard; +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.StringSelection; +import java.awt.datatransfer.Transferable; +import java.awt.datatransfer.UnsupportedFlavorException; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.KeyEvent; +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.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.util.HashMap; +import java.util.Scanner; +import java.util.logging.Level; +import java.util.logging.Logger; + +import javax.swing.JDialog; +import javax.swing.JFileChooser; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JMenu; +import javax.swing.JMenuBar; +import javax.swing.JMenuItem; +import javax.swing.JOptionPane; +import javax.swing.JTextArea; +import javax.swing.JToolBar; +import javax.swing.UIManager; +import javax.swing.event.CaretEvent; +import javax.swing.event.CaretListener; +import javax.swing.event.UndoableEditEvent; +import javax.swing.event.UndoableEditListener; +import javax.swing.undo.CannotRedoException; +import javax.swing.undo.CannotUndoException; +import javax.swing.undo.UndoManager; +public class notebook { + private JTextArea textArea; + String filePath = ""; + Toolkit toolKit = Toolkit.getDefaultToolkit(); + Clipboard clipboard = toolKit.getSystemClipboard(); + protected UndoManager undoManager = new UndoManager(); + public notebook(){ + //创建记事本窗口 + final JFrame layout=new JFrame("记事本"); + layout.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); + layout.setLocation(20, 30); + layout.setSize(600, 600); + layout.setResizable(true); + //创建添加文本框 + textArea=new JTextArea("",50,50); + layout.add(textArea); + textArea.setVisible(true); + textArea.requestFocusInWindow(); + //创建菜单栏 + JMenuBar menu=new JMenuBar(); + //layout.setJMenuBar(menu); + //菜单栏添加内容 + JMenu file=new JMenu("文件"); + JMenu edit=new JMenu("编辑"); + JMenu format=new JMenu("格式"); + JMenu view=new JMenu("查看"); + JMenu help=new JMenu("帮助"); + menu.add(file); + menu.add(edit); + menu.add(format); + menu.add(view); + menu.add(help); + layout.setJMenuBar(menu); + //创建菜单项 + JMenuItem newitem=new JMenuItem("新建"); + JMenuItem openitem=new JMenuItem("打开"); + JMenuItem saveitem=new JMenuItem("保存"); + JMenuItem osaveitem=new JMenuItem("另存为"); + JMenuItem closeitem=new JMenuItem("退出"); + JMenuItem back=new JMenuItem("撤消"); + JMenuItem ctrlx=new JMenuItem("剪切"); + JMenuItem ctrlc=new JMenuItem("复制"); + JMenuItem ctrlv=new JMenuItem("粘贴"); + JMenuItem delete=new JMenuItem("删除"); + JMenuItem wordwrap=new JMenuItem("自动换行"); + JMenuItem status=new JMenuItem("状态栏"); + JMenuItem helpitem=new JMenuItem("查看帮助"); + JMenuItem about=new JMenuItem("关于记事本"); + //添加菜单条 + file.add(newitem); + file.add(openitem); + file.add(saveitem); + file.add(osaveitem); + file.add(closeitem); + edit.add(back); + edit.add(ctrlx); + edit.add(ctrlc); + edit.add(ctrlv); + edit.add(delete); + format.add(wordwrap); + view.add(status); + help.add(helpitem); + help.add(about); + layout.setVisible(true);//使所有菜单条可见 + //利用监听器实现功能 + //文件菜单栏 + //实现新建功能 + newitem.addActionListener(new ActionListener(){ + @Override + public void actionPerformed(ActionEvent e) { + String con = textArea.getText(); + if(!con.equals("")){//文本域里文本不为空 + int result = JOptionPane.showConfirmDialog(null, ("是否要保存?"),("保存文件"),JOptionPane.YES_NO_CANCEL_OPTION); + //弹出是否保存弹窗 + if(result == JOptionPane.NO_OPTION){//不保存 + textArea.setText(""); + } + + else if(result == JOptionPane.CANCEL_OPTION){//取消新建 + } + + else if(result == JOptionPane.YES_OPTION){//选择保存 + JFileChooser jfc = new JFileChooser();//用于选择保存路径的文件名 + int bcf = jfc.showSaveDialog(layout); + if(bcf == JFileChooser.APPROVE_OPTION){ + try { + //保存文件 + BufferedWriter bfw = new BufferedWriter( + new FileWriter(new File(jfc.getSelectedFile().getAbsolutePath()+".txt"))); + filePath = jfc.getSelectedFile().getAbsolutePath()+".txt";//获取文件保存的路径 + bfw.write(con);//向文件写出数据 + bfw.flush(); + bfw.close();//关闭输出流 + } catch (IOException ex) { + Logger.getLogger(notebook.class.getName()).log(Level.SEVERE, null, ex); + } + new notebook();//新建文本文件 + } + } + } + else { + JOptionPane.showMessageDialog(null, ("已经是空白文档,无需新建"),("警告!") + ,JOptionPane.INFORMATION_MESSAGE); + + } + } + + }); + //打开文件夹功能 + openitem.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + FileDialog dialog = new FileDialog(new JFrame(),"打开",FileDialog.LOAD); + dialog.setVisible(true); + filePath = dialog.getDirectory() + dialog.getFile(); + System.out.println(filePath); + File file = new File(filePath); + BufferedReader br = null; + StringBuilder sb = new StringBuilder(); + try{ + br = new BufferedReader (new FileReader(file)); + String str = null; + while ((str = br.readLine()) != null){ + sb.append(str).append("\n"); + } + textArea.setText(sb.toString()); + } + catch(FileNotFoundException e1){ + e1.printStackTrace(); + } + catch(IOException e1){ + e1.printStackTrace(); + } + finally{ + if(br != null){ + try{ + br.close(); + } + catch(IOException e1){ + e1.printStackTrace(); + } + } + } + } + }); + //保存功能实现 + saveitem.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + FileDialog dialog = new FileDialog(new JFrame(),"保存",FileDialog.SAVE); + dialog.setVisible(true); + filePath = dialog.getDirectory() + dialog.getFile(); + if(filePath.equals("")){//没有路径时,就另存为 + JFileChooser jfc = new JFileChooser();//用于选择保存路径的文件名 + int bcf = jfc.showSaveDialog(layout);//弹出保存窗口 + if(bcf == JFileChooser.APPROVE_OPTION){ + try {//保存文件 + BufferedWriter bfw = new BufferedWriter( + new FileWriter(new File(jfc.getSelectedFile().getAbsolutePath()+".txt"))); + filePath = jfc.getSelectedFile().getAbsolutePath(); + bfw.write(textArea.getText());//向文件写出数据 + bfw.flush(); + bfw.close();//关闭输出流 + } catch (IOException ex) { + Logger.getLogger(notebook.class.getName()).log(Level.SEVERE, null, ex); + } + } + } + else{//路径不为空时,保存在原来的路径下 + try { + BufferedWriter bfw = new BufferedWriter( + new FileWriter( + new File(filePath))); + bfw.write(textArea.getText()); + bfw.flush(); + bfw.close(); + } catch (IOException ex) { + Logger.getLogger(notebook.class.getName()).log(Level.SEVERE, null, ex); + } + } + } + }); + //另存为功能实现 + osaveitem.addActionListener(new ActionListener(){ + @Override + public void actionPerformed(ActionEvent e) { + JFileChooser jfc = new JFileChooser(); + int bcf = jfc.showSaveDialog(layout); + if(bcf == JFileChooser.APPROVE_OPTION){ + try { //保存文件 + BufferedWriter bfw = new BufferedWriter( + new FileWriter(new File(jfc.getSelectedFile().getAbsolutePath()+".txt"))); + filePath = jfc.getSelectedFile().getAbsolutePath(); + bfw.write(textArea.getText()); + bfw.flush(); + bfw.close(); + } catch (IOException ex) { + Logger.getLogger(notebook.class.getName()).log(Level.SEVERE, null, ex); + } + } + } + }); + //退出功能实现 + closeitem.addActionListener(new ActionListener(){ + @Override + public void actionPerformed(ActionEvent e) { + Object[] options = { "是", "否" }; + int option = JOptionPane.showOptionDialog(null, "您确定要退出吗?","请检查是否保存!", + JOptionPane.OK_CANCEL_OPTION,JOptionPane.WARNING_MESSAGE, + null,options, options[0]); + if(option == JOptionPane.OK_OPTION){ + System.exit(0); + } + } + }); + //点×关闭 + layout.addWindowListener(new WindowAdapter(){ + @Override + public void windowClosing(WindowEvent e){ + int option = JOptionPane.showConfirmDialog(null, "您确定关闭吗?","请检查是否保存!",JOptionPane.OK_CANCEL_OPTION,JOptionPane.WARNING_MESSAGE); + if(option == JOptionPane.OK_OPTION){ + ((Window) e.getComponent()).dispose(); + System.exit(0); + } + } + }); + //编辑 + //撤销功能 + textArea.getDocument().addUndoableEditListener(undoManager); + back.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if(undoManager.canUndo()) + undoManager.undo(); + else + JOptionPane.showMessageDialog(back, "空白文本,无法撤销"); + } + }); + //剪切功能 + ctrlx.addActionListener(new ActionListener(){ + @Override + public void actionPerformed(ActionEvent e) { + String text = textArea.getSelectedText(); + StringSelection selection = new StringSelection(text); + clipboard.setContents(selection, null); + if(text.length() == 0){ + return; + } + else{ + textArea.replaceRange("", textArea.getSelectionStart(),textArea.getSelectionEnd()); + } + } + }); + //复制功能 + ctrlc.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + String text = textArea.getSelectedText(); + StringSelection selection = new StringSelection(text); + clipboard.setContents(selection, null); + } + }); + //粘贴功能 + ctrlv.addActionListener(new ActionListener(){ + @Override + public void actionPerformed(ActionEvent e) { + Transferable contents = clipboard.getContents(this); + String str =null; + try {str = (String) contents.getTransferData(DataFlavor.stringFlavor); + } + catch (UnsupportedFlavorException e1) { e1.printStackTrace(); + } + catch (IOException e1) {e1.printStackTrace(); + } + if (str == null) + return; + try {textArea.replaceRange(str,textArea.getSelectionStart(),textArea.getSelectionEnd()); + } + catch (Exception e1) {e1.printStackTrace(); + } + } + }); + //删除功能 + delete.addActionListener(new ActionListener(){ + @Override + public void actionPerformed(ActionEvent e) { + textArea.replaceRange("",textArea.getSelectionStart(),textArea.getSelectionEnd()); + } + }); + //自动换行功能 + wordwrap.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + textArea.setLineWrap(true); + } + }); + //查看菜单栏 + //状态栏-统计字数功能 + status.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + JOptionPane.showMessageDialog(status, "状态良好"); + } + }); + //帮助菜单栏 + //帮助功能 + helpitem.addActionListener(new ActionListener(){ + @Override + public void actionPerformed(ActionEvent e){ + JOptionPane.showMessageDialog(layout,"若没有自动换行,\n请手动点击自动换行功能\n", + filePath, JOptionPane.INFORMATION_MESSAGE); + } + }); + //关于记事本功能 + about.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent e){ + JOptionPane.showMessageDialog(layout,"本记事本功能较为简陋,谢谢使用!\n"+"作者信息:\n姓名:翟汝蒽\n"+"班级:信息管理与信息系统一班\n" + +"学号:202125710127\n"+"邮箱:1327251308@qq.com",filePath, JOptionPane.INFORMATION_MESSAGE); + } + }); + } + public void total(String s) { + Scanner scanner=new Scanner(System.in); + String str=scanner.nextLine(); + str=s; + int sum = 0; + for (int i=0; i