From 81eb68846542aacad3ba18eb74eb73739addca76 Mon Sep 17 00:00:00 2001 From: XGD Date: Sun, 16 May 2021 14:42:48 +0800 Subject: [PATCH 01/10] =?UTF-8?q?=E5=AE=8C=E6=88=90=E8=A8=98=E4=BA=8B?= =?UTF-8?q?=E6=9C=AC=E6=A1=86=E6=9E=B6=E8=B7=9F=E6=96=87=E4=BB=B6=E7=9A=84?= =?UTF-8?q?=E5=9F=BA=E6=9C=AC=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Frame/Editor.java | 230 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 230 insertions(+) create mode 100644 src/Frame/Editor.java diff --git a/src/Frame/Editor.java b/src/Frame/Editor.java new file mode 100644 index 0000000..940e2aa --- /dev/null +++ b/src/Frame/Editor.java @@ -0,0 +1,230 @@ +package Frame; + +import java.awt.BorderLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.StringReader; + +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.JTextArea; + +public class Editor extends JFrame { + public JFrame mainFrame; + public JTextArea textArea; + public JMenuBar menuBar; + public JMenu menuFile, menuEdit, menuFormat, menuCheck, menuHelp; + public JMenuItem newItem, openItem, saveItem, other_saveItem, exitItem; + public File file, fileCurrent; + + // 构造方法 + public Editor(int a, int b, int c, int d) { + mainFrame = new JFrame(); + createMenuBar();// 添加菜单条 + // 创建文本区 + textArea = new JTextArea(); + // 设置窗口 + mainFrame.add(textArea, BorderLayout.CENTER); + mainFrame.setBounds(a, b, c, d); + mainFrame.setVisible(true); + mainFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); + + } + + // 创建菜单条 + public void createMenuBar() { + menuBar = new JMenuBar(); + createMenuFile(); + menuBar.add(menuFile); + createMenuEdit(); + menuBar.add(menuEdit); + createMenuFormat(); + menuBar.add(menuFormat); + createMenuCheck(); + menuBar.add(menuCheck); + createMenuHelp(); + menuBar.add(menuHelp); + mainFrame.setJMenuBar(menuBar); + } + + // 创建文件菜单 + public void createMenuFile() { + menuFile = new JMenu("文件"); + + // 新建功能 + newItem = new JMenuItem("新建"); + newItem.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + Editor editor = new Editor(200, 200, 1000, 400); + } + }); + menuFile.add(newItem); + + // 打开功能 + openItem = new JMenuItem("打开"); + openItem.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + JFileChooser fileChooser = new JFileChooser(); + if (fileChooser.showOpenDialog(mainFrame) == JFileChooser.APPROVE_OPTION) { + File file = fileChooser.getSelectedFile(); + if (file != null) { + textArea.setText(" "); + try { + char[] buffer = new char[1024];// ?? + FileReader fileReader = new FileReader(file); + for (;;) { + int count = fileReader.read(buffer);// ?? + if (count != -1) { + textArea.append(new String(buffer, 0, count)); + } else { + break; + } + fileCurrent = file;// 持有打开文件的对象 + mainFrame.setTitle(file.getAbsolutePath()); + } + fileReader.close(); + } catch (FileNotFoundException e1) { + e1.printStackTrace(); + } catch (IOException e2) { + e2.printStackTrace(); + } + } else { + return; + } + } + + } + }); + menuFile.add(openItem); + + // 保存功能 + saveItem = new JMenuItem("保存"); + saveItem.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + if (fileCurrent == null) { + JFileChooser fileChooser = new JFileChooser(); + if (fileChooser.showSaveDialog(mainFrame) == JFileChooser.APPROVE_OPTION) { + File file = fileChooser.getSelectedFile(); + if ((!file.exists()) || (file.exists() + && JOptionPane.showConfirmDialog(mainFrame, "override ?") == JOptionPane.YES_OPTION)) { + fileCurrent = file; + } else { + return; + } + } else { + return; + } + } + } + }); + menuFile.add(saveItem); + + // 另存为功能 + other_saveItem = new JMenuItem("另存为"); + other_saveItem.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + { + if (fileCurrent == null) { + JFileChooser fileChooser = new JFileChooser(); + if (fileChooser.showSaveDialog(mainFrame) == JFileChooser.APPROVE_OPTION) { + File file = fileChooser.getSelectedFile(); + if ((!file.exists()) || (file.exists() && JOptionPane.showConfirmDialog(mainFrame, + "override ?") == JOptionPane.YES_OPTION)) { + fileCurrent = file; + } else { + return; + } + } else { + return; + } + } // end if + } + File file = fileCurrent; + if (file != null) { + char[] buffer = new char[1024]; + try { + StringReader stringReader = new StringReader(textArea.getText()); + FileWriter fileWriter = new FileWriter(file); + for (;;) { + int count = stringReader.read(buffer); + if (count != -1) { + fileWriter.append(new String(buffer, 0, count)); + } else { + break; + } + } + fileWriter.close(); + stringReader.close(); + } catch (IOException e1) { + e1.printStackTrace(); + } + } else { + return; + } + } + + }); + menuFile.add(other_saveItem); + + // 退出功能 + exitItem = new JMenuItem("退出"); + exitItem.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + System.exit(0); + } + }); + menuFile.add(exitItem); + } + + // 创建编辑菜单 + public void createMenuEdit() { + menuEdit = new JMenu("编辑"); + menuEdit.add(new JMenuItem("撤销")); + menuEdit.add(new JMenuItem("剪辑")); + menuEdit.add(new JMenuItem("复制")); + menuEdit.add(new JMenuItem("粘帖")); + menuEdit.add(new JMenuItem("删除")); + } + + // 创建格式菜单 + public void createMenuFormat() { + menuFormat = new JMenu("格式"); + menuFormat.add(new JMenuItem("自动换行")); + } + + // 创建查看菜单 + public void createMenuCheck() { + menuCheck = new JMenu("查看"); + menuCheck.add(new JMenuItem("状态栏")); + } + + // 创建帮助菜单 + public void createMenuHelp() { + menuHelp = new JMenu("帮助"); + menuHelp.add(new JMenuItem("查看帮助")); + menuHelp.add(new JMenuItem("关于记事本")); + } + + // 主程序 + public static void main(String[] args) { + Editor editor = new Editor(200, 200, 1000, 400); + } +} -- Gitee From 61c686f82442826113cb2168d9688567b44b94e8 Mon Sep 17 00:00:00 2001 From: XGD Date: Sat, 22 May 2021 19:58:39 +0800 Subject: [PATCH 02/10] =?UTF-8?q?=E5=AE=8C=E6=88=90=E7=BC=96=E8=BE=91?= =?UTF-8?q?=E8=8F=9C=E5=8D=95=E7=9A=84=E5=9F=BA=E6=9C=AC=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E7=BC=96=E5=86=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Frame/Editor.java | 85 +++++++++++++-- src/Right.java | 233 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 312 insertions(+), 6 deletions(-) create mode 100644 src/Right.java diff --git a/src/Frame/Editor.java b/src/Frame/Editor.java index 940e2aa..7de97b5 100644 --- a/src/Frame/Editor.java +++ b/src/Frame/Editor.java @@ -17,14 +17,20 @@ import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JTextArea; +import javax.swing.KeyStroke; +import javax.swing.event.UndoableEditEvent; +import javax.swing.event.UndoableEditListener; +import javax.swing.undo.UndoManager; public class Editor extends JFrame { public JFrame mainFrame; public JTextArea textArea; public JMenuBar menuBar; public JMenu menuFile, menuEdit, menuFormat, menuCheck, menuHelp; - public JMenuItem newItem, openItem, saveItem, other_saveItem, exitItem; + public JMenuItem newItem, openItem, saveItem, other_saveItem, exitItem, undoItem, pasteItem, copyItem, cutItem, + deleteItem; public File file, fileCurrent; + public UndoManager undom = new UndoManager(); // 构造方法 public Editor(int a, int b, int c, int d) { @@ -32,12 +38,22 @@ public class Editor extends JFrame { createMenuBar();// 添加菜单条 // 创建文本区 textArea = new JTextArea(); + textArea.setLineWrap(true);// 文本自动换行 + textArea.setWrapStyleWord(true);// 文本区以单词为界自动换行 // 设置窗口 mainFrame.add(textArea, BorderLayout.CENTER); mainFrame.setBounds(a, b, c, d); mainFrame.setVisible(true); mainFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); + // 撤销监视器 + textArea.getDocument().addUndoableEditListener(new UndoableEditListener() { + @Override + public void undoableEditHappened(UndoableEditEvent e) { + undom.addEdit(e.getEdit()); + + } + }); } // 创建菜单条 @@ -197,11 +213,67 @@ public class Editor extends JFrame { // 创建编辑菜单 public void createMenuEdit() { menuEdit = new JMenu("编辑"); - menuEdit.add(new JMenuItem("撤销")); - menuEdit.add(new JMenuItem("剪辑")); - menuEdit.add(new JMenuItem("复制")); - menuEdit.add(new JMenuItem("粘帖")); - menuEdit.add(new JMenuItem("删除")); + // 撤销功能 + undoItem = new JMenuItem("撤销(Z)"); + undoItem.setAccelerator(KeyStroke.getKeyStroke('z')); + undoItem.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + if (e.getSource() == undoItem) { + undom.undo(); + } + } + }); + menuEdit.add(undoItem); + // 剪切功能 + cutItem = new JMenuItem("剪切(T)"); + cutItem.setAccelerator(KeyStroke.getKeyStroke('t')); + cutItem.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + if (e.getSource() == cutItem) + textArea.cut(); + } + }); + menuEdit.add(cutItem); + // 复制功能 + copyItem = new JMenuItem("复制(C)"); + copyItem.setAccelerator(KeyStroke.getKeyStroke('c')); + copyItem.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + if (e.getSource() == copyItem) + textArea.copy(); + } + }); + menuEdit.add(copyItem); + // 粘贴功能 + pasteItem = new JMenuItem("粘帖(V)"); + pasteItem.setAccelerator(KeyStroke.getKeyStroke('v')); + pasteItem.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + if (e.getSource() == pasteItem) + textArea.paste(); + } + }); + menuEdit.add(pasteItem); + // 删除功能 + deleteItem = new JMenuItem("删除(D)"); + deleteItem.setAccelerator(KeyStroke.getKeyStroke('d')); + deleteItem.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + if (e.getSource() == deleteItem) + textArea.setText(""); + } + }); + menuEdit.add(deleteItem); } // 创建格式菜单 @@ -227,4 +299,5 @@ public class Editor extends JFrame { public static void main(String[] args) { Editor editor = new Editor(200, 200, 1000, 400); } + } diff --git a/src/Right.java b/src/Right.java new file mode 100644 index 0000000..59b121c --- /dev/null +++ b/src/Right.java @@ -0,0 +1,233 @@ + +import java.awt.datatransfer.Clipboard; +import java.awt.datatransfer.DataFlavor; +import java.awt.datatransfer.Transferable; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.InputEvent; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; + +import javax.swing.JFrame; +import javax.swing.JMenuItem; +import javax.swing.JPopupMenu; +import javax.swing.JScrollPane; +import javax.swing.JTextArea; +import javax.swing.KeyStroke; +import javax.swing.UIManager; + +public class Right extends JFrame { + private static final long serialVersionUID = + + -5942087991012920147L; + + private JScrollPane pane = null; + + private TextAreaMenu text = null; + + public Right() { + super("右键菜单"); + + try { // 使用Windows的界面风格 + + UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); + + } catch (Exception e) { + e.printStackTrace(); + + } + + text = new TextAreaMenu(); + + pane = new JScrollPane(text); + + this.getContentPane().add(pane); + + this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + this.setSize(300, 200); + + this.setVisible(true); + + } + + public static void main(String args[]) { + new Right(); + + } + + class TextAreaMenu extends JTextArea implements MouseListener + + { + private static final long serialVersionUID = + + -2308615404205560110L; + + private JPopupMenu pop = null; // 弹出菜单 + + private JMenuItem copy = null, paste = null, cut = null; // 三个功能菜单 + + public TextAreaMenu() { + super(); + init(); + } + + private void init() { + this.addMouseListener(this); + + pop = new JPopupMenu(); + + pop.add(copy = new JMenuItem("复制")); + + pop.add(paste = new JMenuItem("粘贴")); + + pop.add(cut = new JMenuItem("剪切")); + // 设置快捷键 + copy.setAccelerator(KeyStroke.getKeyStroke('C', InputEvent.CTRL_MASK)); + + paste.setAccelerator(KeyStroke.getKeyStroke('V', InputEvent.CTRL_MASK)); + + cut.setAccelerator(KeyStroke.getKeyStroke('X', InputEvent.CTRL_MASK)); + + copy.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + action(e); + + } + + }); + + paste.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + action(e); + + } + + }); + + cut.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + action(e); + } + + }); + + this.add(pop); + + } + + public void action(ActionEvent e) { + String str = e.getActionCommand(); + + if + + (str.equals(copy.getText())) { // 复制 + + this.copy(); + + } else if + + (str.equals(paste.getText())) { // 粘贴 + + this.paste(); + + } else if + + (str.equals(cut.getText())) { // 剪切 + + this.cut(); + + } + + } + + public JPopupMenu getPop() { + return pop; + + } + + public void setPop(JPopupMenu pop) { + this.pop = pop; + + } + + public boolean isClipboardString() { + boolean b = false; + + Clipboard clipboard = + + this.getToolkit().getSystemClipboard(); + + Transferable content = + + clipboard.getContents(this); + + try { + if + + (content.getTransferData(DataFlavor.stringFlavor) instanceof + + String) { + b = true; + + } + + } catch (Exception e) { + } + + return b; + + } + + public boolean isCanCopy() { + boolean b = false; + + int start = + + this.getSelectionStart(); + + int end = + + this.getSelectionEnd(); + + if (start != end) + + b = + + true; + + return b; + + } + + public void mouseClicked(MouseEvent e) { + } + + public void mouseEntered(MouseEvent e) { + } + + public void mouseExited(MouseEvent e) { + } + + public void mousePressed(MouseEvent e) { + if (e.getButton() == + + MouseEvent.BUTTON3) { + copy.setEnabled(isCanCopy()); + + paste.setEnabled(isClipboardString()); + + cut.setEnabled(isCanCopy()); + + pop.show(this, e.getX(), e.getY()); + + } + + } + + public void mouseReleased(MouseEvent e) { + } + + } + +} -- Gitee From 203e25853017004eba61113c85696fc07a875d4b Mon Sep 17 00:00:00 2001 From: XGD Date: Mon, 24 May 2021 13:23:51 +0800 Subject: [PATCH 03/10] =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E8=8F=9C=E5=8D=95-?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E6=8D=A2=E8=A1=8C=E5=8A=9F=E8=83=BD=20?= =?UTF-8?q?=E5=B8=AE=E5=8A=A9=E9=95=BF=E5=BA=A6-=E5=85=B3=E4=BA=8E?= =?UTF-8?q?=E8=AE=B0=E4=BA=8B=E6=9C=AC=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Frame/Editor.java | 73 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 65 insertions(+), 8 deletions(-) diff --git a/src/Frame/Editor.java b/src/Frame/Editor.java index 7de97b5..7541ecc 100644 --- a/src/Frame/Editor.java +++ b/src/Frame/Editor.java @@ -10,12 +10,14 @@ import java.io.FileWriter; import java.io.IOException; import java.io.StringReader; +import javax.swing.JCheckBoxMenuItem; 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; import javax.swing.KeyStroke; import javax.swing.event.UndoableEditEvent; @@ -28,8 +30,9 @@ public class Editor extends JFrame { public JMenuBar menuBar; public JMenu menuFile, menuEdit, menuFormat, menuCheck, menuHelp; public JMenuItem newItem, openItem, saveItem, other_saveItem, exitItem, undoItem, pasteItem, copyItem, cutItem, - deleteItem; + deleteItem, wordwrapItem, statusbarItem, aboutNoteItem, helpItem; public File file, fileCurrent; + public JScrollPane scroll; public UndoManager undom = new UndoManager(); // 构造方法 @@ -38,10 +41,10 @@ public class Editor extends JFrame { createMenuBar();// 添加菜单条 // 创建文本区 textArea = new JTextArea(); - textArea.setLineWrap(true);// 文本自动换行 - textArea.setWrapStyleWord(true);// 文本区以单词为界自动换行 + // 滚动窗格 + scroll = new JScrollPane(textArea); // 设置窗口 - mainFrame.add(textArea, BorderLayout.CENTER); + mainFrame.add(scroll, BorderLayout.CENTER); mainFrame.setBounds(a, b, c, d); mainFrame.setVisible(true); mainFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); @@ -279,20 +282,74 @@ public class Editor extends JFrame { // 创建格式菜单 public void createMenuFormat() { menuFormat = new JMenu("格式"); - menuFormat.add(new JMenuItem("自动换行")); + // 自动换行功能 + wordwrapItem = new JCheckBoxMenuItem("自动换行", false); + wordwrapItem.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + if (wordwrapItem.isSelected()) { + textArea.setLineWrap(true); + } else { + textArea.setLineWrap(false); + } + } + }); + menuFormat.add(wordwrapItem); } // 创建查看菜单 public void createMenuCheck() { menuCheck = new JMenu("查看"); - menuCheck.add(new JMenuItem("状态栏")); + // 状态栏功能 + statusbarItem = new JMenuItem("状态栏"); + menuCheck.add(statusbarItem); + statusbarItem.setSelected(true);// 设为选中 + statusbarItem.addActionListener(new ActionListener() { + + public void actionPerformed(ActionEvent arg0) { + if (statusbarItem.isSelected()) { + statusbarItem.setVisible(true); + } else { + statusbarItem.setVisible(false); + } + } + }); } // 创建帮助菜单 public void createMenuHelp() { menuHelp = new JMenu("帮助"); - menuHelp.add(new JMenuItem("查看帮助")); - menuHelp.add(new JMenuItem("关于记事本")); + // 帮助功能 + helpItem = new JMenuItem("查看帮助"); + helpItem.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + + } + }); + + menuHelp.add(helpItem); + // 关于记事本 + aboutNoteItem = new JMenuItem("关于记事本"); + aboutNoteItem.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + about(); + } + }); + menuHelp.add(aboutNoteItem); + } + +//关于记事本的方法 + private void about() { + JOptionPane.showMessageDialog(this, + "*********************************************\n" + " 编写者:许国栋 \n" + + " 编写时间:2021-05-24 \n" + "班级: 信管2班28号 \n" + + " 有些功能未能实现,不足之处希望大家能提出意见,谢谢! \n" + "*********************************************\n", + "记事本", JOptionPane.INFORMATION_MESSAGE); } // 主程序 -- Gitee From bc43ed80e74b001c7380856f303bc6cf0716fa65 Mon Sep 17 00:00:00 2001 From: XGD Date: Mon, 24 May 2021 13:28:28 +0800 Subject: [PATCH 04/10] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E6=A0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Frame/Editor.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Frame/Editor.java b/src/Frame/Editor.java index 7541ecc..3b07ba8 100644 --- a/src/Frame/Editor.java +++ b/src/Frame/Editor.java @@ -304,7 +304,6 @@ public class Editor extends JFrame { // 状态栏功能 statusbarItem = new JMenuItem("状态栏"); menuCheck.add(statusbarItem); - statusbarItem.setSelected(true);// 设为选中 statusbarItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { -- Gitee From 036a98cac84f63236039cd31d35873f5c2ee2d7b Mon Sep 17 00:00:00 2001 From: XGD Date: Sat, 29 May 2021 18:20:22 +0800 Subject: [PATCH 05/10] =?UTF-8?q?=E5=AE=8C=E6=88=90=E9=BC=A0=E6=A0=87?= =?UTF-8?q?=E5=8F=B3=E9=94=AE=E8=8F=9C=E5=8D=95=E5=92=8C=E5=B8=AE=E5=8A=A9?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Frame/Editor.java | 118 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 116 insertions(+), 2 deletions(-) diff --git a/src/Frame/Editor.java b/src/Frame/Editor.java index 3b07ba8..9589d0d 100644 --- a/src/Frame/Editor.java +++ b/src/Frame/Editor.java @@ -1,14 +1,20 @@ package Frame; import java.awt.BorderLayout; +import java.awt.Desktop; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.StringReader; +import java.net.URI; +import java.net.URISyntaxException; +import java.nio.charset.MalformedInputException; import javax.swing.JCheckBoxMenuItem; import javax.swing.JFileChooser; @@ -17,6 +23,7 @@ import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; +import javax.swing.JPopupMenu; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.KeyStroke; @@ -29,8 +36,10 @@ public class Editor extends JFrame { public JTextArea textArea; public JMenuBar menuBar; public JMenu menuFile, menuEdit, menuFormat, menuCheck, menuHelp; + public JPopupMenu popupMenu; public JMenuItem newItem, openItem, saveItem, other_saveItem, exitItem, undoItem, pasteItem, copyItem, cutItem, - deleteItem, wordwrapItem, statusbarItem, aboutNoteItem, helpItem; + deleteItem, undoItem1, pasteItem1, copyItem1, cutItem1, deleteItem1, wordwrapItem, statusbarItem, + aboutNoteItem, helpItem; public File file, fileCurrent; public JScrollPane scroll; public UndoManager undom = new UndoManager(); @@ -57,6 +66,8 @@ public class Editor extends JFrame { } }); + // 鼠标菜单 + createMenuMouse(); } // 创建菜单条 @@ -279,6 +290,98 @@ public class Editor extends JFrame { menuEdit.add(deleteItem); } + // 创建鼠标菜单 + public void createMenuMouse() { + popupMenu = new JPopupMenu(); + // 撤销功能 + undoItem1 = new JMenuItem("撤销"); + undoItem1.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + if (e.getSource() == undoItem1) { + undom.undo(); + } + } + }); + popupMenu.add(undoItem1); + // 剪切功能 + cutItem1 = new JMenuItem("剪切"); + cutItem1.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + if (e.getSource() == cutItem1) + textArea.cut(); + } + }); + popupMenu.add(cutItem1); + // 复制功能 + copyItem1 = new JMenuItem("复制"); + copyItem1.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + if (e.getSource() == copyItem1) + textArea.copy(); + } + }); + popupMenu.add(copyItem1); + // 粘贴功能 + pasteItem1 = new JMenuItem("粘帖"); + pasteItem1.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + if (e.getSource() == pasteItem1) + textArea.paste(); + } + }); + popupMenu.add(pasteItem1); + // 删除功能 + deleteItem1 = new JMenuItem("删除"); + deleteItem1.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + if (e.getSource() == deleteItem1) + textArea.setText(""); + } + }); + popupMenu.add(deleteItem1); + textArea.add(popupMenu); + textArea.addMouseListener(new MouseListener() { + + @Override + public void mouseReleased(MouseEvent e) { + + } + + @Override + public void mousePressed(MouseEvent e) { + if (e.getButton() == 3) { + popupMenu.show(e.getComponent(), e.getX(), e.getY()); + } + } + + @Override + public void mouseExited(MouseEvent e) { + + } + + @Override + public void mouseEntered(MouseEvent e) { + + } + + @Override + public void mouseClicked(MouseEvent e) { + + } + }); + + } + // 创建格式菜单 public void createMenuFormat() { menuFormat = new JMenu("格式"); @@ -325,7 +428,18 @@ public class Editor extends JFrame { @Override public void actionPerformed(ActionEvent e) { - + Desktop desktop = Desktop.getDesktop(); + try { + URI uri = new URI( + "https://cn.bing.com/search?q=%E8%8E%B7%E5%8F%96%E6%9C%89%E5%85%B3+windows+10+%E4%B8%AD%E7%9A%84%E8%AE%B0%E4%BA%8B%E6%9C%AC%E7%9A%84%E5%B8%AE%E5%8A%A9&filters=guid:%224466414-zh-hans-dia%22%20lang:%22zh-hans%22&form=T00032&ocid=HelpPane-BingIA"); + desktop.browse(uri);// 打开浏览器的指定网站 + } catch (MalformedInputException e1) { + e1.printStackTrace(); + } catch (IOException e2) { + e2.printStackTrace(); + } catch (URISyntaxException e3) { + e3.printStackTrace(); + } } }); -- Gitee From e065beb3d279eb4a287afa75c4b728efa0912521 Mon Sep 17 00:00:00 2001 From: XGD Date: Tue, 1 Jun 2021 12:39:50 +0800 Subject: [PATCH 06/10] =?UTF-8?q?=E5=AE=8C=E6=88=90=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E6=A0=8F=E8=A1=8C=E6=95=B0=E7=9A=84=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Frame/Editor.java | 46 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/src/Frame/Editor.java b/src/Frame/Editor.java index 9589d0d..5f14a81 100644 --- a/src/Frame/Editor.java +++ b/src/Frame/Editor.java @@ -19,14 +19,18 @@ import java.nio.charset.MalformedInputException; import javax.swing.JCheckBoxMenuItem; 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.JPanel; import javax.swing.JPopupMenu; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.KeyStroke; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; import javax.swing.event.UndoableEditEvent; import javax.swing.event.UndoableEditListener; import javax.swing.undo.UndoManager; @@ -43,6 +47,9 @@ public class Editor extends JFrame { public File file, fileCurrent; public JScrollPane scroll; public UndoManager undom = new UndoManager(); + public JPanel jPanel; + public JLabel jLabel; + public int x; // 构造方法 public Editor(int a, int b, int c, int d) { @@ -50,8 +57,34 @@ public class Editor extends JFrame { createMenuBar();// 添加菜单条 // 创建文本区 textArea = new JTextArea(); + jPanel = new JPanel(); + jLabel = new JLabel(); + textArea.getDocument().addDocumentListener(new DocumentListener() { + + @Override + public void removeUpdate(DocumentEvent e) { + changedUpdate(e); + + } + + @Override + public void insertUpdate(DocumentEvent e) { + changedUpdate(e); + } + + @Override + public void changedUpdate(DocumentEvent e) { + x = textArea.getLineCount(); + String string1 = String.valueOf(x); + String string2 = "行数:" + string1; + jLabel.setText(string2); + } + }); + // 滚动窗格 scroll = new JScrollPane(textArea); + // 鼠标右键菜单 + createMenuMouse(); // 设置窗口 mainFrame.add(scroll, BorderLayout.CENTER); mainFrame.setBounds(a, b, c, d); @@ -66,8 +99,8 @@ public class Editor extends JFrame { } }); - // 鼠标菜单 - createMenuMouse(); + jPanel.add(jLabel); + mainFrame.add(jPanel, BorderLayout.SOUTH);// 添加面板 } // 创建菜单条 @@ -290,7 +323,7 @@ public class Editor extends JFrame { menuEdit.add(deleteItem); } - // 创建鼠标菜单 + // 创建鼠标右键菜单 public void createMenuMouse() { popupMenu = new JPopupMenu(); // 撤销功能 @@ -405,15 +438,16 @@ public class Editor extends JFrame { public void createMenuCheck() { menuCheck = new JMenu("查看"); // 状态栏功能 - statusbarItem = new JMenuItem("状态栏"); + statusbarItem = new JCheckBoxMenuItem("状态栏", false); menuCheck.add(statusbarItem); + statusbarItem.setSelected(true); statusbarItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { if (statusbarItem.isSelected()) { - statusbarItem.setVisible(true); + jPanel.setVisible(true); } else { - statusbarItem.setVisible(false); + jPanel.setVisible(false); } } }); -- Gitee From 6551fe8d1f9b2f3a7b8d1f81b351c410959e03f4 Mon Sep 17 00:00:00 2001 From: XGD Date: Tue, 1 Jun 2021 17:32:47 +0800 Subject: [PATCH 07/10] =?UTF-8?q?=E7=8A=B6=E6=80=81=E6=A0=8F=E7=9A=84?= =?UTF-8?q?=E5=88=97=E6=95=B0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Frame/Editor.java | 80 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 69 insertions(+), 11 deletions(-) diff --git a/src/Frame/Editor.java b/src/Frame/Editor.java index 5f14a81..b865b18 100644 --- a/src/Frame/Editor.java +++ b/src/Frame/Editor.java @@ -4,6 +4,8 @@ import java.awt.BorderLayout; import java.awt.Desktop; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.io.File; @@ -48,8 +50,8 @@ public class Editor extends JFrame { public JScrollPane scroll; public UndoManager undom = new UndoManager(); public JPanel jPanel; - public JLabel jLabel; - public int x; + public JLabel jLabel1, jLabel2; + public int x0, x, y0, y; // 构造方法 public Editor(int a, int b, int c, int d) { @@ -58,29 +60,63 @@ public class Editor extends JFrame { // 创建文本区 textArea = new JTextArea(); jPanel = new JPanel(); - jLabel = new JLabel(); + jLabel1 = new JLabel(); + jLabel2 = new JLabel(); + x = textArea.getLineCount(); textArea.getDocument().addDocumentListener(new DocumentListener() { - @Override public void removeUpdate(DocumentEvent e) { - changedUpdate(e); + x0 = x; + x = textArea.getLineCount(); + if (x > x0) { + y0 = y; + y = 0; + } else { + y--; + } + String stringx = String.valueOf(x); + String stringy = String.valueOf(y); + String string1 = "行数:" + stringx; + String string2 = "列数:" + stringy; + jLabel1.setText(string1); + jLabel2.setText(string2); } @Override public void insertUpdate(DocumentEvent e) { - changedUpdate(e); + x0 = x; + x = textArea.getLineCount(); + if (x > x0) { + y = 0; + } else { + y++; + } + String stringx = String.valueOf(x); + String stringy = String.valueOf(y); + String string1 = "行数:" + stringx; + String string2 = "列数:" + stringy; + jLabel1.setText(string1); + jLabel2.setText(string2); } @Override public void changedUpdate(DocumentEvent e) { + x0 = x; x = textArea.getLineCount(); - String string1 = String.valueOf(x); - String string2 = "行数:" + string1; - jLabel.setText(string2); + if (x > x0) { + y = 0; + } else { + y++; + } + String stringx = String.valueOf(x); + String stringy = String.valueOf(y); + String string1 = "行数:" + stringx; + String string2 = "列数:" + stringy; + jLabel1.setText(string1); + jLabel2.setText(string2); } }); - // 滚动窗格 scroll = new JScrollPane(textArea); // 鼠标右键菜单 @@ -99,7 +135,29 @@ public class Editor extends JFrame { } }); - jPanel.add(jLabel); + + textArea.addKeyListener(new KeyListener() { + + @Override + public void keyTyped(KeyEvent e) { + // TODO 自动生成的方法存根 + + } + + @Override + public void keyReleased(KeyEvent e) { + // TODO 自动生成的方法存根 + + } + + @Override + public void keyPressed(KeyEvent e) { + // TODO 自动生成的方法存根 + + } + }); + jPanel.add(jLabel1); + jPanel.add(jLabel2); mainFrame.add(jPanel, BorderLayout.SOUTH);// 添加面板 } -- Gitee From eb78378d6ea22f68d09331780200a39f0de9094d Mon Sep 17 00:00:00 2001 From: XGD Date: Thu, 3 Jun 2021 19:58:16 +0800 Subject: [PATCH 08/10] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E6=A0=8F=EF=BC=8C=E6=94=B9=E4=B8=BA=E5=85=89=E6=A0=87=E4=BA=8B?= =?UTF-8?q?=E4=BB=B6=EF=BC=8C=E5=8F=AF=E4=BB=A5=E8=AF=BB=E5=8F=96=E5=85=89?= =?UTF-8?q?=E6=A0=87=E6=89=80=E5=9C=A8=E5=A4=84=E7=9A=84=E8=A1=8C=E8=B7=9F?= =?UTF-8?q?=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Frame/Editor.java | 103 +++++++++--------------------------------- 1 file changed, 22 insertions(+), 81 deletions(-) diff --git a/src/Frame/Editor.java b/src/Frame/Editor.java index b865b18..a7749c8 100644 --- a/src/Frame/Editor.java +++ b/src/Frame/Editor.java @@ -4,8 +4,6 @@ import java.awt.BorderLayout; import java.awt.Desktop; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.awt.event.KeyEvent; -import java.awt.event.KeyListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.io.File; @@ -31,8 +29,8 @@ import javax.swing.JPopupMenu; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.KeyStroke; -import javax.swing.event.DocumentEvent; -import javax.swing.event.DocumentListener; +import javax.swing.event.CaretEvent; +import javax.swing.event.CaretListener; import javax.swing.event.UndoableEditEvent; import javax.swing.event.UndoableEditListener; import javax.swing.undo.UndoManager; @@ -51,77 +49,44 @@ public class Editor extends JFrame { public UndoManager undom = new UndoManager(); public JPanel jPanel; public JLabel jLabel1, jLabel2; - public int x0, x, y0, y; + public int x, y, position; // 构造方法 public Editor(int a, int b, int c, int d) { mainFrame = new JFrame(); createMenuBar();// 添加菜单条 - // 创建文本区 - textArea = new JTextArea(); - jPanel = new JPanel(); + jPanel = new JPanel();// 状态栏面板 jLabel1 = new JLabel(); jLabel2 = new JLabel(); - x = textArea.getLineCount(); - textArea.getDocument().addDocumentListener(new DocumentListener() { - @Override - public void removeUpdate(DocumentEvent e) { - x0 = x; - x = textArea.getLineCount(); - if (x > x0) { - y0 = y; - y = 0; - } else { - y--; - } - String stringx = String.valueOf(x); - String stringy = String.valueOf(y); - String string1 = "行数:" + stringx; - String string2 = "列数:" + stringy; - jLabel1.setText(string1); - jLabel2.setText(string2); - - } + // 创建文本区 + textArea = new JTextArea(); + textArea.addCaretListener(new CaretListener() { @Override - public void insertUpdate(DocumentEvent e) { - x0 = x; - x = textArea.getLineCount(); - if (x > x0) { - y = 0; - } else { - y++; + public void caretUpdate(CaretEvent e) { + JTextArea area = (JTextArea) e.getSource(); + try { + int position = area.getCaretPosition();// 获取光标符的位置 + x = area.getLineOfOffset(position);// 将文本中的偏移量转化为行号 + y = position - area.getLineStartOffset(x); + x += 1; + jLabel1.setText("第" + x + "行"); + jLabel2.setText("第" + (y + 1) + "列"); + } catch (Exception e1) { + e1.printStackTrace(); } - String stringx = String.valueOf(x); - String stringy = String.valueOf(y); - String string1 = "行数:" + stringx; - String string2 = "列数:" + stringy; - jLabel1.setText(string1); - jLabel2.setText(string2); - } - @Override - public void changedUpdate(DocumentEvent e) { - x0 = x; - x = textArea.getLineCount(); - if (x > x0) { - y = 0; - } else { - y++; - } - String stringx = String.valueOf(x); - String stringy = String.valueOf(y); - String string1 = "行数:" + stringx; - String string2 = "列数:" + stringy; - jLabel1.setText(string1); - jLabel2.setText(string2); } }); + + jPanel.add(jLabel1); + jPanel.add(jLabel2); // 滚动窗格 scroll = new JScrollPane(textArea); // 鼠标右键菜单 createMenuMouse(); // 设置窗口 + mainFrame.add(jPanel, BorderLayout.SOUTH);// 添加状态栏 mainFrame.add(scroll, BorderLayout.CENTER); mainFrame.setBounds(a, b, c, d); mainFrame.setVisible(true); @@ -135,30 +100,6 @@ public class Editor extends JFrame { } }); - - textArea.addKeyListener(new KeyListener() { - - @Override - public void keyTyped(KeyEvent e) { - // TODO 自动生成的方法存根 - - } - - @Override - public void keyReleased(KeyEvent e) { - // TODO 自动生成的方法存根 - - } - - @Override - public void keyPressed(KeyEvent e) { - // TODO 自动生成的方法存根 - - } - }); - jPanel.add(jLabel1); - jPanel.add(jLabel2); - mainFrame.add(jPanel, BorderLayout.SOUTH);// 添加面板 } // 创建菜单条 -- Gitee From 2a8963448e39686ae61ce720d4ea3b31de34d889 Mon Sep 17 00:00:00 2001 From: XGD Date: Mon, 7 Jun 2021 00:03:00 +0800 Subject: [PATCH 09/10] =?UTF-8?q?=E5=AE=8C=E5=96=84=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=EF=BC=8C=E7=8A=B6=E6=80=81=E6=A0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Frame/Editor.java | 81 ++++++++++++++++++++++++------------------- 1 file changed, 45 insertions(+), 36 deletions(-) diff --git a/src/Frame/Editor.java b/src/Frame/Editor.java index a7749c8..e20a506 100644 --- a/src/Frame/Editor.java +++ b/src/Frame/Editor.java @@ -4,6 +4,8 @@ import java.awt.BorderLayout; import java.awt.Desktop; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.InputEvent; +import java.awt.event.KeyEvent; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.io.File; @@ -54,12 +56,13 @@ public class Editor extends JFrame { // 构造方法 public Editor(int a, int b, int c, int d) { mainFrame = new JFrame(); - createMenuBar();// 添加菜单条 jPanel = new JPanel();// 状态栏面板 jLabel1 = new JLabel(); jLabel2 = new JLabel(); // 创建文本区 textArea = new JTextArea(); + x = 1; + y = 0; textArea.addCaretListener(new CaretListener() { @Override @@ -71,21 +74,22 @@ public class Editor extends JFrame { y = position - area.getLineStartOffset(x); x += 1; jLabel1.setText("第" + x + "行"); - jLabel2.setText("第" + (y + 1) + "列"); + jLabel2.setText("第" + y + "列"); } catch (Exception e1) { e1.printStackTrace(); } } }); - + jLabel1.setText("第" + x + "行"); + jLabel2.setText("第" + y + "列"); jPanel.add(jLabel1); jPanel.add(jLabel2); - // 滚动窗格 - scroll = new JScrollPane(textArea); - // 鼠标右键菜单 - createMenuMouse(); + scroll = new JScrollPane(textArea);// 设置滚动窗格 + createMenuBar();// 创建菜单条 + createMenuMouse();// 鼠标右键菜单 // 设置窗口 + textArea.setLineWrap(true);// 自动换行 mainFrame.add(jPanel, BorderLayout.SOUTH);// 添加状态栏 mainFrame.add(scroll, BorderLayout.CENTER); mainFrame.setBounds(a, b, c, d); @@ -105,6 +109,7 @@ public class Editor extends JFrame { // 创建菜单条 public void createMenuBar() { menuBar = new JMenuBar(); + // 添加各个菜单 createMenuFile(); menuBar.add(menuFile); createMenuEdit(); @@ -115,7 +120,7 @@ public class Editor extends JFrame { menuBar.add(menuCheck); createMenuHelp(); menuBar.add(menuHelp); - mainFrame.setJMenuBar(menuBar); + mainFrame.setJMenuBar(menuBar);// 向窗口添加菜单条 } // 创建文件菜单 @@ -123,7 +128,8 @@ public class Editor extends JFrame { menuFile = new JMenu("文件"); // 新建功能 - newItem = new JMenuItem("新建"); + newItem = new JMenuItem("新建(N)"); + newItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, InputEvent.CTRL_MASK)); newItem.addActionListener(new ActionListener() { @Override @@ -134,7 +140,8 @@ public class Editor extends JFrame { menuFile.add(newItem); // 打开功能 - openItem = new JMenuItem("打开"); + openItem = new JMenuItem("打开(O)"); + openItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.CTRL_MASK)); openItem.addActionListener(new ActionListener() { @Override @@ -145,10 +152,10 @@ public class Editor extends JFrame { if (file != null) { textArea.setText(" "); try { - char[] buffer = new char[1024];// ?? + char[] buffer = new char[1024]; FileReader fileReader = new FileReader(file); for (;;) { - int count = fileReader.read(buffer);// ?? + int count = fileReader.read(buffer); if (count != -1) { textArea.append(new String(buffer, 0, count)); } else { @@ -173,7 +180,8 @@ public class Editor extends JFrame { menuFile.add(openItem); // 保存功能 - saveItem = new JMenuItem("保存"); + saveItem = new JMenuItem("保存(S)"); + saveItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK)); saveItem.addActionListener(new ActionListener() { @Override @@ -197,7 +205,8 @@ public class Editor extends JFrame { menuFile.add(saveItem); // 另存为功能 - other_saveItem = new JMenuItem("另存为"); + other_saveItem = new JMenuItem("另存为(A)"); + other_saveItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.CTRL_MASK)); other_saveItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { @@ -243,14 +252,20 @@ public class Editor extends JFrame { }); menuFile.add(other_saveItem); + menuFile.addSeparator(); // 退出功能 - exitItem = new JMenuItem("退出"); + exitItem = new JMenuItem("退出(X)"); + exitItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_MASK)); exitItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - System.exit(0); + int n = JOptionPane.showConfirmDialog(null, "是否退出", "标题", JOptionPane.YES_NO_OPTION); + if (n == JOptionPane.YES_OPTION) { + System.exit(0); + } else { + } } }); menuFile.add(exitItem); @@ -261,7 +276,7 @@ public class Editor extends JFrame { menuEdit = new JMenu("编辑"); // 撤销功能 undoItem = new JMenuItem("撤销(Z)"); - undoItem.setAccelerator(KeyStroke.getKeyStroke('z')); + undoItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z, InputEvent.CTRL_MASK)); undoItem.addActionListener(new ActionListener() { @Override @@ -272,9 +287,10 @@ public class Editor extends JFrame { } }); menuEdit.add(undoItem); + menuEdit.addSeparator(); // 剪切功能 cutItem = new JMenuItem("剪切(T)"); - cutItem.setAccelerator(KeyStroke.getKeyStroke('t')); + cutItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T, InputEvent.CTRL_MASK)); cutItem.addActionListener(new ActionListener() { @Override @@ -286,7 +302,7 @@ public class Editor extends JFrame { menuEdit.add(cutItem); // 复制功能 copyItem = new JMenuItem("复制(C)"); - copyItem.setAccelerator(KeyStroke.getKeyStroke('c')); + copyItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK)); copyItem.addActionListener(new ActionListener() { @Override @@ -298,7 +314,7 @@ public class Editor extends JFrame { menuEdit.add(copyItem); // 粘贴功能 pasteItem = new JMenuItem("粘帖(V)"); - pasteItem.setAccelerator(KeyStroke.getKeyStroke('v')); + pasteItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_MASK)); pasteItem.addActionListener(new ActionListener() { @Override @@ -310,7 +326,7 @@ public class Editor extends JFrame { menuEdit.add(pasteItem); // 删除功能 deleteItem = new JMenuItem("删除(D)"); - deleteItem.setAccelerator(KeyStroke.getKeyStroke('d')); + deleteItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D, InputEvent.CTRL_MASK)); deleteItem.addActionListener(new ActionListener() { @Override @@ -337,6 +353,7 @@ public class Editor extends JFrame { } }); popupMenu.add(undoItem1); + popupMenu.addSeparator(); // 剪切功能 cutItem1 = new JMenuItem("剪切"); cutItem1.addActionListener(new ActionListener() { @@ -386,7 +403,6 @@ public class Editor extends JFrame { @Override public void mouseReleased(MouseEvent e) { - } @Override @@ -398,17 +414,14 @@ public class Editor extends JFrame { @Override public void mouseExited(MouseEvent e) { - } @Override public void mouseEntered(MouseEvent e) { - } @Override public void mouseClicked(MouseEvent e) { - } }); @@ -418,7 +431,7 @@ public class Editor extends JFrame { public void createMenuFormat() { menuFormat = new JMenu("格式"); // 自动换行功能 - wordwrapItem = new JCheckBoxMenuItem("自动换行", false); + wordwrapItem = new JCheckBoxMenuItem("自动换行", true); wordwrapItem.addActionListener(new ActionListener() { @Override @@ -477,27 +490,23 @@ public class Editor extends JFrame { }); menuHelp.add(helpItem); + menuHelp.addSeparator(); // 关于记事本 aboutNoteItem = new JMenuItem("关于记事本"); aboutNoteItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - about(); + JOptionPane.showMessageDialog(null, + "*********************************************\n" + " 编写者:许国栋 \n" + + " 编写时间:2021-05-24 \n" + "班级: 信管2班28号 \n" + + " 有些功能未能实现,不足之处希望大家能提出意见,谢谢! \n" + "*********************************************\n", + "记事本", JOptionPane.INFORMATION_MESSAGE); } }); menuHelp.add(aboutNoteItem); } -//关于记事本的方法 - private void about() { - JOptionPane.showMessageDialog(this, - "*********************************************\n" + " 编写者:许国栋 \n" - + " 编写时间:2021-05-24 \n" + "班级: 信管2班28号 \n" - + " 有些功能未能实现,不足之处希望大家能提出意见,谢谢! \n" + "*********************************************\n", - "记事本", JOptionPane.INFORMATION_MESSAGE); - } - // 主程序 public static void main(String[] args) { Editor editor = new Editor(200, 200, 1000, 400); -- Gitee From 4383e2928735f3b61068086aeaa7b79f7c376e45 Mon Sep 17 00:00:00 2001 From: XGD Date: Tue, 8 Jun 2021 11:09:25 +0800 Subject: [PATCH 10/10] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E6=A0=8F=E5=AD=97=E6=95=B0=E7=9A=84=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Frame/Editor.java | 40 +++++++++++++++++++++++++++++++++++----- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/src/Frame/Editor.java b/src/Frame/Editor.java index e20a506..a77eb6d 100644 --- a/src/Frame/Editor.java +++ b/src/Frame/Editor.java @@ -33,11 +33,17 @@ import javax.swing.JTextArea; import javax.swing.KeyStroke; import javax.swing.event.CaretEvent; import javax.swing.event.CaretListener; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; import javax.swing.event.UndoableEditEvent; import javax.swing.event.UndoableEditListener; import javax.swing.undo.UndoManager; public class Editor extends JFrame { + /** + * + */ + private static final long serialVersionUID = -712838941484955771L; public JFrame mainFrame; public JTextArea textArea; public JMenuBar menuBar; @@ -50,19 +56,41 @@ public class Editor extends JFrame { public JScrollPane scroll; public UndoManager undom = new UndoManager(); public JPanel jPanel; - public JLabel jLabel1, jLabel2; - public int x, y, position; + public JLabel jLabel0, jLabel1, jLabel2; + public int x, y, position, word; // 构造方法 public Editor(int a, int b, int c, int d) { mainFrame = new JFrame(); jPanel = new JPanel();// 状态栏面板 + jLabel0 = new JLabel(); jLabel1 = new JLabel(); jLabel2 = new JLabel(); // 创建文本区 textArea = new JTextArea(); x = 1; y = 0; + word = 0; + textArea.getDocument().addDocumentListener(new DocumentListener() { + + @Override + public void removeUpdate(DocumentEvent e) { + word--; + jLabel0.setText("字数" + word); + } + + @Override + public void insertUpdate(DocumentEvent e) { + word++; + jLabel0.setText("字数" + word); + } + + @Override + public void changedUpdate(DocumentEvent e) { + word++; + jLabel0.setText("字数" + word); + } + }); textArea.addCaretListener(new CaretListener() { @Override @@ -83,8 +111,10 @@ public class Editor extends JFrame { }); jLabel1.setText("第" + x + "行"); jLabel2.setText("第" + y + "列"); + jLabel0.setText("字数" + word); jPanel.add(jLabel1); jPanel.add(jLabel2); + jPanel.add(jLabel0); scroll = new JScrollPane(textArea);// 设置滚动窗格 createMenuBar();// 创建菜单条 createMenuMouse();// 鼠标右键菜单 @@ -155,14 +185,14 @@ public class Editor extends JFrame { char[] buffer = new char[1024]; FileReader fileReader = new FileReader(file); for (;;) { - int count = fileReader.read(buffer); + int count = fileReader.read(buffer);// 文件大小 if (count != -1) { - textArea.append(new String(buffer, 0, count)); + textArea.append(new String(buffer, 0, count));// 读取文件内容 } else { break; } fileCurrent = file;// 持有打开文件的对象 - mainFrame.setTitle(file.getAbsolutePath()); + mainFrame.setTitle(file.getAbsolutePath());// 将文件的绝对路径名设为主窗口的标题 } fileReader.close(); } catch (FileNotFoundException e1) { -- Gitee