From 3f0235f312a273368dd5f1f2aa3e0603c5c47b22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E8=8A=B7=E7=91=9C?= <鐟滃効銆侤LAPTOP-0CPPDTN7> Date: Fri, 11 Jun 2021 13:13:19 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=AC=E4=B8=80=E6=AC=A1=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2020spring/About.java | 22 +++ src/java2020spring/Help.java | 23 +++ src/java2020spring/Plzy.java | 342 ++++++++++++++++++++++++++++++++++ 3 files changed, 387 insertions(+) create mode 100644 src/java2020spring/About.java create mode 100644 src/java2020spring/Help.java create mode 100644 src/java2020spring/Plzy.java diff --git a/src/java2020spring/About.java b/src/java2020spring/About.java new file mode 100644 index 0000000..484c471 --- /dev/null +++ b/src/java2020spring/About.java @@ -0,0 +1,22 @@ +package java2020spring; + +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPanel; +public class About extends JFrame{ + public About(){ + super("关于"); //调用父类的构造方法 + this.setSize(280, 100); //设置窗口大小,宽度280,高度100 + this.setLocation(250,300); //设置窗口位置为距离屏幕左边水平方向250,上方垂直方向300 + this.setResizable(false); //设置窗体大小不可改变 + this.setDefaultCloseOperation(DISPOSE_ON_CLOSE); //点击关闭按钮直接退出 + this.setVisible(true); //设置窗体可见 + JPanel panel = new JPanel(); //使用默认的浮动布局 + JLabel label1 = new JLabel("这是一个用Java开发的简易文本编译器。"); + JLabel label2 = new JLabel("202025710215 刘芷瑜"); + + panel.add(label1); + panel.add(label2); + this.add(panel); + } +} \ No newline at end of file diff --git a/src/java2020spring/Help.java b/src/java2020spring/Help.java new file mode 100644 index 0000000..aa4ea9f --- /dev/null +++ b/src/java2020spring/Help.java @@ -0,0 +1,23 @@ +package java2020spring; + +import javax.swing.*; +import java.awt.*; +public class Help extends JFrame{ + public Help(){ + super("帮助"); //调用父类的构造方法 + this.setSize(500, 150); //设置窗口大小,宽度500,高度150 + this.setLocation(250,300); //设置窗口位置为距离屏幕左边水平方向250,上方垂直方向300 + this.setResizable(false); //设置窗体大小不可改变 + this.setDefaultCloseOperation(DISPOSE_ON_CLOSE); //点击关闭按钮是直接退出 + this.setVisible(true); //设置窗体可见 + + Container c = this.getContentPane(); //初始化一个容器 + c.setLayout(new GridLayout(3,0)); //将窗口布局设置为网格式布局,网格的行数和列数分别是3和0 + //创建标签文字 + + JLabel label1 = new JLabel("1、“菜单”中的功能“新建”、“打开”、“保存”、“另存为”、“退出”通过点击对应使用。"); + JLabel label2 = new JLabel("2、“编辑”中的“剪切”“复制”“粘贴”可对应使用快捷键Ctrl + X、Ctrl + C、Ctrl +V。"); + JLabel label3 = new JLabel("3、“格式”里的“自动换行”勾选后到窗口边缘自动换行;不勾选则向后继续写入。"); + c.add(label1);c.add(label2);c.add(label3); //添加标签到容器中 + } +} \ No newline at end of file diff --git a/src/java2020spring/Plzy.java b/src/java2020spring/Plzy.java new file mode 100644 index 0000000..8a656a4 --- /dev/null +++ b/src/java2020spring/Plzy.java @@ -0,0 +1,342 @@ +package java2020spring; + +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.util.Calendar; +import javax.swing.*; +import javax.swing.event.CaretEvent; +import javax.swing.event.CaretListener; +import javax.swing.event.UndoableEditListener; +public class Plzy extends JFrame{ + JCheckBoxMenuItem Item1; + JLabel label1, label2; + JToolBar state; + int row = 1; + int column = 1; + int length = 0; + JTextArea workArea = new JTextArea(); //创建多行文本框 + public Plzy() + { + super("简易文本编辑器"); //调用父类的构造方法 + //创建菜单栏(JMenuBar)对象 + JMenuBar mBar = new JMenuBar(); //在JFrame等容器中设置菜单栏对象 + this.setJMenuBar(mBar); + + //创建菜单 + JMenu mfile = new JMenu("文件"); + JMenu medit = new JMenu("编辑"); + JMenu mform = new JMenu("格式"); + JMenu mview = new JMenu("查看"); + JMenu mhelp = new JMenu("帮助"); + JMenu mcount = new JMenu("统计"); + + //将菜单添加到菜单栏中 + mBar.add(mfile); + mBar.add(medit); + mBar.add(mform); + mBar.add(mview); + mBar.add(mhelp); + mBar.add(mcount); + + + JScrollPane imgScrollPane = new JScrollPane(workArea); //创建一个空视图,组件内容超过视图大小显示水平和垂直滚动条 + add(imgScrollPane,BorderLayout.CENTER); //将当前类的对象实例加到frame的中间位置 + + //定义打开和保存对话框 + FileDialog openDia; + FileDialog saveDia; + //默认模式为 FileDialog.LOAD + openDia = new FileDialog(this,"打开",FileDialog.LOAD); + saveDia = new FileDialog(this,"另存为",FileDialog.SAVE); + + + //新建 + JMenuItem item1_1 = new JMenuItem("新建"); //生成一个对象 + item1_1.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent e){ //一个监听器,点击时就会触发监听函数里面的内容 + workArea.setText(""); //清空文本 + } + }); + + //打开 + JMenuItem item1_2 = new JMenuItem("打开"); + item1_2.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent e){ //一个监听器,点击时就会触发监听函数里面的内容 + openDia.setVisible(true); //打开文件对话框 + String dirPath = openDia.getDirectory(); //获取打开文件路径并保存 + String fileName = openDia.getFile(); //获取文件名称并保存 + if(dirPath == null || fileName == null){ + return ; + } + workArea.setText(""); //清空文本 + File fileO = new File(dirPath,fileName); + try{ + BufferedReader bufr = new BufferedReader(new FileReader(fileO)); //尝试从文件中读取内容 + String line = null; //变量字符串初始化为空 + while((line = bufr.readLine()) != null){ + workArea.append(line + "\r\n"); //显示每行内容 + } + bufr.close(); //关闭文本 + } +catch(IOException er1){ + throw new RuntimeException("文件读取失败!"); + } + } + }); + + //保存 + JMenuItem item1_3 = new JMenuItem("保存"); + item1_3.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent e){ //加一个监听器,点击时就会触发监听函数里面的内容 + File fileS = null; + if(fileS == null){ + saveDia.setVisible(true); //显示保存文件对话框 + String dirPath = saveDia.getDirectory(); //获取保存文件路径并保存到字符串中 + String fileName = saveDia.getFile(); //获取保存文件名称并保存到字符串中 + + if(dirPath == null || fileName == null) //判断路径和文件是否为空 + return; //返回空值 + + fileS = new File(dirPath,fileName); //文件不为空,新建一个路径和名称 + } + try{ + BufferedWriter bufw = new BufferedWriter(new FileWriter(fileS)); //尝试从文件中读取内容 + String text = workArea.getText(); //获取文本内容 + bufw.write(text); //将获取文本内容写入到字符输出流 + bufw.close(); //关闭文件 + }catch(IOException er){ + throw new RuntimeException("文件保存失败!"); + } + } + }); + + //另存为 + JMenuItem item1_4 = new JMenuItem("另存为"); + item1_4.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent e){ //一个监听器,点击时就会触发监听函数里面的内容 + File fileS = null; + if(fileS == null){ + saveDia.setVisible(true); //显示另存为文件对话框 + String dirPath = saveDia.getDirectory(); //获取保存文件路径并保存到字符串中 + String fileName = saveDia.getFile(); //获取保存文件名称并保存到字符串中 + + if(dirPath == null || fileName == null) //判断路径和文件是否为空 + return ; //返回空值 + fileS = new File(dirPath,fileName); //文件不为空,新建一个路径和名称 + } + try{ + BufferedWriter bufw = new BufferedWriter(new FileWriter(fileS)); //尝试从文件中读取内容 + String text = workArea.getText(); //获取文本内容 + bufw.write(text); //将获取文本内容写入到字符输出流 + bufw.close(); //关闭文件 + } +catch(IOException er){ + throw new RuntimeException("文件保存失败!"); + } + } + }); + + //退出 + JMenuItem item1_5 = new JMenuItem("退出"); + item1_5.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent e){ //一个监听器,点击时就会触发监听函数里面的内容 + System.exit(0); + } + }); + + //撤销 + JMenuItem item2_1 = new JMenuItem("撤销"); + item2_1.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent e){ + String t1 = ""; + workArea.setText(t1); + } + }); + + //删除 + JMenuItem item2_2 = new JMenuItem("剪切"); + item2_2.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent e){ + workArea.cut(); + } + }); + + //复制 + JMenuItem item2_3 = new JMenuItem("复制"); + item2_3.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent e){ + workArea.copy(); + } + }); + + //粘贴 + JMenuItem item2_4= new JMenuItem("粘贴"); + item2_4.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent e){ + workArea.paste(); + } + }); + + //删除 + JMenuItem item2_5 = new JMenuItem("删除"); + item2_5.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent e){ + /*删除其实就是用一个空字符串代替你所写的 + String t1 = ""; + workArea.setText(t1); + */ + + } + }); + + //自动换行 + JRadioButtonMenuItem item3_1 = new JRadioButtonMenuItem("自动换行",false); + item3_1.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent e){ //添加一个监听器,点击时就会触发监听函数里面的内容 + Object source = e.getSource(); + if(source == item3_1) + workArea.setLineWrap(true); //自动换行 + else if(source != item3_1) + workArea.setLineWrap(false); + } + }); + + //字体设置 + JMenuItem item3_2=new JMenuItem("字体设置"); + item3_2.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent e){ + /*删除其实就是用一个空字符串代替你所写的 + String t1 = ""; + workArea.setText(t1); + */ + + } + }); + + //状态栏 + JMenuItem item4_1 = new JMenuItem("菜单状态栏"); + item4_1 = new JCheckBoxMenuItem("状态栏"); + //创建状态栏 + item4_1.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + if (Item1.getState()) + state.setVisible(true); + else + state.setVisible(false); + } + }); + state = new JToolBar(); + state.setSize(workArea.getSize().width, 10); + label1 = new JLabel(" 第" + row + " 行,第" + column + " 列"); + state.add(label1); + state.addSeparator(); + label2 = new JLabel(" 共" + length + " 字 "); + state.add(label2); + //创建状态栏计算行列监视器 + workArea.addCaretListener(new CaretListener() { + public void caretUpdate(CaretEvent e) { + JTextArea eArea = (JTextArea) e.getSource(); + try { int position = eArea.getCaretPosition(); + row = eArea.getLineOfOffset(position); + column = position - workArea.getLineStartOffset(row); + row += 1; + label1.setText(" 第" + row + " 行,第" + (column + 1) + " 列"); + length = Plzy.this.workArea.getText().toString().length(); + label2.setText(" 共" + length + " 字 "); + } catch (Exception ex) { + + } + } + }); + + //添加状态栏 + workArea.add(state, BorderLayout.SOUTH); + state.setVisible(false); + state.setFloatable(false); + + //添加时间 + JMenuItem item4_2=new JMenuItem("时间"); + item4_2.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + Calendar cal = Calendar.getInstance(); //与时间相关的Calendar,获取系统的年份 + int y = cal.get(Calendar.YEAR); //获取当前系统的月份 + int m = cal.get(Calendar.MONTH); + int d = cal.get(Calendar.DATE); + int h = cal.get(Calendar.HOUR_OF_DAY); + int mi = cal.get(Calendar.MINUTE); + int s = cal.get(Calendar.SECOND); + String t = "现在时刻是"+y+"年"+m+"月"+d+"日"+h+"时"+mi+"分钟"+s+"秒"; + workArea.setText(t); + } + }); + + //帮助 + JMenuItem item5_1 = new JMenuItem("帮助"); + item5_1.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent event){ //添加一个监听器,点击时就会触发监听函数里面的内容 + new Help(); + } + }); + JMenuItem item5_2 = new JMenuItem("关于"); + item5_2.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent event){ //添加一个监听器,点击时就会触发监听函数里面的内容 + new About (); + } + }); + + //统计 + JMenuItem item6_1 = new JMenuItem("统计"); + item6_1.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent event){ //添加一个监听器,点击时就会触发监听函数里面的内容 + //try代码块,当发生异常时会转到catch代码块中 + String a = workArea.getText(); + int c = 0,h = 0,ll = 0,l = 0,n = 0,o = 0,sum = 0;//定义整型变量,用于统计字符数 + for(int i = 0;i