From 74138c3f16c89570e55510d48da5f314962bf114 Mon Sep 17 00:00:00 2001 From: ASUS Date: Thu, 10 Jun 2021 16:10:11 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E8=AE=B0=E4=BA=8B=E6=9C=AC=E7=9A=84?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/{java2020spring => java2021spring}/Test.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) rename src/{java2020spring => java2021spring}/Test.java (39%) diff --git a/src/java2020spring/Test.java b/src/java2021spring/Test.java similarity index 39% rename from src/java2020spring/Test.java rename to src/java2021spring/Test.java index fc09c19..8c923ff 100644 --- a/src/java2020spring/Test.java +++ b/src/java2021spring/Test.java @@ -1,10 +1,12 @@ -package java2020spring; +package java2021spring; public class Test { public static void main(String[] args) { - System.out.println("Hello world!"); + TheFrame aframe; + aframe = new TheFrame("窗口", 200, 200, 1000, 600); } + } -- Gitee From 40458f593bb91e014f8f9d39efe399606b112b0b Mon Sep 17 00:00:00 2001 From: ASUS Date: Thu, 10 Jun 2021 16:20:31 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E8=AE=B0=E4=BA=8B=E6=9C=AC=E5=85=B7?= =?UTF-8?q?=E4=BD=93=E5=8A=9F=E8=83=BD=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2021spring/TheFrame.java | 494 +++++++++++++++++++++++++++++++ 1 file changed, 494 insertions(+) create mode 100644 src/java2021spring/TheFrame.java diff --git a/src/java2021spring/TheFrame.java b/src/java2021spring/TheFrame.java new file mode 100644 index 0000000..3c31033 --- /dev/null +++ b/src/java2021spring/TheFrame.java @@ -0,0 +1,494 @@ +package java2021spring; + +import java.awt.*; +import java.awt.datatransfer.Clipboard; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.InputEvent; +import java.awt.event.KeyEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +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.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintStream; +import java.io.PrintWriter; +import java.text.Format; + +import javax.swing.*; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import javax.swing.event.UndoableEditEvent; +import javax.swing.event.UndoableEditListener; +import javax.swing.filechooser.FileNameExtensionFilter; +import javax.swing.undo.CannotRedoException; +import javax.swing.undo.CannotUndoException; +import javax.swing.undo.UndoManager; + +public class TheFrame extends JFrame implements ActionListener, DocumentListener { + JMenuBar menubar; + JMenu menu1, menu2, menu3, menu4, menu5, menu6; + JMenuItem item1, item2, item3, item4, item5;// 文件菜单的菜单项 + JMenuItem eitem1, eitem2, eitem3, eitem4, eitem5, font;// 编辑菜单的菜单项 + JMenuItem hitem1, hitem2;// 帮助菜单的菜单项 + JCheckBoxMenuItem oitem2, vitem2; + JMenuItem pitem1, pitem2, pitem3, pitem4, pitem5; + JMenuItem newcolor1, newcolor2; + JScrollPane pane; + JTextArea area; + JPopupMenu popup; + Edit editListener; + String o, c; + JTextField status; + String path, fuhao, zifu; + public UndoManager undoManager = new UndoManager(); + + public TheFrame() { + } + + public TheFrame(String s, int x, int y, int w, int h) { + init(s); + size(); + showLayout(); + mouseMenu(); + setLocation(x, y); + setSize(w, h); + setVisible(true); + int Fontsize = 30; + area.setFont(new Font("", Font.PLAIN, Fontsize)); + + setDefaultCloseOperation(DISPOSE_ON_CLOSE); + updoo(); + addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + exit(); + } + }); + } + + // 添加菜单及注册监听器 + void init(String s) { + setTitle(s); + editListener = new Edit(); + + // 创建文件菜单、菜单条和注册监听器 + menubar = new JMenuBar(); + menu1 = new JMenu("文件(F)"); + item1 = new JMenuItem("新建(N)"); + item2 = new JMenuItem("打开(O)"); + item3 = new JMenuItem("保存(S)"); + item4 = new JMenuItem("另存为(A)"); + item5 = new JMenuItem("退出"); + item1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, InputEvent.CTRL_MASK)); + item2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.CTRL_MASK)); + item3.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK)); + item4.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.CTRL_MASK)); + + item1.addActionListener(editListener); + item2.addActionListener(editListener); + item3.addActionListener(editListener); + item4.addActionListener(editListener); + item5.addActionListener(editListener); + + // 向菜单条添加文件菜单及菜单项 + menubar.add(menu1); + menu1.add(item1); + menu1.add(item2); + menu1.add(item3); + menu1.add(item4); + menu1.addSeparator(); + menu1.add(item5); + + // 创建编辑菜单、菜单条和注册监听器 + menu2 = new JMenu("编辑"); + eitem1 = new JMenuItem("撤销(Z)"); + eitem2 = new JMenuItem("剪切(X)"); + eitem3 = new JMenuItem("复制(C)"); + eitem4 = new JMenuItem("粘贴(V)"); + eitem5 = new JMenuItem("删除(D)"); + eitem1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z, InputEvent.CTRL_MASK)); + eitem2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_MASK)); + eitem3.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK)); + eitem4.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_MASK)); + eitem5.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_D, InputEvent.CTRL_MASK)); + eitem1.setActionCommand("cancel"); + eitem2.setActionCommand("cut"); + eitem3.setActionCommand("copy"); + eitem4.setActionCommand("paste"); + eitem5.setActionCommand("delete"); + eitem1.addActionListener(editListener); + eitem2.addActionListener(editListener); + eitem3.addActionListener(editListener); + eitem4.addActionListener(editListener); + eitem5.addActionListener(editListener); + + // 向菜单条添加编辑菜单及菜单项 + menubar.add(menu2); + menu2.add(eitem1); + menu2.addSeparator(); + menu2.add(eitem2); + menu2.add(eitem3); + menu2.add(eitem4); + menu2.add(eitem5); + + // 创建格式菜单、菜单条和注册监听器 + menu3 = new JMenu("格式"); + oitem2 = new JCheckBoxMenuItem("自动换行(T)"); + oitem2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T, 0)); + oitem2.addActionListener(editListener); + + // 向菜单条添加编辑菜单及菜单项 + menubar.add(menu3); + menu3.add(oitem2); + + // 创建查看菜单、菜单条和注册监听器 + menu4 = new JMenu("查看"); + vitem2 = new JCheckBoxMenuItem("状态栏"); + + vitem2.addActionListener(editListener); + + // 向菜单条添加查看菜单及菜单项 + menubar.add(menu4); + menu4.add(vitem2); + + // 创建帮助菜单、菜单条和注册监听器 + menu5 = new JMenu("帮助"); + hitem1 = new JMenuItem("查看帮助"); + hitem2 = new JMenuItem("关于记事本"); + + hitem1.addActionListener(editListener); + hitem2.addActionListener(editListener); + + // 向菜单条添加查看菜单及菜单项 + menubar.add(menu5); + menu5.add(hitem1); + menu5.addSeparator(); + menu5.add(hitem2); + + // 创建改变颜色菜单、菜单条和注册监听器 + menu6 = new JMenu("改变颜色"); + newcolor1 = new JMenuItem("背景颜色"); + newcolor2 = new JMenuItem("字体颜色"); + newcolor1.addActionListener(editListener); + newcolor2.addActionListener(editListener); + + // 向菜单条添加查看菜单及菜单项 + menubar.add(menu6); + menu6.add(newcolor1); + menu6.add(newcolor2); + + // 添加菜单条 + setJMenuBar(menubar); + } + + // 添加文本编辑区和滚动条,并添加到窗口 + void showLayout() { + area = new JTextArea(30, 50); + pane = new JScrollPane(area); + pane.getVerticalScrollBar(); + pane.getHorizontalScrollBar(); + add(pane, BorderLayout.CENTER); + o = area.getText(); + } + + // 右键菜单 + void mouseMenu() { + + // 创建右键单击弹出的菜单 + popup = new JPopupMenu(); + pitem1 = new JMenuItem("撤销"); + pitem2 = new JMenuItem("剪切"); + pitem3 = new JMenuItem("复制"); + pitem4 = new JMenuItem("粘贴"); + pitem5 = new JMenuItem("删除"); + + // 添加菜单项和分隔条及注册监听器 + popup.add(pitem1); + popup.addSeparator(); + popup.add(pitem2); + popup.addSeparator(); + popup.add(pitem3); + popup.addSeparator(); + popup.add(pitem4); + popup.addSeparator(); + popup.add(pitem5); + pitem1.addActionListener(editListener); + pitem2.addActionListener(editListener); + pitem3.addActionListener(editListener); + pitem4.addActionListener(editListener); + pitem5.addActionListener(editListener); + + // 在文本编辑区添加右键菜单 + area.addMouseListener(new MouseAdapter() { + public void mouseClicked(MouseEvent e) { + if (e.getButton() == MouseEvent.BUTTON3) { + popup.show(area, e.getX(), e.getY()); + } + } + }); + } + + // 监听器的实现 + public class Edit implements ActionListener { + TheFrame f = new TheFrame(); + + public void actionPerformed(ActionEvent e) { + String s = e.getActionCommand(); + + // 复制 + if (s.equals("copy") || e.getSource() == pitem3) + area.copy(); + + // 剪切 + else if (s.equals("cut") || e.getSource() == pitem2) + area.cut(); + + // 粘贴 + else if (s.equals("paste") || e.getSource() == pitem4) + area.paste(); + + // 删除 + else if (s.equals("delete") || e.getSource() == pitem5) + delete(); + + // 打开 + else if (e.getSource() == item2) { + JFileChooser chooser = new JFileChooser(); + BufferedReader read = null; + FileReader fread = null; + FileNameExtensionFilter filter = new FileNameExtensionFilter("文本文档(*.txt)", "txt"); + chooser.setFileFilter(filter); + chooser.setDialogTitle("打开文件"); + chooser.showOpenDialog(null); + chooser.setVisible(true); + path = chooser.getSelectedFile().getAbsolutePath(); + try { + fread = new FileReader(path); + read = new BufferedReader(fread); + String text = ""; + String t = null; + while ((t = read.readLine()) != null) + text = text + (t + "\n"); + area.setText(text); + } catch (Exception e1) { + } finally { + try { + read.close(); + fread.close(); + } catch (Exception q) { + } + } + } + + // 另保存 + else if (e.getSource() == item4) { + saveFile(); + } + + // 新建 + else if (e.getSource() == item1) { + TheFrame f = new TheFrame(); + c = area.getText(); + if (c.equals(o) == false) { + int n = JOptionPane.showConfirmDialog(f, "您是否需要保存文件?", "记事本", JOptionPane.YES_NO_OPTION); + if (n == JOptionPane.YES_OPTION) + saveFile(); + else { + area.setText(null); + } + } + area.setText(null); + } + + // 退出 + else if (e.getSource() == item5) { + exit(); + } + + // 自动换行 + else if (e.getSource() == oitem2) { + wrap(); + } + + // 状态栏 + else if (e.getSource() == vitem2) { + Status(); + } + + // 查看帮助 + else if (e.getSource() == hitem1) { + help(); + } + + // 关于记事本 + else if (e.getSource() == hitem2) { + aboutnote(); + } + + // 保存 + else if (e.getSource() == item3) { + saveFile(); + } + + // 背景颜色 + else if (e.getSource() == newcolor1) { + Color newColor = JColorChooser.showDialog(area, "调色背景", getContentPane().getBackground()); + if (newColor != null) + area.setBackground(newColor); + } + + // 背景颜色 + else if (e.getSource() == newcolor2) { + Color newColor = JColorChooser.showDialog(area, "调色字体", getContentPane().getBackground()); + if (newColor != null) + area.setForeground(newColor); + } + } + } + + // 保存功能的实现 + public void saveFile() { + BufferedWriter writer = null; + FileWriter fwriter = null; + JFileChooser choose = new JFileChooser(); + choose.setDialogTitle("另存为"); + choose.setVisible(true); + choose.showSaveDialog(null); + String pathp = choose.getSelectedFile().getAbsolutePath(); + choose.setFileSelectionMode(JFileChooser.FILES_ONLY); + int result = choose.showSaveDialog(this); + if (result == JFileChooser.CANCEL_OPTION) { + return; + } else { + try { + fwriter = new FileWriter(pathp); + writer = new BufferedWriter(fwriter); + String output = ""; + output = area.getText(); + fwriter.write(output); + } catch (Exception q) { + } finally { + try { + writer.close(); + fwriter.close(); + } catch (Exception w) { + } + } + } + } + + // 退出保存功能的实现 + public void exit() { + TheFrame f = new TheFrame(); + c = area.getText(); + if (c.equals(o) == false) { + int n = JOptionPane.showConfirmDialog(f, "您是否需要保存文件?", "记事本", JOptionPane.YES_NO_OPTION); + + if (n == JOptionPane.YES_OPTION) + saveFile(); + else { + area.setText(null); + setVisible(false); + } + } else { + setVisible(false); + return; + } + } + + // 自动换行功能的实现 + public void wrap() { + if (oitem2.getState()) + area.setLineWrap(true); + else + area.setLineWrap(false); + } + + // 状态栏功能的实现 + public void Status() { + status = new JTextField(); + int line = 1, column = 1; + add(status, BorderLayout.SOUTH); + if (vitem2.getState()) { + try { + int c = area.getCaretPosition(); + line = area.getLineOfOffset(c); + column = c - area.getLineStartOffset(line); + line = line + 1; + } catch (Exception e) { + } + status.setText("第" + line + "行,第 " + column + "列 "); + } else + return; + } + + // 关于记事本功能的实现 + public void aboutnote() { + TheFrame f = new TheFrame(); + JOptionPane.showConfirmDialog(f, "代码完成于2021年6月11日前", "关于", JOptionPane.YES_OPTION); + } + + // 查看帮助功能的实现 + public void help() { + TheFrame f = new TheFrame(); + JOptionPane.showConfirmDialog(f, "您可以通过上网搜索相应的问题答案获得帮助", "帮助", JOptionPane.YES_OPTION); + } + + // 删除功能的实现 + public void delete() { + int a = area.getSelectionStart(); + int b = area.getSelectionEnd(); + area.replaceRange("", a, b); + } + + // 撤销功能的实现 + public void updoo() { + area.getDocument().addUndoableEditListener(new UndoableEditListener() { + public void undoableEditHappened(UndoableEditEvent e) { + undoManager.addEdit(e.getEdit()); + eitem1.setEnabled(undoManager.canUndo()); + pitem1.setEnabled(undoManager.canUndo()); + } + }); + eitem1.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + undoManager.undo(); + eitem1.setEnabled(undoManager.canUndo()); + } + }); + pitem1.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + undoManager.undo(); + pitem1.setEnabled(undoManager.canUndo()); + } + }); + + } + + @Override + + public void actionPerformed(ActionEvent e) { + + } + + @Override + public void insertUpdate(DocumentEvent e) { + + } + + @Override + public void removeUpdate(DocumentEvent e) { + + } + + @Override + public void changedUpdate(DocumentEvent e) { + + } + +} -- Gitee From e9825cf712bb482b49ea924c59fcd2d3669908b3 Mon Sep 17 00:00:00 2001 From: ASUS Date: Thu, 10 Jun 2021 20:50:32 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=B3=A8=E9=87=8A?= =?UTF-8?q?=E5=92=8C=E5=88=A0=E9=99=A4=E4=B8=8D=E5=BF=85=E8=A6=81=E7=9A=84?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2021spring/TheFrame.java | 24 ++++++------------------ 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/src/java2021spring/TheFrame.java b/src/java2021spring/TheFrame.java index 3c31033..458178e 100644 --- a/src/java2021spring/TheFrame.java +++ b/src/java2021spring/TheFrame.java @@ -1,7 +1,6 @@ package java2021spring; import java.awt.*; -import java.awt.datatransfer.Clipboard; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.InputEvent; @@ -12,33 +11,25 @@ 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.FileReader; import java.io.FileWriter; -import java.io.IOException; -import java.io.PrintStream; -import java.io.PrintWriter; -import java.text.Format; - import javax.swing.*; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.event.UndoableEditEvent; import javax.swing.event.UndoableEditListener; import javax.swing.filechooser.FileNameExtensionFilter; -import javax.swing.undo.CannotRedoException; -import javax.swing.undo.CannotUndoException; import javax.swing.undo.UndoManager; public class TheFrame extends JFrame implements ActionListener, DocumentListener { JMenuBar menubar; JMenu menu1, menu2, menu3, menu4, menu5, menu6; JMenuItem item1, item2, item3, item4, item5;// 文件菜单的菜单项 - JMenuItem eitem1, eitem2, eitem3, eitem4, eitem5, font;// 编辑菜单的菜单项 + JMenuItem eitem1, eitem2, eitem3, eitem4, eitem5;// 编辑菜单的菜单项 JMenuItem hitem1, hitem2;// 帮助菜单的菜单项 - JCheckBoxMenuItem oitem2, vitem2; - JMenuItem pitem1, pitem2, pitem3, pitem4, pitem5; - JMenuItem newcolor1, newcolor2; + JCheckBoxMenuItem oitem2, vitem2;// 格式和查看菜单的菜单项 + JMenuItem pitem1, pitem2, pitem3, pitem4, pitem5;// 右键弹出菜单的菜单项 + JMenuItem newcolor1, newcolor2;// 改变颜色菜单的菜单项 JScrollPane pane; JTextArea area; JPopupMenu popup; @@ -61,7 +52,6 @@ public class TheFrame extends JFrame implements ActionListener, DocumentListener setVisible(true); int Fontsize = 30; area.setFont(new Font("", Font.PLAIN, Fontsize)); - setDefaultCloseOperation(DISPOSE_ON_CLOSE); updoo(); addWindowListener(new WindowAdapter() { @@ -88,7 +78,6 @@ public class TheFrame extends JFrame implements ActionListener, DocumentListener item2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.CTRL_MASK)); item3.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK)); item4.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.CTRL_MASK)); - item1.addActionListener(editListener); item2.addActionListener(editListener); item3.addActionListener(editListener); @@ -334,14 +323,14 @@ public class TheFrame extends JFrame implements ActionListener, DocumentListener else if (e.getSource() == item3) { saveFile(); } - + // 背景颜色 else if (e.getSource() == newcolor1) { Color newColor = JColorChooser.showDialog(area, "调色背景", getContentPane().getBackground()); if (newColor != null) area.setBackground(newColor); } - + // 背景颜色 else if (e.getSource() == newcolor2) { Color newColor = JColorChooser.showDialog(area, "调色字体", getContentPane().getBackground()); @@ -388,7 +377,6 @@ public class TheFrame extends JFrame implements ActionListener, DocumentListener c = area.getText(); if (c.equals(o) == false) { int n = JOptionPane.showConfirmDialog(f, "您是否需要保存文件?", "记事本", JOptionPane.YES_NO_OPTION); - if (n == JOptionPane.YES_OPTION) saveFile(); else { -- Gitee