From a98441b20525e1bccf82550859be82264d8e718b Mon Sep 17 00:00:00 2001 From: alBeLine <2522347980@qq.com> Date: Tue, 17 May 2022 12:22:49 +0800 Subject: [PATCH 01/30] =?UTF-8?q?=E6=B5=8B=E8=AF=95push=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/Test.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/java2022spring/Test.java b/src/java2022spring/Test.java index 24deb29..9720a9d 100644 --- a/src/java2022spring/Test.java +++ b/src/java2022spring/Test.java @@ -1,7 +1,19 @@ package java2022spring; +import java.util.Random; public class Test { public static void main(String[] args) { - System.out.println("Hello world!"); + Random random = new Random(); + double two = 0, four = 0; + for(int i = 0; i < 100; i++) { + int x = random.nextInt(4) % 4 == 0 ? 4 : 2; + if(x == 2) { + two++; + } + else { + four++; + } + } + System.out.printf("%f ", four / two); } } -- Gitee From 14beb4e53507abf9c6dede34a7e9d4d638edef4a Mon Sep 17 00:00:00 2001 From: alBeLine <2522347980@qq.com> Date: Tue, 17 May 2022 12:42:02 +0800 Subject: [PATCH 02/30] =?UTF-8?q?Revert=20"=E6=B5=8B=E8=AF=95push=E6=93=8D?= =?UTF-8?q?=E4=BD=9C"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit a98441b20525e1bccf82550859be82264d8e718b. --- src/java2022spring/Test.java | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/src/java2022spring/Test.java b/src/java2022spring/Test.java index 9720a9d..24deb29 100644 --- a/src/java2022spring/Test.java +++ b/src/java2022spring/Test.java @@ -1,19 +1,7 @@ package java2022spring; -import java.util.Random; public class Test { public static void main(String[] args) { - Random random = new Random(); - double two = 0, four = 0; - for(int i = 0; i < 100; i++) { - int x = random.nextInt(4) % 4 == 0 ? 4 : 2; - if(x == 2) { - two++; - } - else { - four++; - } - } - System.out.printf("%f ", four / two); + System.out.println("Hello world!"); } } -- Gitee From 695f46d0dbfcec2da2e56c0617ee93cb1d925bc2 Mon Sep 17 00:00:00 2001 From: alBeLine <2522347980@qq.com> Date: Tue, 17 May 2022 12:44:31 +0800 Subject: [PATCH 03/30] =?UTF-8?q?=E7=AC=AC=E4=BA=8C=E6=AC=A1=E6=B5=8B?= =?UTF-8?q?=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/Test.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/java2022spring/Test.java b/src/java2022spring/Test.java index 24deb29..0627b1b 100644 --- a/src/java2022spring/Test.java +++ b/src/java2022spring/Test.java @@ -2,6 +2,6 @@ package java2022spring; public class Test { public static void main(String[] args) { - System.out.println("Hello world!"); + System.out.println("world!"); } } -- Gitee From ca9c99848fb09a3ec0aef467aadf673c10ef05d2 Mon Sep 17 00:00:00 2001 From: alBeLine <2522347980@qq.com> Date: Tue, 17 May 2022 22:07:47 +0800 Subject: [PATCH 04/30] =?UTF-8?q?=E5=B0=9D=E8=AF=95=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/GameView.java | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 src/java2022spring/GameView.java diff --git a/src/java2022spring/GameView.java b/src/java2022spring/GameView.java new file mode 100644 index 0000000..5f35cdd --- /dev/null +++ b/src/java2022spring/GameView.java @@ -0,0 +1,7 @@ +package java2022spring; + +public class GameView { + public void main(String[] args) { + System.out.println("hello world"); + } +} -- Gitee From 41eb7fac44d50d08d15923b177eca9a2b2dd1f92 Mon Sep 17 00:00:00 2001 From: alBeLine <2522347980@qq.com> Date: Tue, 17 May 2022 22:59:11 +0800 Subject: [PATCH 05/30] =?UTF-8?q?=E5=86=99=E4=BA=86=E9=9C=80=E8=A6=81?= =?UTF-8?q?=E7=94=A8=E7=9A=84=E5=9F=BA=E6=9C=AC=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/Base.java | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/java2022spring/Base.java diff --git a/src/java2022spring/Base.java b/src/java2022spring/Base.java new file mode 100644 index 0000000..4812810 --- /dev/null +++ b/src/java2022spring/Base.java @@ -0,0 +1,22 @@ +package java2022spring; +import java.awt.*; + +public class Base { + // 窗口大小 + int viewWidth = 410; + int viewHeight = 530; + // 文字样式 + Font gameName = new Font("微软雅黑", Font.BOLD, 50); + Font score = new Font("微软雅黑", Font.BOLD, 28); + Font intro = new Font("宋体", Font.PLAIN, 20); + // 数字块的尺寸 + int gap = 10; // 间隔 + int arc = 20; // 圆角半径 + int size = 86; + // 随着数字逐渐增大, 需要减小数字的字号 + Font font1 = new Font("宋体", Font.BOLD, 46); + Font font2 = new Font("宋体", Font.BOLD, 40); + Font font3 = new Font("宋体", Font.BOLD, 34); + Font font4 = new Font("宋体", Font.BOLD, 28); + Font font5 = new Font("宋体", Font.BOLD, 22); +} -- Gitee From 85153fe3e283d622f8983f0dd6fbc5ee22f35a1a Mon Sep 17 00:00:00 2001 From: alBeLine <2522347980@qq.com> Date: Tue, 17 May 2022 23:23:38 +0800 Subject: [PATCH 06/30] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=83=A8=E5=88=86?= =?UTF-8?q?=E5=8F=98=E9=87=8F=E5=90=8D=E7=A7=B0,=20=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E4=BA=86=E8=BD=AF=E4=BB=B6=E5=9F=BA=E6=9C=AC=E6=A1=86=E6=9E=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/Base.java | 8 ++--- src/java2022spring/GameView.java | 60 ++++++++++++++++++++++++++++++-- src/java2022spring/Test.java | 2 +- 3 files changed, 62 insertions(+), 8 deletions(-) diff --git a/src/java2022spring/Base.java b/src/java2022spring/Base.java index 4812810..7766dce 100644 --- a/src/java2022spring/Base.java +++ b/src/java2022spring/Base.java @@ -1,14 +1,14 @@ package java2022spring; import java.awt.*; -public class Base { +public interface Base { // 窗口大小 int viewWidth = 410; int viewHeight = 530; // 文字样式 - Font gameName = new Font("微软雅黑", Font.BOLD, 50); - Font score = new Font("微软雅黑", Font.BOLD, 28); - Font intro = new Font("宋体", Font.PLAIN, 20); + Font gameNameFont = new Font("微软雅黑", Font.BOLD, 50); + Font scoreFont = new Font("微软雅黑", Font.BOLD, 28); + Font introFont = new Font("宋体", Font.PLAIN, 20); // 数字块的尺寸 int gap = 10; // 间隔 int arc = 20; // 圆角半径 diff --git a/src/java2022spring/GameView.java b/src/java2022spring/GameView.java index 5f35cdd..1bb7028 100644 --- a/src/java2022spring/GameView.java +++ b/src/java2022spring/GameView.java @@ -1,7 +1,61 @@ package java2022spring; +import javax.swing.*; -public class GameView { - public void main(String[] args) { - System.out.println("hello world"); +import java.awt.Color; +import java.awt.event.KeyListener; + +public class GameView implements Base{ + private int score = 0; + JFrame myWindow; + JLabel title; + JLabel scoreLbl; + JLabel scoreNum; + JLabel introLbl; + GameBoard gameBoard; + + GameView() { + // 初始化软件窗口 + myWindow = new JFrame("2048小游戏"); + myWindow.setSize(viewWidth, viewHeight); + myWindow.setLocationRelativeTo(null); + myWindow.setResizable(false); + myWindow.setLayout(null); + + // 标题 + title = new JLabel("2048", JLabel.CENTER); + title.setFont(gameNameFont); + title.setForeground(Color.BLACK); + title.setBounds(50, 0, 150, 60); + myWindow.add(title); + + // 分数区 + scoreLbl = new JLabel("得 分", JLabel.CENTER); + scoreLbl.setFont(scoreFont); + scoreLbl.setForeground(Color.white); + scoreLbl.setOpaque(true); + scoreLbl.setBackground(Color.gray); + scoreLbl.setBounds(250, 0, 120, 30); + + scoreNum = new JLabel("0", JLabel.CENTER); + scoreNum.setFont(scoreFont); + scoreNum.setForeground(Color.white); + scoreNum.setOpaque(true); + scoreNum.setBackground(Color.gray); + scoreNum.setBounds(250, 30, 120, 30); + myWindow.add(scoreLbl); + myWindow.add(scoreNum); + + // 说明部分 + introLbl = new JLabel("操作: ↑ ↓ ← →, 按esc键重新开始 ", JLabel.CENTER); + introLbl.setFont(introFont); + introLbl.setForeground(Color.DARK_GRAY); + introLbl.setBounds(0, 60, 400, 40); + myWindow.add(introLbl); + + myWindow.setVisible(true); + } + + class GameBoard { + } } diff --git a/src/java2022spring/Test.java b/src/java2022spring/Test.java index 0627b1b..1452a68 100644 --- a/src/java2022spring/Test.java +++ b/src/java2022spring/Test.java @@ -2,6 +2,6 @@ package java2022spring; public class Test { public static void main(String[] args) { - System.out.println("world!"); + new GameView(); } } -- Gitee From 1be3bd10176eb95358130ca00c30559d8a946471 Mon Sep 17 00:00:00 2001 From: alBeLine <2522347980@qq.com> Date: Wed, 25 May 2022 22:24:12 +0800 Subject: [PATCH 07/30] test --- src/java2022spring/Test.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/java2022spring/Test.java b/src/java2022spring/Test.java index 1452a68..8b0d8d5 100644 --- a/src/java2022spring/Test.java +++ b/src/java2022spring/Test.java @@ -3,5 +3,6 @@ package java2022spring; public class Test { public static void main(String[] args) { new GameView(); + System.out.println("hhh"); } } -- Gitee From c6bc159f4e97672c65b0c7826aba15e440dc1235 Mon Sep 17 00:00:00 2001 From: alBeLine <2522347980@qq.com> Date: Fri, 27 May 2022 14:09:34 +0800 Subject: [PATCH 08/30] =?UTF-8?q?=E6=9E=84=E5=BB=BA=E4=BA=86=E8=AE=B0?= =?UTF-8?q?=E4=BA=8B=E6=9C=AC=E5=9F=BA=E6=9C=AC=E6=A1=86=E6=9E=B6,=20?= =?UTF-8?q?=E6=9C=AA=E5=AE=9E=E7=8E=B0=E5=9B=BE=E6=A0=87=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/Base.java | 2 ++ src/java2022spring/MainFrame.java | 53 +++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 src/java2022spring/MainFrame.java diff --git a/src/java2022spring/Base.java b/src/java2022spring/Base.java index 7766dce..5ce3164 100644 --- a/src/java2022spring/Base.java +++ b/src/java2022spring/Base.java @@ -19,4 +19,6 @@ public interface Base { Font font3 = new Font("宋体", Font.BOLD, 34); Font font4 = new Font("宋体", Font.BOLD, 28); Font font5 = new Font("宋体", Font.BOLD, 22); + + String[] menuText = {"文件", "编辑"}; } diff --git a/src/java2022spring/MainFrame.java b/src/java2022spring/MainFrame.java new file mode 100644 index 0000000..437f019 --- /dev/null +++ b/src/java2022spring/MainFrame.java @@ -0,0 +1,53 @@ +package java2022spring; +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.Image; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.io.*; +import javax.swing.*; + + +public class MainFrame extends JFrame implements Base{ + private JTextArea textArea; + private JFileChooser fileChooser = new JFileChooser(); + private String fileName = "无标题"; + + MainFrame() { + setSize(800, 600); + setTitle(fileName + " - 记事本"); + setLocationRelativeTo(null); + // 设置软件的图标 + ImageIcon myIcon = new ImageIcon("notepad.ico"); + setIconImage(myIcon.getImage()); + // 取消默认关闭操作, 在关闭前先判断文件是否需要保存 + setDefaultCloseOperation(0); + addWindowListener(new WindowAdapter() { + @Override + public void windowClosing(WindowEvent e) { + // 先用直接关闭替代 + setDefaultCloseOperation(DISPOSE_ON_CLOSE); + } + }); + // 添加菜单 + addMenu(); + setVisible(true); + } + + private void addMenu() { + JMenuBar menuBar = new JMenuBar(); + + for(String itemText: menuText) { + JMenu menu = new JMenu(itemText); + menuBar.add(menu); + } + + setJMenuBar(menuBar); + } + + public static void main(String[] args) { + new MainFrame(); + } +} -- Gitee From 59c13cdec59aa478938dba6c45700a4b36bb3c05 Mon Sep 17 00:00:00 2001 From: alBeLine <2522347980@qq.com> Date: Fri, 27 May 2022 06:10:43 +0000 Subject: [PATCH 09/30] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=20sr?= =?UTF-8?q?c/java2022spring/GameView.java?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/GameView.java | 61 -------------------------------- 1 file changed, 61 deletions(-) delete mode 100644 src/java2022spring/GameView.java diff --git a/src/java2022spring/GameView.java b/src/java2022spring/GameView.java deleted file mode 100644 index 1bb7028..0000000 --- a/src/java2022spring/GameView.java +++ /dev/null @@ -1,61 +0,0 @@ -package java2022spring; -import javax.swing.*; - -import java.awt.Color; -import java.awt.event.KeyListener; - -public class GameView implements Base{ - private int score = 0; - JFrame myWindow; - JLabel title; - JLabel scoreLbl; - JLabel scoreNum; - JLabel introLbl; - GameBoard gameBoard; - - GameView() { - // 初始化软件窗口 - myWindow = new JFrame("2048小游戏"); - myWindow.setSize(viewWidth, viewHeight); - myWindow.setLocationRelativeTo(null); - myWindow.setResizable(false); - myWindow.setLayout(null); - - // 标题 - title = new JLabel("2048", JLabel.CENTER); - title.setFont(gameNameFont); - title.setForeground(Color.BLACK); - title.setBounds(50, 0, 150, 60); - myWindow.add(title); - - // 分数区 - scoreLbl = new JLabel("得 分", JLabel.CENTER); - scoreLbl.setFont(scoreFont); - scoreLbl.setForeground(Color.white); - scoreLbl.setOpaque(true); - scoreLbl.setBackground(Color.gray); - scoreLbl.setBounds(250, 0, 120, 30); - - scoreNum = new JLabel("0", JLabel.CENTER); - scoreNum.setFont(scoreFont); - scoreNum.setForeground(Color.white); - scoreNum.setOpaque(true); - scoreNum.setBackground(Color.gray); - scoreNum.setBounds(250, 30, 120, 30); - myWindow.add(scoreLbl); - myWindow.add(scoreNum); - - // 说明部分 - introLbl = new JLabel("操作: ↑ ↓ ← →, 按esc键重新开始 ", JLabel.CENTER); - introLbl.setFont(introFont); - introLbl.setForeground(Color.DARK_GRAY); - introLbl.setBounds(0, 60, 400, 40); - myWindow.add(introLbl); - - myWindow.setVisible(true); - } - - class GameBoard { - - } -} -- Gitee From 759a716b26b0f5c117550a62bf4bd7093accf46d Mon Sep 17 00:00:00 2001 From: alBeLine <2522347980@qq.com> Date: Fri, 27 May 2022 06:10:50 +0000 Subject: [PATCH 10/30] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=20sr?= =?UTF-8?q?c/java2022spring/Test.java?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/Test.java | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 src/java2022spring/Test.java diff --git a/src/java2022spring/Test.java b/src/java2022spring/Test.java deleted file mode 100644 index 8b0d8d5..0000000 --- a/src/java2022spring/Test.java +++ /dev/null @@ -1,8 +0,0 @@ -package java2022spring; - -public class Test { - public static void main(String[] args) { - new GameView(); - System.out.println("hhh"); - } -} -- Gitee From 6dc322ad8f30174a2a029e2e896d944777f76779 Mon Sep 17 00:00:00 2001 From: alBeLine <2522347980@qq.com> Date: Fri, 27 May 2022 20:41:15 +0800 Subject: [PATCH 11/30] =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=A4=9A=E4=BD=99?= =?UTF-8?q?=E6=96=87=E4=BB=B6,=20=E5=AE=9E=E7=8E=B0=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=E6=A0=8F=E5=9F=BA=E6=9C=AC=E5=86=85=E5=AE=B9,=20=E5=B9=B6?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=E7=9B=91=E5=90=AC=E4=BA=8B=E4=BB=B6?= =?UTF-8?q?=E6=A1=86=E6=9E=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/Base.java | 24 ----------- src/java2022spring/InitMenu.java | 46 ++++++++++++++++++++ src/java2022spring/MainFrame.java | 24 ++++------- src/java2022spring/MyActionListeners.java | 51 +++++++++++++++++++++++ 4 files changed, 106 insertions(+), 39 deletions(-) delete mode 100644 src/java2022spring/Base.java create mode 100644 src/java2022spring/InitMenu.java create mode 100644 src/java2022spring/MyActionListeners.java diff --git a/src/java2022spring/Base.java b/src/java2022spring/Base.java deleted file mode 100644 index 5ce3164..0000000 --- a/src/java2022spring/Base.java +++ /dev/null @@ -1,24 +0,0 @@ -package java2022spring; -import java.awt.*; - -public interface Base { - // 窗口大小 - int viewWidth = 410; - int viewHeight = 530; - // 文字样式 - Font gameNameFont = new Font("微软雅黑", Font.BOLD, 50); - Font scoreFont = new Font("微软雅黑", Font.BOLD, 28); - Font introFont = new Font("宋体", Font.PLAIN, 20); - // 数字块的尺寸 - int gap = 10; // 间隔 - int arc = 20; // 圆角半径 - int size = 86; - // 随着数字逐渐增大, 需要减小数字的字号 - Font font1 = new Font("宋体", Font.BOLD, 46); - Font font2 = new Font("宋体", Font.BOLD, 40); - Font font3 = new Font("宋体", Font.BOLD, 34); - Font font4 = new Font("宋体", Font.BOLD, 28); - Font font5 = new Font("宋体", Font.BOLD, 22); - - String[] menuText = {"文件", "编辑"}; -} diff --git a/src/java2022spring/InitMenu.java b/src/java2022spring/InitMenu.java new file mode 100644 index 0000000..0f58675 --- /dev/null +++ b/src/java2022spring/InitMenu.java @@ -0,0 +1,46 @@ +package java2022spring; +import javax.swing.JFrame; +import javax.swing.JMenuBar; +import javax.swing.JMenu; +import javax.swing.JMenuItem; + +public class InitMenu { + private JMenuBar menuBar; + public void init(JFrame frame) { + menuBar = new JMenuBar(); + frame.setJMenuBar(menuBar); + + /* 一级菜单区域 */ + JMenu fileMenu = new JMenu("文件"); + JMenu editMenu = new JMenu("编辑"); + menuBar.add(fileMenu); + menuBar.add(editMenu); + + /* 二级菜单项区域 */ + + // 文件区域 + JMenuItem newFileBtn = new JMenuItem("新建"); + JMenuItem newFrameBtn = new JMenuItem("新窗口"); + JMenuItem openFileBtn = new JMenuItem("打开"); + JMenuItem saveFileBtn = new JMenuItem("保存"); + fileMenu.add(newFileBtn); + fileMenu.add(openFileBtn); + fileMenu.add(saveFileBtn); + + // 文件区域按钮监听事件设置 + newFileBtn.addActionListener(new MyActionListeners.NewFileListener()); + newFrameBtn.addActionListener(new MyActionListeners.NewFrameListener()); + openFileBtn.addActionListener(new MyActionListeners.OpenFileListener()); + saveFileBtn.addActionListener(new MyActionListeners.SaveOpenFileListener()); + + // 编辑区域 + JMenuItem copyBtn = new JMenuItem("复制"); + JMenuItem pasteBtn = new JMenuItem("粘贴"); + editMenu.add(copyBtn); + editMenu.add(pasteBtn); + + // 编辑区域按钮监听事件设置 + copyBtn.addActionListener(new MyActionListeners.CopyListener()); + pasteBtn.addActionListener(new MyActionListeners.PasteListener()); + } +} diff --git a/src/java2022spring/MainFrame.java b/src/java2022spring/MainFrame.java index 437f019..c6b30bd 100644 --- a/src/java2022spring/MainFrame.java +++ b/src/java2022spring/MainFrame.java @@ -12,6 +12,7 @@ import javax.swing.*; public class MainFrame extends JFrame implements Base{ private JTextArea textArea; + private JScrollPane scrollPane; private JFileChooser fileChooser = new JFileChooser(); private String fileName = "无标题"; @@ -19,9 +20,6 @@ public class MainFrame extends JFrame implements Base{ setSize(800, 600); setTitle(fileName + " - 记事本"); setLocationRelativeTo(null); - // 设置软件的图标 - ImageIcon myIcon = new ImageIcon("notepad.ico"); - setIconImage(myIcon.getImage()); // 取消默认关闭操作, 在关闭前先判断文件是否需要保存 setDefaultCloseOperation(0); addWindowListener(new WindowAdapter() { @@ -31,22 +29,18 @@ public class MainFrame extends JFrame implements Base{ setDefaultCloseOperation(DISPOSE_ON_CLOSE); } }); + textArea = new JTextArea(); + scrollPane = new JScrollPane( + textArea + ,ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS + ,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER + ); + setContentPane(scrollPane); // 添加菜单 - addMenu(); + new InitMenu().init(this); setVisible(true); } - private void addMenu() { - JMenuBar menuBar = new JMenuBar(); - - for(String itemText: menuText) { - JMenu menu = new JMenu(itemText); - menuBar.add(menu); - } - - setJMenuBar(menuBar); - } - public static void main(String[] args) { new MainFrame(); } diff --git a/src/java2022spring/MyActionListeners.java b/src/java2022spring/MyActionListeners.java new file mode 100644 index 0000000..d534392 --- /dev/null +++ b/src/java2022spring/MyActionListeners.java @@ -0,0 +1,51 @@ +package java2022spring; +import java.awt.event.ActionListener; +import java.awt.event.ActionEvent; + +public class MyActionListeners { + // public static NewFileListener newFileListener= new NewFileListener(); + /* 文件按钮监听实践 */ + // 新建文件 + static class NewFileListener implements ActionListener { + public void actionPerformed(ActionEvent e) { + System.out.println("新建按钮被点击"); + } + } + + // 打开新窗口 + static class NewFrameListener implements ActionListener { + public void actionPerformed(ActionEvent e) { + System.out.println("新窗口按钮被点击!"); + } + } + + // 打开文件 + static class OpenFileListener implements ActionListener { + public void actionPerformed(ActionEvent e) { + System.out.println("打开按钮被点击"); + } + } + + // 保存文件 + static class SaveOpenFileListener implements ActionListener { + public void actionPerformed(ActionEvent e) { + System.out.println("保存按钮被点击 "); + } + } + + + /* 编辑按钮监听事件 */ + // 复制内容 + static class CopyListener implements ActionListener { + public void actionPerformed(ActionEvent e) { + System.out.println("复制按钮被点击"); + } + } + + // 粘贴内容 + static class PasteListener implements ActionListener { + public void actionPerformed(ActionEvent e) { + System.out.println("粘贴按钮被点击"); + } + } +} -- Gitee From 3740f602fd349e19bbe2e4f1d1d866e3f263fdd1 Mon Sep 17 00:00:00 2001 From: alBeLine <2522347980@qq.com> Date: Fri, 27 May 2022 20:59:52 +0800 Subject: [PATCH 12/30] =?UTF-8?q?=E5=B0=86=E4=B8=BB=E7=AA=97=E5=8F=A3?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=BA=E9=9D=99=E6=80=81=E5=86=85=E9=83=A8?= =?UTF-8?q?=E7=B1=BB,=20=E4=BB=A5=E4=BE=BF=E5=9C=A8=E5=8C=85=E5=86=85?= =?UTF-8?q?=E5=BC=95=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/{MainFrame.java => Main.java} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/java2022spring/{MainFrame.java => Main.java} (100%) diff --git a/src/java2022spring/MainFrame.java b/src/java2022spring/Main.java similarity index 100% rename from src/java2022spring/MainFrame.java rename to src/java2022spring/Main.java -- Gitee From 5e6e0dd2fa5873791e4fd6fa96a795170c2af687 Mon Sep 17 00:00:00 2001 From: alBeLine <2522347980@qq.com> Date: Fri, 27 May 2022 22:12:19 +0800 Subject: [PATCH 13/30] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BA=86=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/EditMenu.java | 38 +++++++++++++ src/java2022spring/FileMenu.java | 53 +++++++++++++++++++ .../{Main.java => MainFrame.java} | 12 ++++- 3 files changed, 101 insertions(+), 2 deletions(-) create mode 100644 src/java2022spring/EditMenu.java create mode 100644 src/java2022spring/FileMenu.java rename src/java2022spring/{Main.java => MainFrame.java} (79%) diff --git a/src/java2022spring/EditMenu.java b/src/java2022spring/EditMenu.java new file mode 100644 index 0000000..9d5f7bf --- /dev/null +++ b/src/java2022spring/EditMenu.java @@ -0,0 +1,38 @@ +package java2022spring; +import javax.swing.JFrame; +import javax.swing.JMenu; +import javax.swing.JMenuItem; +import javax.swing.JTextArea; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +public class EditMenu extends JMenu{ + JFrame frame; + JTextArea textArea; + EditMenu(JFrame frame, JTextArea textArea) { + super("编辑"); + this.frame = frame; + this.textArea = textArea; + initEditMenu(); + } + public void initEditMenu() { + JMenuItem copyBtn = new JMenuItem("复制"); + JMenuItem pasteBtn = new JMenuItem("粘贴"); + add(copyBtn); + add(pasteBtn); + + // 复制内容 + copyBtn.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + System.out.println("被按了!"); + } + }); + // 粘贴内容 + pasteBtn.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + System.out.println("被按了!"); + } + }); + } +} diff --git a/src/java2022spring/FileMenu.java b/src/java2022spring/FileMenu.java new file mode 100644 index 0000000..0def4f6 --- /dev/null +++ b/src/java2022spring/FileMenu.java @@ -0,0 +1,53 @@ +package java2022spring; +import javax.swing.JFrame; +import javax.swing.JMenu; +import javax.swing.JMenuItem; +import javax.swing.JTextArea; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +public class FileMenu extends JMenu{ + JFrame frame; + JTextArea textArea; + FileMenu(JFrame frame, JTextArea textArea) { + super("文本"); + this.frame = frame; + this.textArea = textArea; + initFileMenu(); + } + public void initFileMenu() { + JMenuItem newFileBtn = new JMenuItem("新建"); + JMenuItem newFrameBtn = new JMenuItem("新窗口"); + JMenuItem openFileBtn = new JMenuItem("打开"); + JMenuItem saveFileBtn = new JMenuItem("保存"); + add(newFileBtn); + add(newFrameBtn); + add(openFileBtn); + add(saveFileBtn); + + // 新建文件 + newFileBtn.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + System.out.println("被按了!"); + } + }); + // 打开新窗口 + newFrameBtn.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + System.out.println("被按了!"); + } + }); + // 打开文件 + openFileBtn.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + System.out.println("被按了!"); + } + }); + //保存文件 + saveFileBtn.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + System.out.println("被按了!"); + } + }); + } +} diff --git a/src/java2022spring/Main.java b/src/java2022spring/MainFrame.java similarity index 79% rename from src/java2022spring/Main.java rename to src/java2022spring/MainFrame.java index c6b30bd..940c177 100644 --- a/src/java2022spring/Main.java +++ b/src/java2022spring/MainFrame.java @@ -10,7 +10,8 @@ import java.io.*; import javax.swing.*; -public class MainFrame extends JFrame implements Base{ +public class MainFrame extends JFrame{ + private JMenuBar menuBar; private JTextArea textArea; private JScrollPane scrollPane; private JFileChooser fileChooser = new JFileChooser(); @@ -37,7 +38,14 @@ public class MainFrame extends JFrame implements Base{ ); setContentPane(scrollPane); // 添加菜单 - new InitMenu().init(this); + menuBar = new JMenuBar(); + setJMenuBar(menuBar); + + /* 一级菜单区域 */ + JMenu fileMenu = new FileMenu(this, textArea); + JMenu editMenu = new EditMenu(this, textArea); + menuBar.add(fileMenu); + menuBar.add(editMenu); setVisible(true); } -- Gitee From dc91ef55f479be4d91d10a33bac16c0bd57d9328 Mon Sep 17 00:00:00 2001 From: alBeLine <2522347980@qq.com> Date: Fri, 27 May 2022 22:37:01 +0800 Subject: [PATCH 14/30] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BA=86=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/EditMenu.java | 2 +- src/java2022spring/FileMenu.java | 3 ++- src/java2022spring/MainFrame.java | 10 ++++++---- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/java2022spring/EditMenu.java b/src/java2022spring/EditMenu.java index 9d5f7bf..c93a2b7 100644 --- a/src/java2022spring/EditMenu.java +++ b/src/java2022spring/EditMenu.java @@ -25,7 +25,7 @@ public class EditMenu extends JMenu{ // 复制内容 copyBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - System.out.println("被按了!"); + // System.out.println("被按了!"); } }); // 粘贴内容 diff --git a/src/java2022spring/FileMenu.java b/src/java2022spring/FileMenu.java index 0def4f6..177c624 100644 --- a/src/java2022spring/FileMenu.java +++ b/src/java2022spring/FileMenu.java @@ -34,7 +34,8 @@ public class FileMenu extends JMenu{ // 打开新窗口 newFrameBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - System.out.println("被按了!"); + // System.out.println("被按了!"); + new MainFrame(false); } }); // 打开文件 diff --git a/src/java2022spring/MainFrame.java b/src/java2022spring/MainFrame.java index 940c177..62e71c5 100644 --- a/src/java2022spring/MainFrame.java +++ b/src/java2022spring/MainFrame.java @@ -17,10 +17,12 @@ public class MainFrame extends JFrame{ private JFileChooser fileChooser = new JFileChooser(); private String fileName = "无标题"; - MainFrame() { - setSize(800, 600); + MainFrame(boolean isFirst) { + // 创建的新窗口偏移部分位置 + if(isFirst) setBounds(300, 100, 800, 600); + else setBounds(450, 150, 800, 600); setTitle(fileName + " - 记事本"); - setLocationRelativeTo(null); +// setLocationRelativeTo(null); // 取消默认关闭操作, 在关闭前先判断文件是否需要保存 setDefaultCloseOperation(0); addWindowListener(new WindowAdapter() { @@ -50,6 +52,6 @@ public class MainFrame extends JFrame{ } public static void main(String[] args) { - new MainFrame(); + new MainFrame(true); } } -- Gitee From c2dce56910af1b8bdd5e859eda53c225e847c4ea Mon Sep 17 00:00:00 2001 From: alBeLine <2522347980@qq.com> Date: Sat, 28 May 2022 12:39:52 +0800 Subject: [PATCH 15/30] =?UTF-8?q?=E7=BC=96=E5=86=99=E4=BA=86=E6=96=B0?= =?UTF-8?q?=E5=BB=BA=E5=92=8C=E6=89=93=E5=BC=80=E6=96=87=E4=BB=B6=E6=8C=89?= =?UTF-8?q?=E9=92=AE=E7=9A=84=E7=9B=91=E5=90=AC=E5=99=A8=E4=BA=8B=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/FileMenu.java | 104 ++++++++++++++++++++++++++++++- 1 file changed, 101 insertions(+), 3 deletions(-) diff --git a/src/java2022spring/FileMenu.java b/src/java2022spring/FileMenu.java index 177c624..7ff659e 100644 --- a/src/java2022spring/FileMenu.java +++ b/src/java2022spring/FileMenu.java @@ -1,20 +1,91 @@ package java2022spring; +import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuItem; +import javax.swing.JOptionPane; import javax.swing.JTextArea; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; public class FileMenu extends JMenu{ JFrame frame; JTextArea textArea; + JFileChooser fileChooser; + private boolean isHaveInput = false; + private boolean haveSelectedFile = false; + private boolean isSaved = true; FileMenu(JFrame frame, JTextArea textArea) { super("文本"); this.frame = frame; this.textArea = textArea; + fileChooser = new JFileChooser(); initFileMenu(); } + + // 读取文件 + public String readFile() { + File file = fileChooser.getSelectedFile(); + BufferedReader reader = null; + StringBuilder fileString = null; + try { + fileString = new StringBuilder(); + reader = new BufferedReader(new FileReader(file)); + String str; + // 将文件中的文本读取到str中 + while((str = reader.readLine()) != null) { + fileString.append(str); + fileString.append('\n'); // 添加换行符, 保留文件原本格式 + } + } catch (FileNotFoundException e1) { + JOptionPane.showMessageDialog(null, "未找到该文件!"); + return null; + } catch (IOException e1) { + JOptionPane.showMessageDialog(null, "文件读取异常"); + return null; + } finally { + // 关闭字符流 + if (reader != null) + try { + reader.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + return fileString.toString(); + } + + // 弹出是否需要保存消息框 + public boolean needSave() { + int select = JOptionPane.showConfirmDialog(null, "是否保存修改?"); + if (select == JOptionPane.YES_OPTION) { + return true; + } + return false; + } + + // 判断文件是否被保存 + public void checkIfSaved() { + // 选中并更改了文件 + if(haveSelectedFile && !textArea.getText().equals(readFile())) + isSaved = false; + else { + // 未选中文件则判断文本区域是否为空 + isSaved = textArea.getText().equals(""); + } + } + + public void saveFile() { + System.out.println("文件已保存"); + } + public void initFileMenu() { JMenuItem newFileBtn = new JMenuItem("新建"); JMenuItem newFrameBtn = new JMenuItem("新窗口"); @@ -25,10 +96,28 @@ public class FileMenu extends JMenu{ add(openFileBtn); add(saveFileBtn); +// textArea.addKeyListener(new KeyAdapter() { +// @Override +// public void keyTyped(KeyEvent e) { +// isHaveInput = true; +// }}); +// // 新建文件 newFileBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - System.out.println("被按了!"); + checkIfSaved(); + if(!isSaved) { + // 询问是否需要保存文件 +// System.out.println("你需要询问是否保存文件"); + if(needSave()) + saveFile(); + else textArea.setText(""); + } + else { + System.out.println("你可以新建文件"); + textArea.setText(""); + } + // System.out.println("被按了!"); } }); // 打开新窗口 @@ -41,14 +130,23 @@ public class FileMenu extends JMenu{ // 打开文件 openFileBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - System.out.println("被按了!"); +// System.out.println("被按了!"); + int select = fileChooser.showOpenDialog(frame); + if(select == JFileChooser.APPROVE_OPTION) { + haveSelectedFile = true; + frame.setTitle(fileChooser.getSelectedFile().getName() + " - 记事本"); + textArea.setText(readFile()); + textArea.setCaretPosition(0); + System.out.println(textArea.getText()); + } } }); //保存文件 saveFileBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - System.out.println("被按了!"); + saveFile(); } }); } + } -- Gitee From 209702e16d8b7cd55277fa74a0d686c18ff2c1b7 Mon Sep 17 00:00:00 2001 From: alBeLine <2522347980@qq.com> Date: Sat, 28 May 2022 13:09:37 +0800 Subject: [PATCH 16/30] =?UTF-8?q?=E7=BC=96=E5=86=99=E4=BA=86=E6=96=B0?= =?UTF-8?q?=E5=BB=BA=E5=92=8C=E6=89=93=E5=BC=80=E6=96=87=E4=BB=B6=E6=8C=89?= =?UTF-8?q?=E9=92=AE=E7=9A=84=E7=9B=91=E5=90=AC=E5=99=A8=E4=BA=8B=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/FileMenu.java | 10 ++++++---- src/java2022spring/MainFrame.java | 9 +++++---- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/java2022spring/FileMenu.java b/src/java2022spring/FileMenu.java index 7ff659e..87894fe 100644 --- a/src/java2022spring/FileMenu.java +++ b/src/java2022spring/FileMenu.java @@ -16,13 +16,13 @@ import java.io.FileReader; import java.io.IOException; public class FileMenu extends JMenu{ - JFrame frame; + MainFrame frame; JTextArea textArea; JFileChooser fileChooser; private boolean isHaveInput = false; private boolean haveSelectedFile = false; private boolean isSaved = true; - FileMenu(JFrame frame, JTextArea textArea) { + FileMenu(MainFrame frame, JTextArea textArea) { super("文本"); this.frame = frame; this.textArea = textArea; @@ -84,6 +84,9 @@ public class FileMenu extends JMenu{ public void saveFile() { System.out.println("文件已保存"); + if(haveSelectedFile) { + + } } public void initFileMenu() { @@ -108,7 +111,6 @@ public class FileMenu extends JMenu{ checkIfSaved(); if(!isSaved) { // 询问是否需要保存文件 -// System.out.println("你需要询问是否保存文件"); if(needSave()) saveFile(); else textArea.setText(""); @@ -124,7 +126,7 @@ public class FileMenu extends JMenu{ newFrameBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // System.out.println("被按了!"); - new MainFrame(false); + new MainFrame(false, frame.offset); } }); // 打开文件 diff --git a/src/java2022spring/MainFrame.java b/src/java2022spring/MainFrame.java index 62e71c5..d5a0cb5 100644 --- a/src/java2022spring/MainFrame.java +++ b/src/java2022spring/MainFrame.java @@ -11,16 +11,17 @@ import javax.swing.*; public class MainFrame extends JFrame{ + protected int offset = 0; // 新建窗口偏移位置 private JMenuBar menuBar; private JTextArea textArea; private JScrollPane scrollPane; private JFileChooser fileChooser = new JFileChooser(); private String fileName = "无标题"; - MainFrame(boolean isFirst) { + MainFrame(boolean isFirst, int offset) { // 创建的新窗口偏移部分位置 - if(isFirst) setBounds(300, 100, 800, 600); - else setBounds(450, 150, 800, 600); + if(!isFirst) this.offset = offset + 25; + setBounds(300 + this.offset, 100, 800, 600); setTitle(fileName + " - 记事本"); // setLocationRelativeTo(null); // 取消默认关闭操作, 在关闭前先判断文件是否需要保存 @@ -52,6 +53,6 @@ public class MainFrame extends JFrame{ } public static void main(String[] args) { - new MainFrame(true); + new MainFrame(true, 0); } } -- Gitee From f890047925a99d0df1b30848ed09c298e2240dc1 Mon Sep 17 00:00:00 2001 From: alBeLine <2522347980@qq.com> Date: Sat, 28 May 2022 14:00:25 +0800 Subject: [PATCH 17/30] =?UTF-8?q?=E7=BC=96=E5=86=99=E4=BA=86=E6=96=B0?= =?UTF-8?q?=E5=BB=BA=E6=96=87=E4=BB=B6=E5=92=8C=E6=89=93=E5=BC=80=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E7=9B=91=E5=90=AC=E5=99=A8=E4=BA=8B=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/EditMenu.java | 2 +- src/java2022spring/FileMenu.java | 1 + src/java2022spring/InitMenu.java | 46 -------------------- src/java2022spring/MainFrame.java | 2 +- src/java2022spring/MyActionListeners.java | 51 ----------------------- 5 files changed, 3 insertions(+), 99 deletions(-) delete mode 100644 src/java2022spring/InitMenu.java delete mode 100644 src/java2022spring/MyActionListeners.java diff --git a/src/java2022spring/EditMenu.java b/src/java2022spring/EditMenu.java index c93a2b7..a26e7d5 100644 --- a/src/java2022spring/EditMenu.java +++ b/src/java2022spring/EditMenu.java @@ -31,7 +31,7 @@ public class EditMenu extends JMenu{ // 粘贴内容 pasteBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - System.out.println("被按了!"); +// System.out.println("被按了!"); } }); } diff --git a/src/java2022spring/FileMenu.java b/src/java2022spring/FileMenu.java index 87894fe..41b8c02 100644 --- a/src/java2022spring/FileMenu.java +++ b/src/java2022spring/FileMenu.java @@ -119,6 +119,7 @@ public class FileMenu extends JMenu{ System.out.println("你可以新建文件"); textArea.setText(""); } + frame.setTitle("无标题 - 记事本"); // System.out.println("被按了!"); } }); diff --git a/src/java2022spring/InitMenu.java b/src/java2022spring/InitMenu.java deleted file mode 100644 index 0f58675..0000000 --- a/src/java2022spring/InitMenu.java +++ /dev/null @@ -1,46 +0,0 @@ -package java2022spring; -import javax.swing.JFrame; -import javax.swing.JMenuBar; -import javax.swing.JMenu; -import javax.swing.JMenuItem; - -public class InitMenu { - private JMenuBar menuBar; - public void init(JFrame frame) { - menuBar = new JMenuBar(); - frame.setJMenuBar(menuBar); - - /* 一级菜单区域 */ - JMenu fileMenu = new JMenu("文件"); - JMenu editMenu = new JMenu("编辑"); - menuBar.add(fileMenu); - menuBar.add(editMenu); - - /* 二级菜单项区域 */ - - // 文件区域 - JMenuItem newFileBtn = new JMenuItem("新建"); - JMenuItem newFrameBtn = new JMenuItem("新窗口"); - JMenuItem openFileBtn = new JMenuItem("打开"); - JMenuItem saveFileBtn = new JMenuItem("保存"); - fileMenu.add(newFileBtn); - fileMenu.add(openFileBtn); - fileMenu.add(saveFileBtn); - - // 文件区域按钮监听事件设置 - newFileBtn.addActionListener(new MyActionListeners.NewFileListener()); - newFrameBtn.addActionListener(new MyActionListeners.NewFrameListener()); - openFileBtn.addActionListener(new MyActionListeners.OpenFileListener()); - saveFileBtn.addActionListener(new MyActionListeners.SaveOpenFileListener()); - - // 编辑区域 - JMenuItem copyBtn = new JMenuItem("复制"); - JMenuItem pasteBtn = new JMenuItem("粘贴"); - editMenu.add(copyBtn); - editMenu.add(pasteBtn); - - // 编辑区域按钮监听事件设置 - copyBtn.addActionListener(new MyActionListeners.CopyListener()); - pasteBtn.addActionListener(new MyActionListeners.PasteListener()); - } -} diff --git a/src/java2022spring/MainFrame.java b/src/java2022spring/MainFrame.java index d5a0cb5..8342ba9 100644 --- a/src/java2022spring/MainFrame.java +++ b/src/java2022spring/MainFrame.java @@ -23,7 +23,7 @@ public class MainFrame extends JFrame{ if(!isFirst) this.offset = offset + 25; setBounds(300 + this.offset, 100, 800, 600); setTitle(fileName + " - 记事本"); -// setLocationRelativeTo(null); + setLocationRelativeTo(null); // 取消默认关闭操作, 在关闭前先判断文件是否需要保存 setDefaultCloseOperation(0); addWindowListener(new WindowAdapter() { diff --git a/src/java2022spring/MyActionListeners.java b/src/java2022spring/MyActionListeners.java deleted file mode 100644 index d534392..0000000 --- a/src/java2022spring/MyActionListeners.java +++ /dev/null @@ -1,51 +0,0 @@ -package java2022spring; -import java.awt.event.ActionListener; -import java.awt.event.ActionEvent; - -public class MyActionListeners { - // public static NewFileListener newFileListener= new NewFileListener(); - /* 文件按钮监听实践 */ - // 新建文件 - static class NewFileListener implements ActionListener { - public void actionPerformed(ActionEvent e) { - System.out.println("新建按钮被点击"); - } - } - - // 打开新窗口 - static class NewFrameListener implements ActionListener { - public void actionPerformed(ActionEvent e) { - System.out.println("新窗口按钮被点击!"); - } - } - - // 打开文件 - static class OpenFileListener implements ActionListener { - public void actionPerformed(ActionEvent e) { - System.out.println("打开按钮被点击"); - } - } - - // 保存文件 - static class SaveOpenFileListener implements ActionListener { - public void actionPerformed(ActionEvent e) { - System.out.println("保存按钮被点击 "); - } - } - - - /* 编辑按钮监听事件 */ - // 复制内容 - static class CopyListener implements ActionListener { - public void actionPerformed(ActionEvent e) { - System.out.println("复制按钮被点击"); - } - } - - // 粘贴内容 - static class PasteListener implements ActionListener { - public void actionPerformed(ActionEvent e) { - System.out.println("粘贴按钮被点击"); - } - } -} -- Gitee From 513bf26981b09b5d4d80863e7319a3ec2cee7e04 Mon Sep 17 00:00:00 2001 From: alBeLine <2522347980@qq.com> Date: Sat, 28 May 2022 17:34:10 +0800 Subject: [PATCH 18/30] =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=BA=86=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E6=96=87=E4=BB=B6=E5=92=8C=E5=AE=8C=E5=96=84=E4=BA=86?= =?UTF-8?q?=E5=88=A4=E6=96=AD=E6=96=87=E4=BB=B6=E6=98=AF=E5=90=A6=E5=B7=B2?= =?UTF-8?q?=E4=BF=9D=E5=AD=98=E9=80=BB=E8=BE=91,=20=E7=9B=AE=E5=89=8D?= =?UTF-8?q?=E6=9C=AA=E5=87=BA=E7=8E=B0bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/FileMenu.java | 99 +++++++++++++++++++++++-------- src/java2022spring/MainFrame.java | 2 +- 2 files changed, 74 insertions(+), 27 deletions(-) diff --git a/src/java2022spring/FileMenu.java b/src/java2022spring/FileMenu.java index 41b8c02..7b24d8f 100644 --- a/src/java2022spring/FileMenu.java +++ b/src/java2022spring/FileMenu.java @@ -10,12 +10,16 @@ import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; 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; public class FileMenu extends JMenu{ + File file = null; MainFrame frame; JTextArea textArea; JFileChooser fileChooser; @@ -32,7 +36,6 @@ public class FileMenu extends JMenu{ // 读取文件 public String readFile() { - File file = fileChooser.getSelectedFile(); BufferedReader reader = null; StringBuilder fileString = null; try { @@ -52,12 +55,10 @@ public class FileMenu extends JMenu{ return null; } finally { // 关闭字符流 - if (reader != null) - try { + try { + if (reader != null) reader.close(); - } catch (IOException e) { - e.printStackTrace(); - } + } catch (IOException e1) {} } return fileString.toString(); } @@ -72,21 +73,62 @@ public class FileMenu extends JMenu{ } // 判断文件是否被保存 - public void checkIfSaved() { + public boolean checkIfSaved() { // 选中并更改了文件 - if(haveSelectedFile && !textArea.getText().equals(readFile())) - isSaved = false; - else { + if(haveSelectedFile) + return textArea.getText().equals(readFile()); + // 新文件在保存文件后也会获得文件句柄, 如果没有句柄说明没有保存 + else // 未选中文件则判断文本区域是否为空 - isSaved = textArea.getText().equals(""); - } + return textArea.getText().equals(""); } - public void saveFile() { - System.out.println("文件已保存"); + // 保存文件 + public boolean saveFile() { +// System.out.println("文件已保存"); if(haveSelectedFile) { - + BufferedWriter writer = null; + try { + // 如果不存在会直接创建文件 + writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file))); + writer.write(textArea.getText()); + writer.flush(); + isSaved = true; + } catch (FileNotFoundException e) { + JOptionPane.showMessageDialog(frame, "文件保存出错" + e.getMessage()); + } catch (IOException e) { + JOptionPane.showMessageDialog(frame, "文件写入异常" + e.getMessage()); + } finally { + try { + if (writer != null) + writer.close(); + } catch (IOException e1) {} + } } + else { + // 选择是否保存为新文件, 或者覆盖其他文件 + while(true) { + if(fileChooser.showSaveDialog(frame) != JFileChooser.APPROVE_OPTION) + return false; // 如果取消保存则什么也不做 + file = fileChooser.getSelectedFile();// 获取选中的文件 + if(file.exists()) { + // 询问是否覆盖 + int option = JOptionPane.showConfirmDialog( + frame, + "该文件已存在,是否覆盖原文件", + "确认", JOptionPane.YES_NO_OPTION); + if(option == JOptionPane.NO_OPTION) { + // 如果不想覆盖就再做选择 + file = null; + } + else break; + } + else break; + } + haveSelectedFile = true; + saveFile(); + } + return true; } public void initFileMenu() { @@ -99,26 +141,28 @@ public class FileMenu extends JMenu{ add(openFileBtn); add(saveFileBtn); -// textArea.addKeyListener(new KeyAdapter() { -// @Override -// public void keyTyped(KeyEvent e) { -// isHaveInput = true; -// }}); -// + textArea.addKeyListener(new KeyAdapter() { + @Override + public void keyTyped(KeyEvent e) { + if(file != null) + frame.setTitle('*' + file.getName() + " - 记事本"); + }}); + // 新建文件 newFileBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { checkIfSaved(); + // 询问是否需要保存文件 if(!isSaved) { - // 询问是否需要保存文件 if(needSave()) saveFile(); - else textArea.setText(""); } else { System.out.println("你可以新建文件"); - textArea.setText(""); } + // 清空原本文本信息 + file = null; + textArea.setText(""); frame.setTitle("无标题 - 记事本"); // System.out.println("被按了!"); } @@ -137,7 +181,8 @@ public class FileMenu extends JMenu{ int select = fileChooser.showOpenDialog(frame); if(select == JFileChooser.APPROVE_OPTION) { haveSelectedFile = true; - frame.setTitle(fileChooser.getSelectedFile().getName() + " - 记事本"); + file = fileChooser.getSelectedFile(); + frame.setTitle(file.getName() + " - 记事本"); textArea.setText(readFile()); textArea.setCaretPosition(0); System.out.println(textArea.getText()); @@ -147,7 +192,9 @@ public class FileMenu extends JMenu{ //保存文件 saveFileBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - saveFile(); + // 保存文件后去除*号 + if(saveFile()) + frame.setTitle(file.getName() + " - 记事本"); } }); } diff --git a/src/java2022spring/MainFrame.java b/src/java2022spring/MainFrame.java index 8342ba9..9ad197c 100644 --- a/src/java2022spring/MainFrame.java +++ b/src/java2022spring/MainFrame.java @@ -30,7 +30,7 @@ public class MainFrame extends JFrame{ @Override public void windowClosing(WindowEvent e) { // 先用直接关闭替代 - setDefaultCloseOperation(DISPOSE_ON_CLOSE); + setDefaultCloseOperation(EXIT_ON_CLOSE); } }); textArea = new JTextArea(); -- Gitee From 071cb27b0541ff4b949d63afab02e03799b13669 Mon Sep 17 00:00:00 2001 From: alBeLine <2522347980@qq.com> Date: Sat, 28 May 2022 19:57:50 +0800 Subject: [PATCH 19/30] =?UTF-8?q?=E8=BF=9B=E4=B8=80=E6=AD=A5=E5=AE=8C?= =?UTF-8?q?=E5=96=84=E4=BA=86=E8=AE=B0=E4=BA=8B=E6=9C=AC=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E6=A1=86=E6=9E=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/EditMenu.java | 36 ++++++++++++++++++++++++++++++- src/java2022spring/FileMenu.java | 21 +++++++++++++++++- src/java2022spring/MainFrame.java | 28 ++++++++++++++++++++++-- 3 files changed, 81 insertions(+), 4 deletions(-) diff --git a/src/java2022spring/EditMenu.java b/src/java2022spring/EditMenu.java index a26e7d5..09bdf4a 100644 --- a/src/java2022spring/EditMenu.java +++ b/src/java2022spring/EditMenu.java @@ -3,9 +3,11 @@ import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.JTextArea; - import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.FocusAdapter; +import java.awt.event.FocusEvent; +import java.awt.event.KeyAdapter; public class EditMenu extends JMenu{ JFrame frame; @@ -17,15 +19,47 @@ public class EditMenu extends JMenu{ initEditMenu(); } public void initEditMenu() { + JMenuItem cancelBtn = new JMenuItem("撤销"); + JMenuItem cutBtn = new JMenuItem("剪切"); JMenuItem copyBtn = new JMenuItem("复制"); JMenuItem pasteBtn = new JMenuItem("粘贴"); + JMenuItem delBtn = new JMenuItem("删除"); + JMenuItem findBtn = new JMenuItem("查找"); + JMenuItem alterBtn = new JMenuItem("替换"); + JMenuItem turnBtn = new JMenuItem("转到"); + JMenuItem selectAllBtn = new JMenuItem("全选"); + JMenuItem datetimeBtn = new JMenuItem("时间/日期"); + add(cancelBtn); + addSeparator(); + add(cutBtn); add(copyBtn); add(pasteBtn); + add(delBtn); + addSeparator(); + add(findBtn); + add(alterBtn); + add(turnBtn); + addSeparator(); + add(selectAllBtn); + add(datetimeBtn); + + // 只有当文本框获得焦点时可以实现复制, 粘贴操作 (先实现基本操作先, 不着急) +// textArea.addFocusListener(new FocusAdapter() { +// public void focusGained(FocusEvent e) { +// copyBtn.setEnabled(true); +// pasteBtn.setEnabled(true); +// } +// public void focusLost(FocusEvent e) { +// copyBtn.setEnabled(false); +// pasteBtn.setEnabled(false); +// } +// }); // 复制内容 copyBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // System.out.println("被按了!"); + textArea.paste(); } }); // 粘贴内容 diff --git a/src/java2022spring/FileMenu.java b/src/java2022spring/FileMenu.java index 7b24d8f..9afdbbb 100644 --- a/src/java2022spring/FileMenu.java +++ b/src/java2022spring/FileMenu.java @@ -136,10 +136,15 @@ public class FileMenu extends JMenu{ JMenuItem newFrameBtn = new JMenuItem("新窗口"); JMenuItem openFileBtn = new JMenuItem("打开"); JMenuItem saveFileBtn = new JMenuItem("保存"); + JMenuItem saveAsFileBtn = new JMenuItem("另存为"); + JMenuItem exitBtn = new JMenuItem("退出"); add(newFileBtn); add(newFrameBtn); add(openFileBtn); add(saveFileBtn); + add(saveAsFileBtn); + addSeparator(); + add(exitBtn); textArea.addKeyListener(new KeyAdapter() { @Override @@ -189,7 +194,7 @@ public class FileMenu extends JMenu{ } } }); - //保存文件 + // 保存文件 saveFileBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // 保存文件后去除*号 @@ -197,6 +202,20 @@ public class FileMenu extends JMenu{ frame.setTitle(file.getName() + " - 记事本"); } }); + + // 文件另存为 + saveAsFileBtn.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + System.out.println("被按了."); + } + }); + + // 退出窗口 + exitBtn.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + System.out.println("被按了."); + } + }); } } diff --git a/src/java2022spring/MainFrame.java b/src/java2022spring/MainFrame.java index 9ad197c..759a8c8 100644 --- a/src/java2022spring/MainFrame.java +++ b/src/java2022spring/MainFrame.java @@ -12,6 +12,9 @@ import javax.swing.*; public class MainFrame extends JFrame{ protected int offset = 0; // 新建窗口偏移位置 + protected JLabel posLabel; + private JPanel posPane; + private JPanel contentPane; private JMenuBar menuBar; private JTextArea textArea; private JScrollPane scrollPane; @@ -23,6 +26,7 @@ public class MainFrame extends JFrame{ if(!isFirst) this.offset = offset + 25; setBounds(300 + this.offset, 100, 800, 600); setTitle(fileName + " - 记事本"); + setLayout(new BorderLayout()); setLocationRelativeTo(null); // 取消默认关闭操作, 在关闭前先判断文件是否需要保存 setDefaultCloseOperation(0); @@ -33,13 +37,18 @@ public class MainFrame extends JFrame{ setDefaultCloseOperation(EXIT_ON_CLOSE); } }); + contentPane = new JPanel(); + contentPane.setLayout(new BorderLayout()); + setContentPane(contentPane); + // 文本框面板 textArea = new JTextArea(); scrollPane = new JScrollPane( textArea ,ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS - ,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER + ,ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS ); - setContentPane(scrollPane); + contentPane.add(scrollPane, BorderLayout.CENTER); + // 添加菜单 menuBar = new JMenuBar(); setJMenuBar(menuBar); @@ -47,9 +56,24 @@ public class MainFrame extends JFrame{ /* 一级菜单区域 */ JMenu fileMenu = new FileMenu(this, textArea); JMenu editMenu = new EditMenu(this, textArea); + JMenu formMenu = new JMenu("格式"); + JMenu lookMenu = new JMenu("查看"); + JMenu helpMenu = new JMenu("帮助"); menuBar.add(fileMenu); menuBar.add(editMenu); + menuBar.add(formMenu); + menuBar.add(lookMenu); + menuBar.add(helpMenu); + + // 窗口底部面板 + posPane = new JPanel(); + posPane.setLayout(new BorderLayout()); + contentPane.add(posPane, BorderLayout.SOUTH); + posLabel = new JLabel(" 光标位置显示区域 "); + posPane.add(posLabel, BorderLayout.EAST); + setVisible(true); + validate(); } public static void main(String[] args) { -- Gitee From 81120e43cebaec823bb2faf46159b5b098a21cb6 Mon Sep 17 00:00:00 2001 From: alBeLine <2522347980@qq.com> Date: Sat, 28 May 2022 22:57:22 +0800 Subject: [PATCH 20/30] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=E5=BA=94?= =?UTF-8?q?=E7=94=A8=E5=9B=BE=E6=A0=87,=20=E4=BF=AE=E6=94=B9=E4=BA=86?= =?UTF-8?q?=E7=AA=97=E5=8F=A3=E4=BD=8D=E7=BD=AE=E6=98=BE=E7=A4=BA=E5=BC=82?= =?UTF-8?q?=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/images/notepad.png | Bin 0 -> 4108 bytes src/java2022spring/MainFrame.java | 7 +++++-- 2 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 resources/images/notepad.png diff --git a/resources/images/notepad.png b/resources/images/notepad.png new file mode 100644 index 0000000000000000000000000000000000000000..8b00276d75d3f48b03978c050f6f884fcb161a6a GIT binary patch literal 4108 zcmds4`8U-6_kYchvCWvbvcz~Bj3QBKFbFd!GfJ2;*&_<0tXZ;TY}q4`ERnMB%9d=| zLRk`Hi!?;mv4j}Qcl7z`^9Ov-`JV6VoY(W7bI{T<38`b5e8RvpqxUS002M< zcx@t6b{zifY|ORTxFnq^K<-2xO`xO)F$VxV?F4Pyb#Ke17Z2jhjgGhVE*)Ns@;ACgAgGtlB1#Z#ZQGuLm9jucx4YYr(%5fTYWHrTO^;XE%^hA+lQK z;YZj%F9ZT0F$(1_0SJ6P=eU7&;nmz}7@{vUY<15S>?(ZUTi)(bYpk0v`><-JNay1# z7=H;mU~N$$LD3`?zY<>wL7L{VfSrC-@`~hv>9#Bofqvh-E#Y$M!?JrE!F0t z*2m8@*u9od0a=0mphZ?IEQ|hiaN{sHPu8XZF(&nkQqtBbK!sGD#CFFBd>~H{5!r55 z*IgJ(X#Qig^+o7%B{7WqNH(OuL@agds!`Lo-eh+v?%kp+NPPW^BdDRJ?%?)7N3>3* zK8z8`h2l;d@Yp=zm|ss~E%U4PKw@xt=6ctDh)9 zg3#b4smNEjHH}F2c!?wx4!j)Q;VZ#|@2kw-KENWw#A8J&5`8)VXMeL-R4BT_`8{jeKUmmX)B{4~ZtZ~p5Q$Cw2aT58YJ%t%A+ zg40rF<^;{R-86*L%=1X6C;wxkYV&x{oHk00?vXW3zkf9))kOPkI_8pR%#Ms4#H=8X}s5RNdO*`~u{8ymUL%=DR z3Q=-AyZqD=QqhjhUetGP577gmh6ddw5>iH@18Y7Cx?*jv8gJ?+rIQeG<_)v**cakz z?2K3(Bn2QG1y&~@WfOuI)E}RwHw82|9Ry7)zM@Rmat&!N*hoUG=;xLx#Gz1s$?}sA zZ9$#Bbg*$iw5Zs}B#+7Zvnxt*qng}tkC)wfx_-?s5t~PnU_~xi33p>j%mIl*r}eLg zAymH^UE08~yCkIIl7TeCL!*xWqvAPi&VAolhZqaJi%aik<^GI1JuP=ES+M?Ee{^l6`Mg>PGZM{B0i8&kU| zL~p;c-tXPsxDd^AShwxwD9Qv?`xD8`iH#n8w0xrWPKE~A1LJtU(ll5bqt`>eACvH? z?efIMx%k4B8M7#;Wd22K1Ks@q91ukDrUS!$w#_A4TUxW3jO2vJ0~IQ1iuQ4wxvOG8 z+(2KzLcP>?pVIuaHtR`eTT?{#V~Vz`>YX6Ciz;?@du?(nHnJi zlr;;4<V=$l=y7leG0he0U2-*FQng&`uK`M0i=C106t!5dI zBs_UVu7>wa{hE&jbj-P$uSabi;;}$G_MH5Os+2(qZEjO$cB?$+M55g=R||$NN&JMBorW; z`Ha2bp*>o&a73Ha-W_}qw!E;V!Y%8)@2+tF$_{5wnk0jS7Df;FHq(BU?74P;e1%&+ zyf-d1=G(ySMEALC97~ch9ybtQdMeyHffsBK5udD~hBEG9~f8E?8 zf2(>z9eMeq)N2nq1o0}#@{Q_N!gYsX&J3(^_D}NJwyp7Km_8EVua6Yq-{TT?MuSxS z9ys2u`(oE{SB*INihsy*c*nSO)9DiXmQ9a38-^^R>5>qzNm zwyrh>9_g*KAC(-xiLjdoFZ^nn#bB|5P?a(^2s`@}j=7x2LTJiOGWZMMYsk@(nN~29_6UZ7^zh%N~cV3j-C&FykEe%0$V_N@#OQaenh(nm^(K1jMlqEIV z8Li1gMV_GRAixBHD70kTE{u&_Q+OMHxA~^+TctFUSFayRTnY=GNUF$dwLdNy#_|G?=*l zWVKxn9pn3r+i=TNct$#`Xdb)o{bBI9OC?B)3Eu3p6TgfL|CXzPyk{4w%u5kEJh@_y zFn=oN#?Bt-s}FVL2eXktdZNA%`B<6vFQlhx%M9$64zH{cj>)O)FBMw+|N9$Aiu7(0 zWyHCCMWR|pR7m6OZJlsQBRJd=hg$#XcSyuEp7Lpc=^=jR)Ak`#F`~CRK}^J-d`?>>1)PjXM35 zzo#nAX&kFp!!q7| zsHtp!0f|uqE#7|N5))XqsGroAjY^^V%+%Ix8$7?$&+PDwz>W4q)qYiGt7U4@_FK16 z!^*U`Hc_O*vp4cH7Fw zD$94tFiWm%W+DY&lM<9Za@9Gd%c?>6b>3{t%ZmCC5?K5PnbSw*NO*G^vx&86_WX~c z798I1?OwL%eB!n;=!qM3wV?z6XX`^5ay8~%PD-GN6>;0jV*lX7j*ZBcQ(1bHV*i=r zle||kDXs7+<;tAguBM~^BOFGQn)3an;4AcGN=57Jm| zY034oOr=M?IvA6>yykWEhboUv+7!?zkJ_T zfYZywc_>3y=iJIFA`aXtiAiJ2I`NP=G?H3TxG9sl0eW3>f@kj39p+myD!k|&HAi7Z zmVEee0r|RDeaK|E-oN-~)V~Y$D>2WLC*K&tP|)xwmn=?rj;aYHp0(8o!;XKGtZP)A z1-KrEf#VDCCsnWTQfgoj5JB-;{ybF*=|BmlWS#2ognea4Is^t&P^tOXJ)*eqDU(QK ze&qc(Ev+EbJr{VK?fJw4Cqocu<&BK9XoQ?n1hS$YJK9+3eFe$|VH0gaEVx+JTi1Yc1Psipq-JCF0)vD#;jr!4zNyDjoZ%8K z9pL`I!^#OrR%U4)t3cXa;-{1u43aHe%OxBvFG;s}9XQ1uyAI9!;rz&7K<;djU2++V zI0eHNb{aX8AuOs)&R)TwmrF>lQ7a?4we^;Tdmos0`sPyD6$Bje1J0a=2G1YW9UuOM zbM?1{r~_wjI(RHuy}R!}J(zJCe+;g}++(|C6PYTA=^@6vW8e>Vkp? z05$fuqJYAD6OGwrM~B^?Kive*N;+Pb0M~6{s{`Zt{A<2aWMoSYt^0j;tJ^%3q zkh9O_;|M*LtSUq1MA?)4NF3r|*odoTmf{02!F~_)##ztd> z=4I7K@K2>5(DBf30P<~$I$b*NT`(>`_leqFOUH)?M61ZVxn5Q|dLl0?Cm2sf3rhEl z)kHrl(JI?1q?&5pKW&#rqb*gH1A3k Date: Sun, 29 May 2022 10:22:44 +0800 Subject: [PATCH 21/30] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8F=B3=E9=94=AE?= =?UTF-8?q?=E5=BC=B9=E5=87=BA=E8=8F=9C=E5=8D=95=E5=8A=9F=E8=83=BD=E6=A1=86?= =?UTF-8?q?=E6=9E=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/EditMenu.java | 64 +++++++++++++++++++++++++++++++- 1 file changed, 63 insertions(+), 1 deletion(-) diff --git a/src/java2022spring/EditMenu.java b/src/java2022spring/EditMenu.java index 09bdf4a..ba7e9e2 100644 --- a/src/java2022spring/EditMenu.java +++ b/src/java2022spring/EditMenu.java @@ -2,12 +2,16 @@ package java2022spring; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuItem; +import javax.swing.JPopupMenu; import javax.swing.JTextArea; +import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.FocusAdapter; import java.awt.event.FocusEvent; import java.awt.event.KeyAdapter; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; public class EditMenu extends JMenu{ JFrame frame; @@ -55,18 +59,76 @@ public class EditMenu extends JMenu{ // } // }); + // 实现右键弹出菜单 + textArea.addMouseListener(new MouseAdapter() { + public void mouseReleased(MouseEvent e) { + if(e.isMetaDown()) { + showPopupMenu(e.getX(), e.getY()); + } + } + }); + + // 撤销内容 + cancelBtn.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + + } + }); + // 复制内容 copyBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // System.out.println("被按了!"); - textArea.paste(); + textArea.copy(); } }); // 粘贴内容 pasteBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // System.out.println("被按了!"); + textArea.paste(); } }); + // } + public void showPopupMenu(int x, int y) { + JPopupMenu popupMenu = new JPopupMenu(); + + // 菜单项 + JMenuItem undoMenuItem = new JMenuItem("撤销"); + JMenuItem cutMenuItem = new JMenuItem("剪切"); + JMenuItem copyMenuItem = new JMenuItem("复制"); + JMenuItem pasteMenuItem = new JMenuItem("粘贴"); + JMenuItem delMenuItem = new JMenuItem("删除"); + JMenuItem selectAllMenuItem = new JMenuItem("全选"); + + + // 添加 一级菜单 到 弹出菜单 + popupMenu.add(undoMenuItem); + popupMenu.addSeparator(); + popupMenu.add(cutMenuItem); + popupMenu.add(copyMenuItem); + popupMenu.add(pasteMenuItem); + popupMenu.add(delMenuItem); + popupMenu.addSeparator(); // 添加一条分隔符 + popupMenu.add(selectAllMenuItem); + + // 添加菜单项的点击监听器 + copyMenuItem.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + textArea.copy(); + + } + }); + pasteMenuItem.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { +// System.out.println("查找 被点击"); + textArea.paste(); + } + }); + + popupMenu.show(textArea, x, y); + } } -- Gitee From 55937e081a6174c93664668f62aee2e19f1a5347 Mon Sep 17 00:00:00 2001 From: alBeLine <2522347980@qq.com> Date: Sun, 29 May 2022 11:36:06 +0800 Subject: [PATCH 22/30] =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=BA=86=E5=8F=B3?= =?UTF-8?q?=E9=94=AE=E8=8F=9C=E5=8D=95=E7=9A=84=E6=89=80=E6=9C=89=E5=8A=9F?= =?UTF-8?q?=E8=83=BD,=20=E5=B0=9A=E6=9C=AA=E5=AE=9E=E7=8E=B0=E6=9F=A5?= =?UTF-8?q?=E6=89=BE=E6=9B=BF=E6=8D=A2=E9=9D=A2=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/EditMenu.java | 114 +++++++++++++++++++++++++++++-- src/java2022spring/FileMenu.java | 2 +- 2 files changed, 111 insertions(+), 5 deletions(-) diff --git a/src/java2022spring/EditMenu.java b/src/java2022spring/EditMenu.java index ba7e9e2..3db0283 100644 --- a/src/java2022spring/EditMenu.java +++ b/src/java2022spring/EditMenu.java @@ -2,8 +2,11 @@ package java2022spring; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuItem; +import javax.swing.JOptionPane; import javax.swing.JPopupMenu; import javax.swing.JTextArea; +import javax.swing.undo.UndoManager; + import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -12,14 +15,20 @@ import java.awt.event.FocusEvent; import java.awt.event.KeyAdapter; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; +import java.util.Calendar; +import java.util.GregorianCalendar; public class EditMenu extends JMenu{ JFrame frame; JTextArea textArea; + UndoManager undoManager; + GregorianCalendar myCalendar; EditMenu(JFrame frame, JTextArea textArea) { super("编辑"); this.frame = frame; this.textArea = textArea; + undoManager = new UndoManager(); + myCalendar = new GregorianCalendar(); initEditMenu(); } public void initEditMenu() { @@ -59,10 +68,13 @@ public class EditMenu extends JMenu{ // } // }); + // 绑定UndoManager + textArea.getDocument().addUndoableEditListener(undoManager); + // 实现右键弹出菜单 textArea.addMouseListener(new MouseAdapter() { public void mouseReleased(MouseEvent e) { - if(e.isMetaDown()) { + if(e.getButton()==MouseEvent.BUTTON3) { showPopupMenu(e.getX(), e.getY()); } } @@ -71,10 +83,21 @@ public class EditMenu extends JMenu{ // 撤销内容 cancelBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - + if(undoManager.canUndo()) + undoManager.undo(); + else { + JOptionPane.showMessageDialog(frame, "无法进行撤销操作"); + } } }); + // 剪切内容 + cutBtn.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + textArea.cut(); + } + }); + // 复制内容 copyBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { @@ -82,6 +105,7 @@ public class EditMenu extends JMenu{ textArea.copy(); } }); + // 粘贴内容 pasteBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { @@ -89,7 +113,57 @@ public class EditMenu extends JMenu{ textArea.paste(); } }); - // + + // 删除内容 + delBtn.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + String text = textArea.getText().toString(); + // 删除选中的部分 + String beforeText = text.substring(0, textArea.getSelectionStart()); + String afterText = text.substring(textArea.getSelectionEnd(), text.length()); + textArea.setText(beforeText + afterText); + } + }); + + // 查找内容 + findBtn.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + + } + }); + + // 替换内容 + alterBtn.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + + } + }); + + // 转到内容 + turnBtn.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + + } + }); + + // 全选内容 + selectAllBtn.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + textArea.selectAll(); + } + }); + + // 时间/日期显示 + datetimeBtn.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + String datetime = myCalendar.get(Calendar.HOUR_OF_DAY)+":"+ myCalendar.get(Calendar.MINUTE) + + " " + myCalendar.get(Calendar.YEAR)+"/"+(myCalendar.get(Calendar.MONTH)+1) + + "/" + myCalendar.get(Calendar.DAY_OF_MONTH); + String text = textArea.getText(); + int caretPos = textArea.getCaretPosition(); + textArea.setText(text.substring(0, caretPos) + datetime + text.substring(caretPos)); + } + }); } public void showPopupMenu(int x, int y) { JPopupMenu popupMenu = new JPopupMenu(); @@ -114,6 +188,22 @@ public class EditMenu extends JMenu{ popupMenu.add(selectAllMenuItem); // 添加菜单项的点击监听器 + undoMenuItem.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if(undoManager.canUndo()) + undoManager.undo(); + else { + JOptionPane.showMessageDialog(frame, "无法进行撤销操作"); + } + } + }); + cutMenuItem.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + textArea.cut(); + } + }); copyMenuItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { @@ -128,7 +218,23 @@ public class EditMenu extends JMenu{ textArea.paste(); } }); - + delMenuItem.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + String text = textArea.getText().toString(); + // 删除选中的部分 + String beforeText = text.substring(0, textArea.getSelectionStart()); + String afterText = text.substring(textArea.getSelectionEnd(), text.length()); + textArea.setText(beforeText + afterText); + } + }); + selectAllMenuItem.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + textArea.selectAll(); + + } + }); popupMenu.show(textArea, x, y); } } diff --git a/src/java2022spring/FileMenu.java b/src/java2022spring/FileMenu.java index 9afdbbb..1219cb1 100644 --- a/src/java2022spring/FileMenu.java +++ b/src/java2022spring/FileMenu.java @@ -156,7 +156,7 @@ public class FileMenu extends JMenu{ // 新建文件 newFileBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - checkIfSaved(); + isSaved = checkIfSaved(); // 询问是否需要保存文件 if(!isSaved) { if(needSave()) -- Gitee From 487b9829fc57ca8ba5920370624d74d78a47ff59 Mon Sep 17 00:00:00 2001 From: alBeLine <2522347980@qq.com> Date: Sun, 29 May 2022 21:49:39 +0800 Subject: [PATCH 23/30] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E4=BA=86"=E6=9F=A5?= =?UTF-8?q?=E7=9C=8B"=E8=8F=9C=E5=8D=95=E6=A0=8F=E7=9A=84=E5=8A=9F?= =?UTF-8?q?=E8=83=BD,=20=E5=8F=8A=E5=BA=95=E9=83=A8=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E8=A1=8C=E5=88=97=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/MainFrame.java | 63 +++++++++++++++++++++++++- src/java2022spring/formatMenu.java | 71 ++++++++++++++++++++++++++++++ 2 files changed, 132 insertions(+), 2 deletions(-) create mode 100644 src/java2022spring/formatMenu.java diff --git a/src/java2022spring/MainFrame.java b/src/java2022spring/MainFrame.java index 6c5a4ca..5d4299f 100644 --- a/src/java2022spring/MainFrame.java +++ b/src/java2022spring/MainFrame.java @@ -1,6 +1,7 @@ package java2022spring; import java.awt.BorderLayout; import java.awt.Dimension; +import java.awt.Font; import java.awt.Image; import java.awt.Toolkit; import java.awt.event.ActionEvent; @@ -9,11 +10,15 @@ import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.*; import javax.swing.*; +import javax.swing.event.CaretEvent; +import javax.swing.event.CaretListener; public class MainFrame extends JFrame{ protected int offset = 0; // 新建窗口偏移位置 protected JLabel posLabel; + protected String posText; + protected int fontSize = 14; private JPanel posPane; private JPanel contentPane; private JMenuBar menuBar; @@ -59,7 +64,7 @@ public class MainFrame extends JFrame{ /* 一级菜单区域 */ JMenu fileMenu = new FileMenu(this, textArea); JMenu editMenu = new EditMenu(this, textArea); - JMenu formMenu = new JMenu("格式"); + JMenu formMenu = new formatMenu(this, textArea, scrollPane); JMenu lookMenu = new JMenu("查看"); JMenu helpMenu = new JMenu("帮助"); menuBar.add(fileMenu); @@ -68,13 +73,67 @@ public class MainFrame extends JFrame{ menuBar.add(lookMenu); menuBar.add(helpMenu); + // "查看"菜单内容 + JMenu changeSizeBtn = new JMenu("缩放"); + JCheckBox statusBarBtn = new JCheckBox("状态栏"); + statusBarBtn.setSelected(true); + lookMenu.add(changeSizeBtn); + lookMenu.add(statusBarBtn); + + statusBarBtn.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + if(statusBarBtn.isSelected()) + posPane.setVisible(true); + else posPane.setVisible(false); + } + }); + + JMenuItem largeBtn = new JMenuItem("放大"); + JMenuItem smallBtn = new JMenuItem("缩小"); + JMenuItem defaultBtn = new JMenuItem("恢复默认缩放"); + changeSizeBtn.add(largeBtn); + changeSizeBtn.add(smallBtn); + changeSizeBtn.add(defaultBtn); + + largeBtn.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + textArea.setFont(new Font("华文中宋", Font.PLAIN, fontSize += 2)); + } + }); + + smallBtn.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + textArea.setFont(new Font("华文中宋", Font.PLAIN, fontSize -= 2)); + } + }); + + defaultBtn.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + textArea.setFont(new Font("华文中宋", Font.PLAIN, fontSize = 16)); + } + }); + // 窗口底部面板 posPane = new JPanel(); posPane.setLayout(new BorderLayout()); contentPane.add(posPane, BorderLayout.SOUTH); - posLabel = new JLabel("光标位置显示区域 "); + posText = "第 1 行, 第 1 列 "; + posLabel = new JLabel(posText); posPane.add(posLabel, BorderLayout.EAST); + textArea.addCaretListener(new CaretListener() { //记录行数和列数 + public void caretUpdate(CaretEvent e) { + try { + int caretPos = textArea.getCaretPosition(); + int row = textArea.getLineOfOffset(caretPos); + int col = caretPos - textArea.getLineStartOffset(row); + row += 1; + col += 1; + posLabel.setText("第 " + row + " 行, " + "第 " + col + " 列 "); + } + catch(Exception ex) { } + }}); + setVisible(true); validate(); } diff --git a/src/java2022spring/formatMenu.java b/src/java2022spring/formatMenu.java new file mode 100644 index 0000000..8e0f91a --- /dev/null +++ b/src/java2022spring/formatMenu.java @@ -0,0 +1,71 @@ +package java2022spring; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import javax.swing.JCheckBox; +import javax.swing.JFrame; +import javax.swing.JInternalFrame; +import javax.swing.JLabel; +import javax.swing.JMenu; +import javax.swing.JMenuItem; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTextArea; +import javax.swing.ScrollPaneConstants; + +public class formatMenu extends JMenu{ + JTextArea textArea; + JFrame frame; + JScrollPane scrollPane; + + formatMenu(JFrame frame, JTextArea textArea, JScrollPane scrollPane) { + super("格式"); + this.textArea = textArea; + this.frame = frame; + this.scrollPane = scrollPane; + initFormatMenu(); + } + + public void initFormatMenu() { + JCheckBox autoNextBtn = new JCheckBox("自动换行"); + JMenuItem fontBtn = new JMenuItem("字体"); + + add(autoNextBtn); + add(fontBtn); + + // 自动换行事件 + autoNextBtn.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + if(autoNextBtn.isSelected()) { + textArea.setLineWrap(true); + scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); + } + else { + textArea.setLineWrap(false); + scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); + } + } + }); + + // 字体窗口事件 + fontBtn.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + new FontFrame(); + } + }); + } + + + class FontFrame extends JInternalFrame { + FontFrame() { + super("字体", true, true, true, true); + setSize(300, 400); + setLocation(100, 100); + JPanel pane = new JPanel(); + pane.add(new JLabel("哈喽")); + setContentPane(pane); + setVisible(true); + textArea.add(this); + } + } +} -- Gitee From 4adeabaf61306fc9ba9d8b1d7a36c837c5ee9133 Mon Sep 17 00:00:00 2001 From: alBeLine <2522347980@qq.com> Date: Sun, 29 May 2022 22:37:57 +0800 Subject: [PATCH 24/30] =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=BA=86"=E5=8F=A6?= =?UTF-8?q?=E5=AD=98=E4=B8=BA",=20"=E9=80=80=E5=87=BA",=20=E5=8F=8A?= =?UTF-8?q?=E5=B8=AE=E5=8A=A9=E8=8F=9C=E5=8D=95=E7=9A=84=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/FileMenu.java | 64 ++++++++++++++++++++++++++++--- src/java2022spring/MainFrame.java | 16 ++++---- 2 files changed, 68 insertions(+), 12 deletions(-) diff --git a/src/java2022spring/FileMenu.java b/src/java2022spring/FileMenu.java index 1219cb1..59842df 100644 --- a/src/java2022spring/FileMenu.java +++ b/src/java2022spring/FileMenu.java @@ -5,10 +5,14 @@ import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JTextArea; +import javax.swing.KeyStroke; + import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; 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; @@ -23,7 +27,7 @@ public class FileMenu extends JMenu{ MainFrame frame; JTextArea textArea; JFileChooser fileChooser; - private boolean isHaveInput = false; +// private boolean isHaveInput = false; private boolean haveSelectedFile = false; private boolean isSaved = true; FileMenu(MainFrame frame, JTextArea textArea) { @@ -34,6 +38,8 @@ public class FileMenu extends JMenu{ initFileMenu(); } + + // 读取文件 public String readFile() { BufferedReader reader = null; @@ -132,7 +138,9 @@ public class FileMenu extends JMenu{ } public void initFileMenu() { - JMenuItem newFileBtn = new JMenuItem("新建"); + JMenuItem newFileBtn = new JMenuItem("新建(N)", 'N'); + newFileBtn.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_N, + java.awt.event.KeyEvent.CTRL_MASK)); JMenuItem newFrameBtn = new JMenuItem("新窗口"); JMenuItem openFileBtn = new JMenuItem("打开"); JMenuItem saveFileBtn = new JMenuItem("保存"); @@ -146,6 +154,22 @@ public class FileMenu extends JMenu{ addSeparator(); add(exitBtn); + // 添加关闭窗口时的监听器 + frame.addWindowListener(new WindowAdapter() { + @Override + public void windowClosing(WindowEvent e) { + // 先用直接关闭替代 + isSaved = checkIfSaved(); + // 询问是否需要保存文件 + if(!isSaved) { + if(needSave()) + saveFile(); + } + + frame.dispose(); + } + }); + textArea.addKeyListener(new KeyAdapter() { @Override public void keyTyped(KeyEvent e) { @@ -198,22 +222,52 @@ public class FileMenu extends JMenu{ saveFileBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // 保存文件后去除*号 - if(saveFile()) + if(saveFile()) { frame.setTitle(file.getName() + " - 记事本"); + frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE); + } } }); // 文件另存为 saveAsFileBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - System.out.println("被按了."); + while(true) { + if(fileChooser.showSaveDialog(frame) != JFileChooser.APPROVE_OPTION) + return; // 如果取消保存则什么也不做 + file = fileChooser.getSelectedFile();// 获取选中的文件 + if(file.exists()) { + // 询问是否覆盖 + int option = JOptionPane.showConfirmDialog( + frame, + "该文件已存在,是否覆盖原文件", + "确认", JOptionPane.YES_NO_OPTION); + if(option == JOptionPane.NO_OPTION) { + // 如果不想覆盖就再做选择 + file = null; + } + else break; + } + else break; + } + haveSelectedFile = true; + saveFile(); + frame.setTitle(file.getName() + " - 记事本"); + frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE); } }); // 退出窗口 exitBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - System.out.println("被按了."); + isSaved = checkIfSaved(); + // 询问是否需要保存文件 + if(!isSaved) { + if(needSave()) + saveFile(); + } + + frame.dispose(); } }); } diff --git a/src/java2022spring/MainFrame.java b/src/java2022spring/MainFrame.java index 5d4299f..89df137 100644 --- a/src/java2022spring/MainFrame.java +++ b/src/java2022spring/MainFrame.java @@ -38,13 +38,7 @@ public class MainFrame extends JFrame{ setLayout(new BorderLayout()); // 取消默认关闭操作, 在关闭前先判断文件是否需要保存 setDefaultCloseOperation(0); - addWindowListener(new WindowAdapter() { - @Override - public void windowClosing(WindowEvent e) { - // 先用直接关闭替代 - setDefaultCloseOperation(EXIT_ON_CLOSE); - } - }); + contentPane = new JPanel(); contentPane.setLayout(new BorderLayout()); setContentPane(contentPane); @@ -113,6 +107,14 @@ public class MainFrame extends JFrame{ } }); + // 帮助菜单内容 + JMenuItem helpInfo = new JMenuItem("关于帮助"); + JMenuItem sendBack = new JMenuItem("发送反馈"); + JMenuItem notepadInfo = new JMenuItem("关于记事本"); + helpMenu.add(helpInfo); + helpMenu.add(sendBack); + helpMenu.add(notepadInfo); + // 窗口底部面板 posPane = new JPanel(); posPane.setLayout(new BorderLayout()); -- Gitee From 179e9a7d5a849bc47c81337bf81f3a60e48c2cb2 Mon Sep 17 00:00:00 2001 From: alBeLine <2522347980@qq.com> Date: Sun, 29 May 2022 22:49:11 +0800 Subject: [PATCH 25/30] =?UTF-8?q?=E4=B8=BA=E6=89=93=E5=BC=80=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E4=BA=8B=E4=BB=B6=E5=8A=A0=E5=85=A5=E4=BA=86=E6=98=AF?= =?UTF-8?q?=E5=90=A6=E9=9C=80=E8=A6=81=E4=BF=9D=E5=AD=98=E5=8E=9F=E6=9C=AC?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/FileMenu.java | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/src/java2022spring/FileMenu.java b/src/java2022spring/FileMenu.java index 59842df..d9385ec 100644 --- a/src/java2022spring/FileMenu.java +++ b/src/java2022spring/FileMenu.java @@ -186,9 +186,6 @@ public class FileMenu extends JMenu{ if(needSave()) saveFile(); } - else { - System.out.println("你可以新建文件"); - } // 清空原本文本信息 file = null; textArea.setText(""); @@ -206,15 +203,25 @@ public class FileMenu extends JMenu{ // 打开文件 openFileBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { -// System.out.println("被按了!"); - int select = fileChooser.showOpenDialog(frame); - if(select == JFileChooser.APPROVE_OPTION) { - haveSelectedFile = true; - file = fileChooser.getSelectedFile(); - frame.setTitle(file.getName() + " - 记事本"); - textArea.setText(readFile()); - textArea.setCaretPosition(0); - System.out.println(textArea.getText()); + boolean flag = false; + isSaved = checkIfSaved(); + // 询问是否需要保存文件 + if(!isSaved) { + if(needSave()) + saveFile(); + else flag = true; + } + + if(flag || isSaved) { + int select = fileChooser.showOpenDialog(frame); + if(select == JFileChooser.APPROVE_OPTION) { + haveSelectedFile = true; + file = fileChooser.getSelectedFile(); + frame.setTitle(file.getName() + " - 记事本"); + textArea.setText(readFile()); + textArea.setCaretPosition(0); + System.out.println(textArea.getText()); + } } } }); -- Gitee From bf792832671f50be9096c0fab1558cbf95bf5def Mon Sep 17 00:00:00 2001 From: alBeLine <2522347980@qq.com> Date: Mon, 30 May 2022 18:38:56 +0800 Subject: [PATCH 26/30] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E4=BA=86=E5=AD=97?= =?UTF-8?q?=E4=BD=93=E6=A1=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/EditMenu.java | 12 --- src/java2022spring/FileMenu.java | 2 +- src/java2022spring/MainFrame.java | 3 +- src/java2022spring/formatMenu.java | 145 +++++++++++++++++++++++++++-- 4 files changed, 140 insertions(+), 22 deletions(-) diff --git a/src/java2022spring/EditMenu.java b/src/java2022spring/EditMenu.java index 3db0283..ccc3447 100644 --- a/src/java2022spring/EditMenu.java +++ b/src/java2022spring/EditMenu.java @@ -56,18 +56,6 @@ public class EditMenu extends JMenu{ add(selectAllBtn); add(datetimeBtn); - // 只有当文本框获得焦点时可以实现复制, 粘贴操作 (先实现基本操作先, 不着急) -// textArea.addFocusListener(new FocusAdapter() { -// public void focusGained(FocusEvent e) { -// copyBtn.setEnabled(true); -// pasteBtn.setEnabled(true); -// } -// public void focusLost(FocusEvent e) { -// copyBtn.setEnabled(false); -// pasteBtn.setEnabled(false); -// } -// }); - // 绑定UndoManager textArea.getDocument().addUndoableEditListener(undoManager); diff --git a/src/java2022spring/FileMenu.java b/src/java2022spring/FileMenu.java index d9385ec..243a15a 100644 --- a/src/java2022spring/FileMenu.java +++ b/src/java2022spring/FileMenu.java @@ -166,7 +166,7 @@ public class FileMenu extends JMenu{ saveFile(); } - frame.dispose(); + frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE); } }); diff --git a/src/java2022spring/MainFrame.java b/src/java2022spring/MainFrame.java index 89df137..aaee393 100644 --- a/src/java2022spring/MainFrame.java +++ b/src/java2022spring/MainFrame.java @@ -18,7 +18,7 @@ public class MainFrame extends JFrame{ protected int offset = 0; // 新建窗口偏移位置 protected JLabel posLabel; protected String posText; - protected int fontSize = 14; + protected int fontSize = 16; private JPanel posPane; private JPanel contentPane; private JMenuBar menuBar; @@ -44,6 +44,7 @@ public class MainFrame extends JFrame{ setContentPane(contentPane); // 文本框面板 textArea = new JTextArea(); + textArea.setFont(new Font("华文中宋", Font.PLAIN, 16)); scrollPane = new JScrollPane( textArea ,ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS diff --git a/src/java2022spring/formatMenu.java b/src/java2022spring/formatMenu.java index 8e0f91a..e0eba13 100644 --- a/src/java2022spring/formatMenu.java +++ b/src/java2022spring/formatMenu.java @@ -1,17 +1,30 @@ package java2022spring; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; + +import javax.swing.BorderFactory; +import javax.swing.JButton; import javax.swing.JCheckBox; +import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JInternalFrame; import javax.swing.JLabel; +import javax.swing.JList; import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; +import javax.swing.ListModel; import javax.swing.ScrollPaneConstants; +import javax.swing.border.Border; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; public class formatMenu extends JMenu{ JTextArea textArea; @@ -56,16 +69,132 @@ public class formatMenu extends JMenu{ } - class FontFrame extends JInternalFrame { + class FontFrame extends JDialog { + String family = "华文中宋"; + int size = 16; + String[] familyKinds = {"Times New Roman", "Consolas", "等线", "黑体", "华文中宋", "楷体", "隶书", "宋体", "微软雅黑"}; + Integer[] sizeKinds = {8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 36}; + JLabel instance; + FontFrame() { - super("字体", true, true, true, true); - setSize(300, 400); - setLocation(100, 100); - JPanel pane = new JPanel(); - pane.add(new JLabel("哈喽")); - setContentPane(pane); + super(frame, "字体", true); + setSize(280, 340); + setLayout(null); // 设置为绝对布局 + setResizable(false); + setLocationRelativeTo(frame); + + final JList familyList = new JList(); + final JList sizeList = new JList(); + familyList.setListData(familyKinds); + sizeList.setListData(sizeKinds); + // 设置默认选项 + familyList.setSelectedIndex(4); + sizeList.setSelectedIndex(6); + + // 菜单标签 + JPanel headText1 = new JPanel(); + JPanel headText2 = new JPanel(); + JLabel familyLbl = new JLabel("字体(F):"); + JLabel sizeLbl = new JLabel("大小(S):"); + headText1.add(familyLbl); + headText2.add(sizeLbl); + headText1.setBounds(0, 5, 64, 24); + headText2.setBounds(190, 5, 64, 24); + add(headText1); + add(headText2); + + // 滚动菜单 + JScrollPane familyPane = new JScrollPane( + familyList, + ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, + ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); + JScrollPane sizePane = new JScrollPane( + sizeList, + ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, + ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER + ); + familyPane.setBounds(10, 30, 180, 120); + sizePane.setBounds(200, 30, 65, 120); + add(familyPane); + add(sizePane); + + // 选中事件 + familyList.addListSelectionListener(new ListSelectionListener() { + @Override + public void valueChanged(ListSelectionEvent e) { + // 获取目标索引 + int index = familyList.getSelectedIndex(); + // 获取数据的 + ListModel listModel = familyList.getModel(); + + family = listModel.getElementAt(index); + instance.setFont(new Font(family, Font.PLAIN, size)); + + System.out.println(family); + } + }); + + sizeList.addListSelectionListener(new ListSelectionListener() { + @Override + public void valueChanged(ListSelectionEvent e) { + // 获取目标索引 + int index = sizeList.getSelectedIndex(); + // 获取数据的 + ListModel listModel = sizeList.getModel(); + + size = listModel.getElementAt(index); + instance.setFont(new Font(family, Font.PLAIN, size)); + System.out.println(size); + } + }); + + // 示例 + JPanel instancePane = new JPanel(); + JLabel textLbl = new JLabel("示例:"); + JPanel instanceBox = new JPanel(); + instance = new JLabel("AaBbCcDd"); + instance.setFont(new Font("华文中宋", Font.PLAIN, 16)); + + instancePane.setBounds(10, 160, 200, 75); + add(instancePane); + instancePane.setLayout(null); + textLbl.setBounds(0, 0, 200, 24); + instanceBox.setBounds(0, 30, 200, 75-24); + instancePane.add(textLbl); + instancePane.add(instanceBox); + instanceBox.setLayout(new BorderLayout()); + instanceBox.add(instance, BorderLayout.CENTER); + + // 按钮 + JPanel btnPane = new JPanel(); + JButton confirmBtn = new JButton("确定"); + JButton cancelBtn = new JButton("取消"); + confirmBtn.setFont(new Font("华文中宋", Font.PLAIN, 16)); + cancelBtn.setFont(new Font("华文中宋", Font.PLAIN, 16)); + confirmBtn.setPreferredSize(new Dimension(70,20)); + cancelBtn.setPreferredSize(new Dimension(70,20)); + + btnPane.setLayout(new BorderLayout()); + btnPane.add(confirmBtn, BorderLayout.WEST); + btnPane.add(cancelBtn, BorderLayout.EAST); + btnPane.setBounds(40, 260, 180, 30); + add(btnPane); + + // 按钮事件 + confirmBtn.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + textArea.setFont(new Font(family, Font.PLAIN, size)); + } + }); + + cancelBtn.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + dispose(); + } + }); + setVisible(true); - textArea.add(this); + validate(); } } } -- Gitee From 6ef9be5e85051e5f8e0d4e641af04c5b3d5bf9c2 Mon Sep 17 00:00:00 2001 From: alBeLine <2522347980@qq.com> Date: Mon, 30 May 2022 21:04:09 +0800 Subject: [PATCH 27/30] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E4=BA=86=E6=9F=A5?= =?UTF-8?q?=E6=89=BE=E4=B8=8E=E6=9B=BF=E6=8D=A2=E9=9D=A2=E6=9D=BF=E7=9A=84?= =?UTF-8?q?=E6=9E=84=E5=BB=BA,=20"=E8=BD=AC=E5=88=B0"=E7=9B=91=E5=90=AC?= =?UTF-8?q?=E4=BA=8B=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/EditMenu.java | 146 ++++++++++++++++++++++++++--- src/java2022spring/MainFrame.java | 4 +- src/java2022spring/formatMenu.java | 1 + 3 files changed, 135 insertions(+), 16 deletions(-) diff --git a/src/java2022spring/EditMenu.java b/src/java2022spring/EditMenu.java index ccc3447..b904969 100644 --- a/src/java2022spring/EditMenu.java +++ b/src/java2022spring/EditMenu.java @@ -1,13 +1,27 @@ package java2022spring; +import javax.swing.BorderFactory; +import javax.swing.ButtonGroup; +import javax.swing.JButton; +import javax.swing.JCheckBox; +import javax.swing.JDialog; import javax.swing.JFrame; +import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.JOptionPane; +import javax.swing.JPanel; import javax.swing.JPopupMenu; +import javax.swing.JRadioButton; import javax.swing.JTextArea; +import javax.swing.JTextField; import javax.swing.undo.UndoManager; +import java.awt.BorderLayout; import java.awt.Component; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.FocusAdapter; @@ -37,8 +51,7 @@ public class EditMenu extends JMenu{ JMenuItem copyBtn = new JMenuItem("复制"); JMenuItem pasteBtn = new JMenuItem("粘贴"); JMenuItem delBtn = new JMenuItem("删除"); - JMenuItem findBtn = new JMenuItem("查找"); - JMenuItem alterBtn = new JMenuItem("替换"); + JMenuItem findAlterBtn = new JMenuItem("查找/替换"); JMenuItem turnBtn = new JMenuItem("转到"); JMenuItem selectAllBtn = new JMenuItem("全选"); JMenuItem datetimeBtn = new JMenuItem("时间/日期"); @@ -49,8 +62,7 @@ public class EditMenu extends JMenu{ add(pasteBtn); add(delBtn); addSeparator(); - add(findBtn); - add(alterBtn); + add(findAlterBtn); add(turnBtn); addSeparator(); add(selectAllBtn); @@ -114,23 +126,42 @@ public class EditMenu extends JMenu{ }); // 查找内容 - findBtn.addActionListener(new ActionListener() { + findAlterBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - - } - }); - - // 替换内容 - alterBtn.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - + new FindAlterDialog(); } }); // 转到内容 turnBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { + JDialog turnDialog = new JDialog(); + turnDialog.setTitle("转到"); + turnDialog.setSize(400, 80); + turnDialog.setResizable(false); + turnDialog.setLocationRelativeTo(frame); + JLabel textLbl = new JLabel("转到内容:"); + JTextField textField = new JTextField(22); + JButton turnBtn = new JButton("转到"); + turnBtn.setPreferredSize(new Dimension(80, 20)); + + JPanel contentPane = new JPanel(); + turnDialog.setContentPane(contentPane); + + contentPane.add(textLbl); + contentPane.add(textField); + contentPane.add(turnBtn); + + turnDialog.setVisible(true); + + turnBtn.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + System.out.println(textField.getText()); + int newPos = textArea.getText().indexOf(textField.getText()); + textArea.setCaretPosition(newPos); + } + }); } }); @@ -202,7 +233,6 @@ public class EditMenu extends JMenu{ pasteMenuItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { -// System.out.println("查找 被点击"); textArea.paste(); } }); @@ -225,4 +255,92 @@ public class EditMenu extends JMenu{ }); popupMenu.show(textArea, x, y); } + + // 查找, 替换文字对话框 + class FindAlterDialog extends JDialog { + private JLabel inputLbl; + private JTextField inputField; + private JButton findBtn; + private JButton cancelBtn; + private JCheckBox judgeCaseBtn; + private ButtonGroup btnGroup; + private JRadioButton upBtn; + private JRadioButton downBtn; + private JPanel findPanel; + private JLabel alterLabel; + private JTextField alterField; + private JButton alterBtn; + private JButton alterAllBtn; + private JPanel alterPanel; + private JPanel alterBtnPanel; + private JPanel directionPanel; + private JPanel bottomPanel; + + FindAlterDialog() { + super(frame, "查找与替换", true); + setSize(480, 220); + setResizable(false); + setLocationRelativeTo(frame); + Container container = getContentPane(); + container.setLayout(new FlowLayout(FlowLayout.LEFT)); + + inputLbl = new JLabel("查找内容(N): "); + alterLabel = new JLabel("替换其为(P): "); + inputField = new JTextField(22); + alterField = new JTextField(22); + findBtn = new JButton("查找下一个(F)"); + alterBtn = new JButton("替换(R)"); + alterAllBtn = new JButton("全部替换(A)"); + findBtn.setPreferredSize(new Dimension(120, 22)); + alterBtn.setPreferredSize(new Dimension(120, 22)); + alterAllBtn.setPreferredSize(new Dimension(120, 22)); + + btnGroup = new ButtonGroup(); + upBtn = new JRadioButton("向上(U)"); + downBtn = new JRadioButton("向下(D)"); + downBtn.setSelected(true); + btnGroup.add(upBtn); + btnGroup.add(downBtn); + + cancelBtn = new JButton("取消"); + cancelBtn.setPreferredSize(new Dimension(120, 22)); + judgeCaseBtn = new JCheckBox("区分大小写"); + + + findPanel = new JPanel(); + alterPanel = new JPanel(); + bottomPanel = new JPanel(); + + findPanel.add(inputLbl); + findPanel.add(inputField); + findPanel.add(findBtn); + + alterBtnPanel = new JPanel(); + alterBtnPanel.setLayout(new GridLayout(2, 1, 0, 5)); + alterBtnPanel.add(alterBtn); + alterBtnPanel.add(alterAllBtn); + alterBtnPanel.add(cancelBtn); + + alterPanel.add(alterLabel); + alterPanel.add(alterField); + alterPanel.add(alterBtnPanel); + + directionPanel = new JPanel(); + directionPanel.setPreferredSize(new Dimension(170, 60)); + directionPanel.setBorder(BorderFactory.createTitledBorder("方向 ")); + directionPanel.add(upBtn); + directionPanel.add(downBtn); + + bottomPanel.add(judgeCaseBtn); + bottomPanel.add(directionPanel); + bottomPanel.add(cancelBtn); + + container.add(findPanel); + container.add(alterPanel); + container.add(bottomPanel); + + + setVisible(true); + } + } } diff --git a/src/java2022spring/MainFrame.java b/src/java2022spring/MainFrame.java index aaee393..7c51d5a 100644 --- a/src/java2022spring/MainFrame.java +++ b/src/java2022spring/MainFrame.java @@ -18,7 +18,7 @@ public class MainFrame extends JFrame{ protected int offset = 0; // 新建窗口偏移位置 protected JLabel posLabel; protected String posText; - protected int fontSize = 16; + int fontSize = 16; private JPanel posPane; private JPanel contentPane; private JMenuBar menuBar; @@ -98,7 +98,7 @@ public class MainFrame extends JFrame{ smallBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - textArea.setFont(new Font("华文中宋", Font.PLAIN, fontSize -= 2)); + } }); diff --git a/src/java2022spring/formatMenu.java b/src/java2022spring/formatMenu.java index e0eba13..e069d27 100644 --- a/src/java2022spring/formatMenu.java +++ b/src/java2022spring/formatMenu.java @@ -184,6 +184,7 @@ public class formatMenu extends JMenu{ confirmBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { textArea.setFont(new Font(family, Font.PLAIN, size)); + dispose(); } }); -- Gitee From aa593f43656bce37a171931859a2618b66e98ea3 Mon Sep 17 00:00:00 2001 From: alBeLine <2522347980@qq.com> Date: Tue, 31 May 2022 14:25:56 +0800 Subject: [PATCH 28/30] =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=BA=86=E6=9F=A5?= =?UTF-8?q?=E6=89=BE=E4=B8=8E=E6=9B=BF=E6=8D=A2=E6=9D=BF=E5=9D=97,=20?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=E5=BF=AB=E6=8D=B7=E9=94=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/EditMenu.java | 153 ++++++++++++++++++++++++++--- src/java2022spring/FileMenu.java | 26 +++-- src/java2022spring/MainFrame.java | 26 +++-- src/java2022spring/formatMenu.java | 7 +- 4 files changed, 179 insertions(+), 33 deletions(-) diff --git a/src/java2022spring/EditMenu.java b/src/java2022spring/EditMenu.java index b904969..ce4f728 100644 --- a/src/java2022spring/EditMenu.java +++ b/src/java2022spring/EditMenu.java @@ -14,6 +14,7 @@ import javax.swing.JPopupMenu; import javax.swing.JRadioButton; import javax.swing.JTextArea; import javax.swing.JTextField; +import javax.swing.KeyStroke; import javax.swing.undo.UndoManager; import java.awt.BorderLayout; @@ -38,7 +39,7 @@ public class EditMenu extends JMenu{ UndoManager undoManager; GregorianCalendar myCalendar; EditMenu(JFrame frame, JTextArea textArea) { - super("编辑"); + super("编辑(E)"); this.frame = frame; this.textArea = textArea; undoManager = new UndoManager(); @@ -46,15 +47,39 @@ public class EditMenu extends JMenu{ initEditMenu(); } public void initEditMenu() { - JMenuItem cancelBtn = new JMenuItem("撤销"); - JMenuItem cutBtn = new JMenuItem("剪切"); - JMenuItem copyBtn = new JMenuItem("复制"); - JMenuItem pasteBtn = new JMenuItem("粘贴"); - JMenuItem delBtn = new JMenuItem("删除"); - JMenuItem findAlterBtn = new JMenuItem("查找/替换"); - JMenuItem turnBtn = new JMenuItem("转到"); - JMenuItem selectAllBtn = new JMenuItem("全选"); - JMenuItem datetimeBtn = new JMenuItem("时间/日期"); + JMenuItem cancelBtn = new JMenuItem("撤销(U)"); + cancelBtn.setMnemonic(java.awt.event.KeyEvent.VK_U); + cancelBtn.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_Z, + java.awt.event.KeyEvent.CTRL_MASK)); + JMenuItem cutBtn = new JMenuItem("剪切(T)"); + cutBtn.setMnemonic(java.awt.event.KeyEvent.VK_T); + cutBtn.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_X, + java.awt.event.KeyEvent.CTRL_MASK)); + JMenuItem copyBtn = new JMenuItem("复制(C)"); + copyBtn.setMnemonic(java.awt.event.KeyEvent.VK_C); + copyBtn.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_C, + java.awt.event.KeyEvent.CTRL_MASK)); + JMenuItem pasteBtn = new JMenuItem("粘贴(P)"); + pasteBtn.setMnemonic(java.awt.event.KeyEvent.VK_P); + pasteBtn.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_V, + java.awt.event.KeyEvent.CTRL_MASK)); + JMenuItem delBtn = new JMenuItem("删除(L)"); + delBtn.setMnemonic(java.awt.event.KeyEvent.VK_L); + JMenuItem findAlterBtn = new JMenuItem("查找/替换(F)"); + findAlterBtn.setMnemonic(java.awt.event.KeyEvent.VK_F); + findAlterBtn.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F, + java.awt.event.KeyEvent.CTRL_MASK)); + JMenuItem turnBtn = new JMenuItem("转到(G)"); + turnBtn.setMnemonic(java.awt.event.KeyEvent.VK_G); + turnBtn.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_G, + java.awt.event.KeyEvent.CTRL_MASK)); + JMenuItem selectAllBtn = new JMenuItem("全选(A)"); + selectAllBtn.setMnemonic(java.awt.event.KeyEvent.VK_A); + selectAllBtn.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_A, + java.awt.event.KeyEvent.CTRL_MASK)); + JMenuItem datetimeBtn = new JMenuItem("时间/日期(D)"); + delBtn.setMnemonic(java.awt.event.KeyEvent.VK_D); + datetimeBtn.setAccelerator(KeyStroke.getKeyStroke("F5")); add(cancelBtn); addSeparator(); add(cutBtn); @@ -141,7 +166,7 @@ public class EditMenu extends JMenu{ turnDialog.setResizable(false); turnDialog.setLocationRelativeTo(frame); - JLabel textLbl = new JLabel("转到内容:"); + JLabel textLbl = new JLabel("转到行数:"); JTextField textField = new JTextField(22); JButton turnBtn = new JButton("转到"); turnBtn.setPreferredSize(new Dimension(80, 20)); @@ -157,9 +182,25 @@ public class EditMenu extends JMenu{ turnBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - System.out.println(textField.getText()); - int newPos = textArea.getText().indexOf(textField.getText()); - textArea.setCaretPosition(newPos); + int totalLines = textArea.getLineCount(); + int pos = 0; + int[] linePos = new int[totalLines + 1]; + System.out.println(totalLines); + int num = 1; + + while(true) { + pos = textArea.getText().indexOf('\12', pos); + if(pos == -1) break; + linePos[num++] = pos; + pos += 1; + } + + int getLine = Integer.parseInt(textField.getText()); + if(getLine > totalLines) textArea.setCaretPosition(0); + else { + int newPos = linePos[getLine - 1]; + textArea.setCaretPosition(newPos + 1); + } } }); } @@ -277,7 +318,7 @@ public class EditMenu extends JMenu{ private JPanel bottomPanel; FindAlterDialog() { - super(frame, "查找与替换", true); + super(frame, "查找与替换", false); setSize(480, 220); setResizable(false); setLocationRelativeTo(frame); @@ -340,7 +381,89 @@ public class EditMenu extends JMenu{ container.add(bottomPanel); + // 添加事件 + findBtn.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + String textCont = textArea.getText(); + String findText = inputField.getText(); + if(!judgeCaseBtn.isSelected()) { + textCont = textCont.toLowerCase(); + findText = findText.toLowerCase(); + } + int objPos; + int caretPos = textArea.getCaretPosition(); + if(upBtn.isSelected()) { + objPos = textCont.lastIndexOf(findText, caretPos - findText.length() - 1); + } + else { + objPos = textCont.indexOf(findText, caretPos); + } + + if(objPos != -1) { + textArea.setCaretPosition(objPos); + textArea.select(objPos, objPos + findText.length()); + } + else { + JOptionPane.showMessageDialog(null, "抱歉, 未查询到该内容", "确认", JOptionPane.INFORMATION_MESSAGE); + } + } + }); + + alterBtn.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + String alterText = alterField.getText(); + if(textArea.getSelectedText() != null) { + textArea.replaceSelection(alterText); + } + else { + JOptionPane.showMessageDialog(null, "您没有选中任何内容", "确认", JOptionPane.INFORMATION_MESSAGE); + } + } + }); + + alterAllBtn.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + String textCont = textArea.getText(); + String findText = inputField.getText(); + String alterText = alterField.getText(); + + if(judgeCaseBtn.isSelected()) { + textCont = textCont.toLowerCase(); + findText = findText.toLowerCase(); + } + + int objPos = -1; + int count = 0; + + do { + // 更新每一次修改后的文本 + textCont = textArea.getText(); + objPos = textCont.indexOf(findText, objPos + 1); + if (objPos != -1) { + textArea.select(objPos, objPos + findText.length()); + try { + Thread.sleep(1000); + } catch (InterruptedException e1) { + // TODO 自动生成的 catch 块 + e1.printStackTrace(); + } + textArea.replaceSelection(alterText.length() == 0 ? "" : alterText); + count++; + } + }while (objPos != -1); + JOptionPane.showMessageDialog(null, "成功替换" + count + "个匹配内容!", "替换成功", JOptionPane.INFORMATION_MESSAGE); + } + }); + + cancelBtn.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + dispose(); + } + }); + + setVisible(true); + } } } diff --git a/src/java2022spring/FileMenu.java b/src/java2022spring/FileMenu.java index 243a15a..310db0e 100644 --- a/src/java2022spring/FileMenu.java +++ b/src/java2022spring/FileMenu.java @@ -31,7 +31,7 @@ public class FileMenu extends JMenu{ private boolean haveSelectedFile = false; private boolean isSaved = true; FileMenu(MainFrame frame, JTextArea textArea) { - super("文本"); + super("文本(F)"); this.frame = frame; this.textArea = textArea; fileChooser = new JFileChooser(); @@ -139,13 +139,25 @@ public class FileMenu extends JMenu{ public void initFileMenu() { JMenuItem newFileBtn = new JMenuItem("新建(N)", 'N'); + newFileBtn.setMnemonic(java.awt.event.KeyEvent.VK_N); newFileBtn.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_N, java.awt.event.KeyEvent.CTRL_MASK)); - JMenuItem newFrameBtn = new JMenuItem("新窗口"); - JMenuItem openFileBtn = new JMenuItem("打开"); - JMenuItem saveFileBtn = new JMenuItem("保存"); - JMenuItem saveAsFileBtn = new JMenuItem("另存为"); - JMenuItem exitBtn = new JMenuItem("退出"); + JMenuItem newFrameBtn = new JMenuItem("新窗口(W)"); + newFrameBtn.setMnemonic(java.awt.event.KeyEvent.VK_W); + newFrameBtn.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_N, + java.awt.event.KeyEvent.VK_CONTROL)); + JMenuItem openFileBtn = new JMenuItem("打开(O)"); + openFileBtn.setMnemonic(java.awt.event.KeyEvent.VK_O); + openFileBtn.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_O, + java.awt.event.KeyEvent.CTRL_MASK)); + JMenuItem saveFileBtn = new JMenuItem("保存(S)"); + saveFileBtn.setMnemonic(java.awt.event.KeyEvent.VK_S); + saveFileBtn.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, + java.awt.event.KeyEvent.CTRL_MASK)); + JMenuItem saveAsFileBtn = new JMenuItem("另存为(A)"); + saveAsFileBtn.setMnemonic(java.awt.event.KeyEvent.VK_A); + JMenuItem exitBtn = new JMenuItem("退出(X)"); + exitBtn.setMnemonic(java.awt.event.KeyEvent.VK_X); add(newFileBtn); add(newFrameBtn); add(openFileBtn); @@ -274,7 +286,7 @@ public class FileMenu extends JMenu{ saveFile(); } - frame.dispose(); + System.exit(0); } }); } diff --git a/src/java2022spring/MainFrame.java b/src/java2022spring/MainFrame.java index 7c51d5a..54d93e5 100644 --- a/src/java2022spring/MainFrame.java +++ b/src/java2022spring/MainFrame.java @@ -60,8 +60,8 @@ public class MainFrame extends JFrame{ JMenu fileMenu = new FileMenu(this, textArea); JMenu editMenu = new EditMenu(this, textArea); JMenu formMenu = new formatMenu(this, textArea, scrollPane); - JMenu lookMenu = new JMenu("查看"); - JMenu helpMenu = new JMenu("帮助"); + JMenu lookMenu = new JMenu("查看(V)"); + JMenu helpMenu = new JMenu("帮助(H)"); menuBar.add(fileMenu); menuBar.add(editMenu); menuBar.add(formMenu); @@ -69,7 +69,8 @@ public class MainFrame extends JFrame{ menuBar.add(helpMenu); // "查看"菜单内容 - JMenu changeSizeBtn = new JMenu("缩放"); + JMenu changeSizeBtn = new JMenu("缩放(Z)"); + changeSizeBtn.setMnemonic(java.awt.event.KeyEvent.VK_Z); JCheckBox statusBarBtn = new JCheckBox("状态栏"); statusBarBtn.setSelected(true); lookMenu.add(changeSizeBtn); @@ -83,9 +84,17 @@ public class MainFrame extends JFrame{ } }); - JMenuItem largeBtn = new JMenuItem("放大"); - JMenuItem smallBtn = new JMenuItem("缩小"); + JMenuItem largeBtn = new JMenuItem("放大(I)"); + largeBtn.setMnemonic(java.awt.event.KeyEvent.VK_I); + largeBtn.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_PLUS, + java.awt.event.KeyEvent.CTRL_MASK)); + JMenuItem smallBtn = new JMenuItem("缩小(O)"); + smallBtn.setMnemonic(java.awt.event.KeyEvent.VK_O); + smallBtn.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_MINUS, + java.awt.event.KeyEvent.CTRL_MASK)); JMenuItem defaultBtn = new JMenuItem("恢复默认缩放"); + defaultBtn.setAccelerator(KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_0, + java.awt.event.KeyEvent.CTRL_MASK)); changeSizeBtn.add(largeBtn); changeSizeBtn.add(smallBtn); changeSizeBtn.add(defaultBtn); @@ -109,11 +118,12 @@ public class MainFrame extends JFrame{ }); // 帮助菜单内容 - JMenuItem helpInfo = new JMenuItem("关于帮助"); - JMenuItem sendBack = new JMenuItem("发送反馈"); - JMenuItem notepadInfo = new JMenuItem("关于记事本"); + JMenuItem helpInfo = new JMenuItem("关于帮助(H)"); + JMenuItem sendBack = new JMenuItem("发送反馈(F)"); + JMenuItem notepadInfo = new JMenuItem("关于记事本(A)"); helpMenu.add(helpInfo); helpMenu.add(sendBack); + helpMenu.addSeparator(); helpMenu.add(notepadInfo); // 窗口底部面板 diff --git a/src/java2022spring/formatMenu.java b/src/java2022spring/formatMenu.java index e069d27..d9c483e 100644 --- a/src/java2022spring/formatMenu.java +++ b/src/java2022spring/formatMenu.java @@ -32,7 +32,7 @@ public class formatMenu extends JMenu{ JScrollPane scrollPane; formatMenu(JFrame frame, JTextArea textArea, JScrollPane scrollPane) { - super("格式"); + super("格式(O)"); this.textArea = textArea; this.frame = frame; this.scrollPane = scrollPane; @@ -40,8 +40,9 @@ public class formatMenu extends JMenu{ } public void initFormatMenu() { - JCheckBox autoNextBtn = new JCheckBox("自动换行"); - JMenuItem fontBtn = new JMenuItem("字体"); + JCheckBox autoNextBtn = new JCheckBox("自动换行(W)"); + JMenuItem fontBtn = new JMenuItem("字体(F)"); + fontBtn.setMnemonic(java.awt.event.KeyEvent.VK_F); add(autoNextBtn); add(fontBtn); -- Gitee From 36215e511c3a3407b5360b0421afb83e144faea8 Mon Sep 17 00:00:00 2001 From: alBeLine <2522347980@qq.com> Date: Tue, 31 May 2022 14:48:58 +0800 Subject: [PATCH 29/30] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E4=B8=80?= =?UTF-8?q?=E4=B8=AAbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/FileMenu.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/java2022spring/FileMenu.java b/src/java2022spring/FileMenu.java index 310db0e..4bb8843 100644 --- a/src/java2022spring/FileMenu.java +++ b/src/java2022spring/FileMenu.java @@ -131,6 +131,7 @@ public class FileMenu extends JMenu{ } else break; } + // 确认覆盖后获取到当前选择文件句柄, 保存进去 haveSelectedFile = true; saveFile(); } @@ -178,7 +179,7 @@ public class FileMenu extends JMenu{ saveFile(); } - frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE); + System.exit(0); } }); @@ -202,6 +203,7 @@ public class FileMenu extends JMenu{ file = null; textArea.setText(""); frame.setTitle("无标题 - 记事本"); + haveSelectedFile = false; // System.out.println("被按了!"); } }); @@ -241,10 +243,10 @@ public class FileMenu extends JMenu{ saveFileBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // 保存文件后去除*号 - if(saveFile()) { + if(saveFile() && haveSelectedFile) { frame.setTitle(file.getName() + " - 记事本"); - frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE); } + frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE); } }); -- Gitee From efbbc27edf91eeb38ade32e6f8eb6b506f6f40e4 Mon Sep 17 00:00:00 2001 From: alBeLine <2522347980@qq.com> Date: Sat, 4 Jun 2022 16:53:13 +0800 Subject: [PATCH 30/30] =?UTF-8?q?=E5=88=A0=E9=99=A4=E4=BA=86=E4=B8=80?= =?UTF-8?q?=E4=BA=9B=E4=B8=8D=E5=BF=85=E8=A6=81=E4=BB=A3=E7=A0=81,=20?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E5=9F=BA=E6=9C=AC=E5=AE=8C=E5=B7=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/EditMenu.java | 2 -- src/java2022spring/FileMenu.java | 3 --- src/java2022spring/MainFrame.java | 2 +- 3 files changed, 1 insertion(+), 6 deletions(-) diff --git a/src/java2022spring/EditMenu.java b/src/java2022spring/EditMenu.java index ce4f728..7e09bd9 100644 --- a/src/java2022spring/EditMenu.java +++ b/src/java2022spring/EditMenu.java @@ -126,7 +126,6 @@ public class EditMenu extends JMenu{ // 复制内容 copyBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - // System.out.println("被按了!"); textArea.copy(); } }); @@ -134,7 +133,6 @@ public class EditMenu extends JMenu{ // 粘贴内容 pasteBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { -// System.out.println("被按了!"); textArea.paste(); } }); diff --git a/src/java2022spring/FileMenu.java b/src/java2022spring/FileMenu.java index 4bb8843..3f9c80b 100644 --- a/src/java2022spring/FileMenu.java +++ b/src/java2022spring/FileMenu.java @@ -27,7 +27,6 @@ public class FileMenu extends JMenu{ MainFrame frame; JTextArea textArea; JFileChooser fileChooser; -// private boolean isHaveInput = false; private boolean haveSelectedFile = false; private boolean isSaved = true; FileMenu(MainFrame frame, JTextArea textArea) { @@ -91,7 +90,6 @@ public class FileMenu extends JMenu{ // 保存文件 public boolean saveFile() { -// System.out.println("文件已保存"); if(haveSelectedFile) { BufferedWriter writer = null; try { @@ -210,7 +208,6 @@ public class FileMenu extends JMenu{ // 打开新窗口 newFrameBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - // System.out.println("被按了!"); new MainFrame(false, frame.offset); } }); diff --git a/src/java2022spring/MainFrame.java b/src/java2022spring/MainFrame.java index 54d93e5..7510aeb 100644 --- a/src/java2022spring/MainFrame.java +++ b/src/java2022spring/MainFrame.java @@ -107,7 +107,7 @@ public class MainFrame extends JFrame{ smallBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - + textArea.setFont(new Font("华文中宋", Font.PLAIN, fontSize -= 2)); } }); -- Gitee