From 074cddc51e6cc20bf88417aea053e09c083a400e Mon Sep 17 00:00:00 2001 From: LENOVO Date: Fri, 4 Jun 2021 00:01:10 +0800 Subject: [PATCH 1/9] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E8=8F=9C=E5=8D=95?= =?UTF-8?q?=EF=BC=8C=E6=B7=BB=E5=8A=A0=E8=8F=9C=E5=8D=95=E9=A1=B9=EF=BC=8C?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=88=86=E9=9A=94=E6=9D=A1=EF=BC=8C=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E5=BF=AB=E6=8D=B7=E9=94=AE=EF=BC=8C=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E8=AE=B0=E4=BA=8B=E6=9C=AC=E7=9A=84=E5=9F=BA=E6=9C=AC=E5=A4=96?= =?UTF-8?q?=E8=A7=82=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{Test.java => MainClass.java} | 0 src/java2020spring/WindowMenu.java | 128 ++++++++++++++++++ 2 files changed, 128 insertions(+) rename src/java2020spring/{Test.java => MainClass.java} (100%) create mode 100644 src/java2020spring/WindowMenu.java diff --git a/src/java2020spring/Test.java b/src/java2020spring/MainClass.java similarity index 100% rename from src/java2020spring/Test.java rename to src/java2020spring/MainClass.java diff --git a/src/java2020spring/WindowMenu.java b/src/java2020spring/WindowMenu.java new file mode 100644 index 0000000..99882cc --- /dev/null +++ b/src/java2020spring/WindowMenu.java @@ -0,0 +1,128 @@ +package java2020spring; + +import java.awt.FlowLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.InputEvent; + import java.awt.event.KeyEvent; + import javax.swing.*; + public class WindowMenu extends JFrame implements ActionListener{ + JMenuBar menubar; + JMenu menu1,menu2,menu3,menu4,menu5,subMenu; + JMenuItem item1,item2,item3,item4,item5, + item2_1,item2_2,item2_3,item2_4,item2_5, + item2_6,item2_7,item2_8,item2_9,item2_10, + item2_11,item2_12, + item3_1,item3_2, + item4_1,item5_1,item5_2; + // 2_2为cut 2_3为Copy,2_4为Paste + JTextArea showText; + JMenu menu; + //HandleListener handleListener; + //itemCopy,itemCut,itemPaste的监视器 + //ExitListener exitListener; + WindowMenu(){ + init(); + setLayout(new FlowLayout()); + setVisible(true); + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); +} + void init() {//创建第一个菜单 + //setTitle(s); + showText=new JTextArea(15,55); + showText.setLineWrap(true);//文本自动回行 + showText.setWrapStyleWord(true);//文本区以单词为界自动换行 + //上两个功能应该在点击“自动换行”后实现 + //需要在该菜单项中注册监视器 + menubar=new JMenuBar(); + menu1=new JMenu("文件(F)"); + menu2=new JMenu("编辑(E)"); + menu3=new JMenu("格式(O)"); + menu4=new JMenu("查看(V)"); + menu5=new JMenu("帮助(H)"); + subMenu=new JMenu("软件项目"); + item1=new JMenuItem("新建(N) Ctrl+N"); + item2=new JMenuItem("打开(O)... Ctrl+O"); + item3=new JMenuItem("保存(S) Ctrl+S"); + item4=new JMenuItem("另存为(A)... "); + item5=new JMenuItem("退出(X) "); + //menu1的菜单项 + item2_1=new JMenuItem("撤消(U) Ctrl+Z"); + item2_2=new JMenuItem("剪切(T) Ctrl+X"); + item2_3=new JMenuItem("复制(C) Ctrl+C"); + item2_4=new JMenuItem("粘贴(P) Ctrl+V"); + item2_5=new JMenuItem("删除(L) Del"); + item2_6=new JMenuItem("查找(F)... Ctrl+F"); + item2_7=new JMenuItem("查找下一个(N) F3"); + item2_8=new JMenuItem("替换(R)... Ctrl+H"); + item2_9=new JMenuItem("转到(G)... Ctrl+G"); + item2_10=new JMenuItem("全选(A)... Ctrl+A"); + item2_11=new JMenuItem("时间/日期(D)... F5"); + //实现“转到”功能,需要取消“自动换行” + //menu2的菜单项 + item3_1=new JMenuItem("自动换行(W) "); + //自动换行点击后有一个√ + item3_2=new JMenuItem("字体(F)... "); + //menu3的菜单项 + item4_1=new JMenuItem("状态栏(S) "); + //点击可使下方状态菜单条消失 + //menu4的菜单项 + item5_1=new JMenuItem("查看帮助(H) "); + item5_2=new JMenuItem("关于记事本(A) "); + //menu5的菜单项 + item1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_MASK)); + item2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK)); + item3.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK)); + //设置menu1的快捷键 + item2_1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z,InputEvent.CTRL_MASK)); + item2_2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK)); + item2_3.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK)); + item2_4.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,InputEvent.CTRL_MASK)); + item2_5.setAccelerator(KeyStroke.getKeyStroke((char)KeyEvent.VK_DELETE)); + //? + item2_6.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F,InputEvent.CTRL_MASK)); + item2_7.setAccelerator(KeyStroke.getKeyStroke("F3")); + //? + item2_8.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H,InputEvent.CTRL_MASK)); + item2_9.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_G,InputEvent.CTRL_MASK)); + item2_10.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,InputEvent.CTRL_MASK)); + item2_11.setAccelerator(KeyStroke.getKeyStroke("F5")); + //设置menu2的快捷键 + + + menu1.add(item1); + menu1.add(item2); + menu1.add(item3); + menu1.add(item4); + menu1.addSeparator();//增加分隔条 + menu1.add(item5); + //添加menu1的菜单项 + menu2.add(item2_1); + menu2.addSeparator(); + menu2.add(item2_2); + menu2.add(item2_3); + menu2.add(item2_4); + menu2.add(item2_5); + menu2.addSeparator(); + menu2.add(item2_6); + menu2.add(item2_7); + menu2.add(item2_8); + menu2.add(item2_9); + menu2.addSeparator(); + menu2.add(item2_10); + menu2.add(item2_11); + //添加menu2的菜单项 + menu3.add(item3_1); + menu3.add(item3_2); + //添加menu3的菜单项 + menu4.add(item4_1); + //添加menu4的菜单项 + menu5.add(item5_1); + menu5.addSeparator(); + menu5.add(item5_2); + //添加menu5的菜单项 + @Override + public void actionPerformed(ActionEvent e) { + // TODO 自动生成的方法存根 + + }} \ No newline at end of file -- Gitee From 29cf45f1af71db3b380b9699dc06ea9cb659a058 Mon Sep 17 00:00:00 2001 From: LENOVO Date: Sat, 5 Jun 2021 23:06:25 +0800 Subject: [PATCH 2/9] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E7=9A=84=E6=96=B0=E5=BB=BA=E3=80=81=E6=89=93=E5=BC=80=E3=80=81?= =?UTF-8?q?=E4=BF=9D=E5=AD=98=E7=AD=89=E5=8A=9F=E8=83=BD=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2020spring/MainClass.java | 7 +- src/java2020spring/WindowMenu.java | 104 ++++++++++++++++++++++++++--- 2 files changed, 101 insertions(+), 10 deletions(-) diff --git a/src/java2020spring/MainClass.java b/src/java2020spring/MainClass.java index fc09c19..986eaae 100644 --- a/src/java2020spring/MainClass.java +++ b/src/java2020spring/MainClass.java @@ -1,9 +1,12 @@ package java2020spring; -public class Test { + +public class MainClass { public static void main(String[] args) { - System.out.println("Hello world!"); + WindowMenu win=new WindowMenu(); + win.setBounds(100,100,590,500); + win.setTitle("无标题-记事本"); } diff --git a/src/java2020spring/WindowMenu.java b/src/java2020spring/WindowMenu.java index 99882cc..c0d4b26 100644 --- a/src/java2020spring/WindowMenu.java +++ b/src/java2020spring/WindowMenu.java @@ -1,12 +1,25 @@ package java2020spring; + + + import java.awt.FileDialog; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; - import javax.swing.*; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; + +import javax.swing.*; public class WindowMenu extends JFrame implements ActionListener{ + FileDialog fileDlg; + String str,fileName; + int p; + byte byteBuf[]=new byte[1000000]; JMenuBar menubar; JMenu menu1,menu2,menu3,menu4,menu5,subMenu; JMenuItem item1,item2,item3,item4,item5, @@ -15,18 +28,24 @@ import java.awt.event.InputEvent; item2_11,item2_12, item3_1,item3_2, item4_1,item5_1,item5_2; - // 2_2为cut 2_3为Copy,2_4为Paste + //9_9 2_2为cut 2_3为Copy,2_4为Paste JTextArea showText; JMenu menu; - //HandleListener handleListener; - //itemCopy,itemCut,itemPaste的监视器 - //ExitListener exitListener; WindowMenu(){ init(); setLayout(new FlowLayout()); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } + //public WindowMenu() {}; + /*public WindowMenu (String s,int x,int y,int w,int h) { + init(s); + + setLocation(x,y); + setSize(w,h); + //setVisible(true); + //setDefaultCloseOperation(DISPOSE_ON_CLOSE); + }*/ void init() {//创建第一个菜单 //setTitle(s); showText=new JTextArea(15,55); @@ -41,7 +60,7 @@ import java.awt.event.InputEvent; menu4=new JMenu("查看(V)"); menu5=new JMenu("帮助(H)"); subMenu=new JMenu("软件项目"); - item1=new JMenuItem("新建(N) Ctrl+N"); + item1=new JMenuItem("新建(N)"); item2=new JMenuItem("打开(O)... Ctrl+O"); item3=new JMenuItem("保存(S) Ctrl+S"); item4=new JMenuItem("另存为(A)... "); @@ -121,8 +140,77 @@ import java.awt.event.InputEvent; menu5.addSeparator(); menu5.add(item5_2); //添加menu5的菜单项 + /*menu1.add(subMenu);//增加子菜单 + subMenu.add(new JMenuItem("汽车销售系统"));//匿名类 + subMenu.add(new JMenuItem("农场信息系统"));*/ + menubar.add(menu1); + menubar.add(menu2); + menubar.add(menu3); + menubar.add(menu4); + menubar.add(menu5); + setJMenuBar(menubar);//将菜单条放置到窗口中 + item5.addActionListener(this); + //向退出键注册监视器 + item1.addActionListener(this); + //向新建键注册监视器 + item2.addActionListener(this); + item3.addActionListener(this); + item2_2.addActionListener(this); + item2_3.addActionListener(this); + item2_4.addActionListener(this); + item2_5.addActionListener(this); + item2_10.addActionListener(this); + item2_11.addActionListener(this); + + add(new JScrollPane(showText));//JTextArea不自带滚动窗格 + //因此需要把文本区放到一个滚动窗格中 + //滚动窗格只可以添加一个组件 + + } + @Override public void actionPerformed(ActionEvent e) { - // TODO 自动生成的方法存根 + if (e.getSource() == item5) { + System.exit(0); + + }// //实现按下退出键即退出的功能 + + if(e.getSource()==item1)//新建 + showText.setText(""); + if(e.getSource()==item2)//打开 + { + fileDlg=new FileDialog(this,"打开文件"); + fileDlg.show(); + fileName=fileDlg.getFile(); + try {FileInputStream in=new FileInputStream(fileName); + in.read(byteBuf); + in.close(); + str=new String(byteBuf); + showText.setText(str); + setTitle("记事本-"+fileName);} + catch(IOException ioe) { - }} \ No newline at end of file + } + } + if (e.getSource()==item3)//保存 + { + fileDlg=new FileDialog(this,"保存文件",FileDialog.SAVE); + fileDlg.show(); + fileName=fileDlg.getFile(); + str=showText.getText(); + byteBuf=str.getBytes(); + try { + FileOutputStream out=new FileOutputStream(fileName); + out.write(byteBuf); + out.close(); + } + catch(IOException ioe) { + + }} + + }} + + + + + \ No newline at end of file -- Gitee From a42051161ef002d5f82bdbe252384b9c2c8868cb Mon Sep 17 00:00:00 2001 From: LENOVO Date: Sun, 6 Jun 2021 11:12:29 +0800 Subject: [PATCH 3/9] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E4=BA=86=E5=A4=8D?= =?UTF-8?q?=E5=88=B6=E3=80=81=E5=89=AA=E5=88=87=E3=80=81=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E3=80=81=E7=B2=98=E8=B4=B4=E3=80=81=E5=85=A8=E9=80=89=E7=9A=84?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2020spring/WindowMenu.java | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/java2020spring/WindowMenu.java b/src/java2020spring/WindowMenu.java index c0d4b26..28d0ca8 100644 --- a/src/java2020spring/WindowMenu.java +++ b/src/java2020spring/WindowMenu.java @@ -207,6 +207,30 @@ import javax.swing.*; catch(IOException ioe) { }} + if(e.getSource()==item2_3) {//复制 + str=showText.getSelectedText(); + } + if(e.getSource()==item2_2)//剪切 + { + str=showText.getSelectedText(); + showText.replaceRange("", showText.getSelectionStart(), showText.getSelectionEnd()); + } + + if(e.getSource()==item2_4)//粘贴 + { + p=showText.getCaretPosition(); + showText.replaceRange("", showText.getSelectionStart(), showText.getSelectionEnd()); + showText.insert(str, p); + } + + if(e.getSource()==item2_5)//删除 + { + showText.replaceRange("", showText.getSelectionStart(), showText.getSelectionEnd()); + } + if(e.getSource()==item2_10)//全选 + { + showText.selectAll(); + } }} -- Gitee From 0cb1af37125164214c465ea045504dfd7c1890a3 Mon Sep 17 00:00:00 2001 From: LENOVO Date: Mon, 7 Jun 2021 22:39:50 +0800 Subject: [PATCH 4/9] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E4=BA=86=E5=AD=97?= =?UTF-8?q?=E4=BD=93=E5=8A=9F=E8=83=BD=E7=9A=84=E4=B8=80=E9=83=A8=E5=88=86?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2020spring/FontDialog.java | 87 ++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 src/java2020spring/FontDialog.java diff --git a/src/java2020spring/FontDialog.java b/src/java2020spring/FontDialog.java new file mode 100644 index 0000000..3b3e9a4 --- /dev/null +++ b/src/java2020spring/FontDialog.java @@ -0,0 +1,87 @@ +package java2020spring; + +import java.awt.*; + +import java.awt.event.*; + +import javax.swing.*; + +public class FontDialog extends JDialog implements ItemListener,ActionListener{ + FontFamilyNames fontFamilyNames; + int fontSize=38; + String fontName; + JComboBox fontNameList,fontSizeList; + JLabel label; + Font font; + JButton yes,cancel; + static int YES=1,NO=0; + int state=-1; + FontDialog(JFrame f){ + super(f);//? + setTitle("字体设置"); + font =new Font("宋体",Font.PLAIN,12); + fontFamilyNames=new FontFamilyNames(); + setModal(true); + yes=new JButton("Yes"); + cancel=new JButton("cancel"); + yes.addActionListener(this); + cancel.addActionListener(this); + label=new JLabel("AaBbYyZz",JLabel.CENTER); + fontNameList=new JComboBox(); + fontSizeList=new JComboBox(); + String name[]=fontFamilyNames.getFontName(); + fontNameList.addItem("字体"); + for(int k=0;k Date: Tue, 8 Jun 2021 23:22:33 +0800 Subject: [PATCH 5/9] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E5=AD=97=E4=BD=93?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E7=9A=84=E4=B8=80=E9=83=A8=E5=88=86=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2020spring/FontFamilyNames.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 src/java2020spring/FontFamilyNames.java diff --git a/src/java2020spring/FontFamilyNames.java b/src/java2020spring/FontFamilyNames.java new file mode 100644 index 0000000..13d1ba6 --- /dev/null +++ b/src/java2020spring/FontFamilyNames.java @@ -0,0 +1,12 @@ +package java2020spring; +import java.awt.GraphicsEnvironment; + +public class FontFamilyNames { +String allFontNames[]; +public String[]getFontName(){ + GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment(); + allFontNames=ge.getAvailableFontFamilyNames(); + return allFontNames; + +} +} -- Gitee From 0447fcaafb84f6c92d67efdc29e2b872fbab4e01 Mon Sep 17 00:00:00 2001 From: LENOVO Date: Wed, 9 Jun 2021 22:33:05 +0800 Subject: [PATCH 6/9] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E5=AD=97=E4=BD=93?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=8F=8A=E6=96=87=E6=9C=AC=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=9B=9E=E8=A1=8C=E5=8A=9F=E8=83=BD=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2020spring/WindowMenu.java | 100 +++++++++++++++++++++++------ 1 file changed, 82 insertions(+), 18 deletions(-) diff --git a/src/java2020spring/WindowMenu.java b/src/java2020spring/WindowMenu.java index 28d0ca8..de84cb4 100644 --- a/src/java2020spring/WindowMenu.java +++ b/src/java2020spring/WindowMenu.java @@ -3,20 +3,25 @@ package java2020spring; import java.awt.FileDialog; + import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; +import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; +import java.io.BufferedWriter; +import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; +import java.io.FileWriter; import java.io.IOException; - import javax.swing.*; public class WindowMenu extends JFrame implements ActionListener{ FileDialog fileDlg; + File file; String str,fileName; int p; byte byteBuf[]=new byte[1000000]; @@ -28,6 +33,7 @@ import javax.swing.*; item2_11,item2_12, item3_1,item3_2, item4_1,item5_1,item5_2; + //9_9 2_2为cut 2_3为Copy,2_4为Paste JTextArea showText; JMenu menu; @@ -140,14 +146,15 @@ import javax.swing.*; menu5.addSeparator(); menu5.add(item5_2); //添加menu5的菜单项 - /*menu1.add(subMenu);//增加子菜单 - subMenu.add(new JMenuItem("汽车销售系统"));//匿名类 - subMenu.add(new JMenuItem("农场信息系统"));*/ menubar.add(menu1); menubar.add(menu2); menubar.add(menu3); menubar.add(menu4); menubar.add(menu5); + + + + setJMenuBar(menubar);//将菜单条放置到窗口中 item5.addActionListener(this); //向退出键注册监视器 @@ -165,9 +172,8 @@ import javax.swing.*; add(new JScrollPane(showText));//JTextArea不自带滚动窗格 //因此需要把文本区放到一个滚动窗格中 //滚动窗格只可以添加一个组件 - - } - + + } @Override public void actionPerformed(ActionEvent e) { if (e.getSource() == item5) { @@ -177,6 +183,7 @@ import javax.swing.*; if(e.getSource()==item1)//新建 showText.setText(""); + if(e.getSource()==item2)//打开 { fileDlg=new FileDialog(this,"打开文件"); @@ -192,21 +199,46 @@ import javax.swing.*; } } + if (e.getSource()==item3)//保存 + //保存后出现了文件不能打开的问题 { fileDlg=new FileDialog(this,"保存文件",FileDialog.SAVE); - fileDlg.show(); - fileName=fileDlg.getFile(); - str=showText.getText(); - byteBuf=str.getBytes(); - try { - FileOutputStream out=new FileOutputStream(fileName); - out.write(byteBuf); - out.close(); - } - catch(IOException ioe) { + /*fileDlg.show(); + fileName=fileDlg.getFile(); + str=showText.getText(); + byteBuf=str.getBytes(); + try { + FileOutputStream out=new FileOutputStream(fileName); + out.write(byteBuf); + out.close(); + } + catch(IOException ioe) { - }} + }*/ + // savedia=new FileDialog(frame,"保存",FileDialog.SAVE); + this.setVisible(true); + if(file==null){ + fileDlg.setVisible(true); + String dirPath=fileDlg.getDirectory(); + String fileName=fileDlg.getFile(); + if(dirPath==null||fileName==null) + return ; + file=new File(dirPath,fileName); + try{ + BufferedWriter bfwt=new BufferedWriter(new FileWriter(file)); + String t= showText.getText(); + bfwt.write(t); + bfwt.close(); + showText.setText(""); + } + catch (IOException ex){ + throw new RuntimeException(); + }} + } + + + if(e.getSource()==item2_3) {//复制 str=showText.getSelectedText(); } @@ -232,6 +264,38 @@ import javax.swing.*; showText.selectAll(); } + if(e.getSource()==item2_11)//时间/日期 + { + java.text.SimpleDateFormat formatter=new java.text.SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + java.util.Date currentTime=new java.util.Date(); + String datetime=formatter.format(currentTime).toString(); + showText.setText(showText.getText()+datetime); + } + + + if(e.getSource()==item3_1) { + + showText.setLineWrap(true);//文本自动回行 + showText.setWrapStyleWord(true);//文本区以单词为界自动换行 + //上两个功能应该在点击“自动换行”后实现 + //需要在该菜单项中注册监视器 + } + + + if(e.getSource()==item3_2) {//字体 + FontDialog dialog=new FontDialog(this); + dialog.setVisible(true); + if(dialog.getState()==FontDialog.YES) { + showText.setFont(dialog.getFont()); + showText.repaint(); + + } + if(dialog.getState()==FontDialog.NO) { + showText.repaint(); + } + } + + }} -- Gitee From 45f397b2e87b7e3c95eacc4e6b6d5fadee72d471 Mon Sep 17 00:00:00 2001 From: LENOVO Date: Thu, 10 Jun 2021 13:29:20 +0800 Subject: [PATCH 7/9] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E4=BA=86=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E6=89=93=E5=BC=80=E7=9A=84=E5=8A=9F=E8=83=BD=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2020spring/WindowMenu.java | 119 +++++++++++++++++++++++++---- 1 file changed, 106 insertions(+), 13 deletions(-) diff --git a/src/java2020spring/WindowMenu.java b/src/java2020spring/WindowMenu.java index de84cb4..c5659a7 100644 --- a/src/java2020spring/WindowMenu.java +++ b/src/java2020spring/WindowMenu.java @@ -12,10 +12,12 @@ import java.awt.event.InputEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; +import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; +import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import javax.swing.*; @@ -37,6 +39,10 @@ import javax.swing.*; //9_9 2_2为cut 2_3为Copy,2_4为Paste JTextArea showText; JMenu menu; + JLabel statusline; + String oldValue;// 存放编辑区原来的内容,用于比较文本是否有改动 + boolean isNewFile = true;// 是否新文件(未保存过的) + File currentFile;// 当前文件名 WindowMenu(){ init(); setLayout(new FlowLayout()); @@ -185,21 +191,108 @@ import javax.swing.*; showText.setText(""); if(e.getSource()==item2)//打开 - { - fileDlg=new FileDialog(this,"打开文件"); - fileDlg.show(); - fileName=fileDlg.getFile(); - try {FileInputStream in=new FileInputStream(fileName); - in.read(byteBuf); - in.close(); - str=new String(byteBuf); - showText.setText(str); - setTitle("记事本-"+fileName);} - catch(IOException ioe) { - + {showText.requestFocus(); + String currentValue = showText.getText(); + boolean isTextChange = (currentValue.equals(oldValue)) ? false : true; + if (isTextChange) { + int saveChoose = JOptionPane.showConfirmDialog(this, "您的文件尚未保存,是否保存?", "提示", + JOptionPane.YES_NO_CANCEL_OPTION); + if (saveChoose == JOptionPane.YES_OPTION) { + String str = null; + JFileChooser fileChooser = new JFileChooser(); + fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); + // fileChooser.setApproveButtonText("确定"); + fileChooser.setDialogTitle("另存为"); + int result = fileChooser.showSaveDialog(this); + if (result == JFileChooser.CANCEL_OPTION) { + statusline.setText("您没有选择任何文件"); + return; + } + File saveFileName = fileChooser.getSelectedFile(); + if (saveFileName == null || saveFileName.getName().equals("")) { + JOptionPane.showMessageDialog(this, "不合法的文件名", "不合法的文件名", JOptionPane.ERROR_MESSAGE); + } else { + try { + FileWriter fw = new FileWriter(saveFileName); + BufferedWriter bfw = new BufferedWriter(fw); + bfw.write(showText.getText(), 0, showText.getText().length()); + bfw.flush();// 刷新该流的缓冲 + bfw.close(); + isNewFile = false; + currentFile = saveFileName; + oldValue = showText.getText(); + this.setTitle(saveFileName.getName() + " - 记事本"); + statusline.setText("当前打开文件:" + saveFileName.getAbsoluteFile()); + } catch (IOException ioException) { + } + } + } else if (saveChoose == JOptionPane.NO_OPTION) { + String str = null; + JFileChooser fileChooser = new JFileChooser(); + fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); + // fileChooser.setApproveButtonText("确定"); + fileChooser.setDialogTitle("打开文件"); + int result = fileChooser.showOpenDialog(this); + if (result == JFileChooser.CANCEL_OPTION) { + statusline.setText("您没有选择任何文件"); + return; + } + File fileName = fileChooser.getSelectedFile(); + if (fileName == null || fileName.getName().equals("")) { + JOptionPane.showMessageDialog(this, "不合法的文件名", "不合法的文件名", JOptionPane.ERROR_MESSAGE); + } else { + try { + FileReader fr = new FileReader(fileName); + BufferedReader bfr = new BufferedReader(fr); + showText.setText(""); + while ((str = bfr.readLine()) != null) { + showText.append(str); + } + this.setTitle(fileName.getName() + " - 记事本"); + statusline.setText(" 当前打开文件:" + fileName.getAbsoluteFile()); + fr.close(); + isNewFile = false; + currentFile = fileName; + oldValue = showText.getText(); + } catch (IOException ioException) { + } + } + } else { + return; + } + } else { + String str = null; + JFileChooser fileChooser = new JFileChooser(); + fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); + // fileChooser.setApproveButtonText("确定"); + fileChooser.setDialogTitle("打开文件"); + int result = fileChooser.showOpenDialog(this); + if (result == JFileChooser.CANCEL_OPTION) { + statusline.setText(" 您没有选择任何文件 "); + return; + } + File fileName = fileChooser.getSelectedFile(); + if (fileName == null || fileName.getName().equals("")) { + JOptionPane.showMessageDialog(this, "不合法的文件名", "不合法的文件名", JOptionPane.ERROR_MESSAGE); + } else { + try { + FileReader fr = new FileReader(fileName); + BufferedReader bfr = new BufferedReader(fr); + showText.setText(""); + while ((str = bfr.readLine()) != null) { + showText.append(str); + } + this.setTitle(fileName.getName() + " - 记事本"); + statusline.setText(" 当前打开文件:" + fileName.getAbsoluteFile()); + fr.close(); + isNewFile = false; + currentFile = fileName; + oldValue = showText.getText(); + } catch (IOException ioException) { + } + } } } - if (e.getSource()==item3)//保存 //保存后出现了文件不能打开的问题 { -- Gitee From fc9779d3e065854e628adca789bef7e2b73a379c Mon Sep 17 00:00:00 2001 From: LENOVO Date: Fri, 11 Jun 2021 12:34:24 +0800 Subject: [PATCH 8/9] =?UTF-8?q?=E5=9F=BA=E6=9C=AC=E5=AE=8C=E5=96=84?= =?UTF-8?q?=E5=85=A8=E9=83=A8=E5=8A=9F=E8=83=BD=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2020spring/About.java | 26 ++ src/java2020spring/WindowMenu.java | 481 +++++++++++++++++------------ 2 files changed, 312 insertions(+), 195 deletions(-) create mode 100644 src/java2020spring/About.java diff --git a/src/java2020spring/About.java b/src/java2020spring/About.java new file mode 100644 index 0000000..f82f7d5 --- /dev/null +++ b/src/java2020spring/About.java @@ -0,0 +1,26 @@ +package java2020spring; + +import java.awt.Font; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; + +import javax.swing.*; + +public class About extends JDialog{ + JLabel text; +About(JFrame f){ + super(f); + setTitle("关于“记事本”"); + text=new JLabel("版本:1.0 " + "制作者:202025710108信管一班黄紫铃"); + add(text); + setBounds(100,100,350,170); + setDefaultCloseOperation(DISPOSE_ON_CLOSE); + validate(); + +} + + + +} diff --git a/src/java2020spring/WindowMenu.java b/src/java2020spring/WindowMenu.java index c5659a7..ee42e16 100644 --- a/src/java2020spring/WindowMenu.java +++ b/src/java2020spring/WindowMenu.java @@ -2,9 +2,14 @@ package java2020spring; - import java.awt.FileDialog; + import java.awt.BorderLayout; + + +import java.awt.FileDialog; import java.awt.FlowLayout; +import java.awt.datatransfer.*; +import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.InputEvent; @@ -12,95 +17,94 @@ import java.awt.event.InputEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; +import java.io.*; +import java.net.URI; + import javax.swing.*; - public class WindowMenu extends JFrame implements ActionListener{ - FileDialog fileDlg; - File file; - String str,fileName; - int p; - byte byteBuf[]=new byte[1000000]; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import javax.swing.event.UndoableEditEvent; +import javax.swing.event.UndoableEditListener; +import javax.swing.undo.*; + + + + public class WindowMenu extends JFrame implements ActionListener,DocumentListener{ + File file; + FileDialog fileDlg; + String str,fileName; + int p; JMenuBar menubar; - JMenu menu1,menu2,menu3,menu4,menu5,subMenu; + JMenu menu1,menu2,menu3,menu4,menu5; JMenuItem item1,item2,item3,item4,item5, - item2_1,item2_2,item2_3,item2_4,item2_5, - item2_6,item2_7,item2_8,item2_9,item2_10, - item2_11,item2_12, - item3_1,item3_2, - item4_1,item5_1,item5_2; - - //9_9 2_2为cut 2_3为Copy,2_4为Paste + item2_1,item2_2,item2_3,item2_4,item2_5,item2_10,item2_11,item2_12, + item3_1, item3_2, item4_1, item5_1, item5_2; + + Toolkit toolkit = Toolkit.getDefaultToolkit(); + Clipboard clipBoard = toolkit.getSystemClipboard(); + // 创建撤销操作管理器 + protected UndoManager undo = new UndoManager(); + protected UndoableEditListener undoHandler = new UndoHandler(); + // 其他变量 + JTextArea showText; JMenu menu; + JPopupMenu jpm; + JButton buttonFont; JLabel statusline; String oldValue;// 存放编辑区原来的内容,用于比较文本是否有改动 boolean isNewFile = true;// 是否新文件(未保存过的) File currentFile;// 当前文件名 + WindowMenu(){ init(); setLayout(new FlowLayout()); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } - //public WindowMenu() {}; - /*public WindowMenu (String s,int x,int y,int w,int h) { - init(s); - - setLocation(x,y); - setSize(w,h); - //setVisible(true); - //setDefaultCloseOperation(DISPOSE_ON_CLOSE); - }*/ - void init() {//创建第一个菜单 - //setTitle(s); - showText=new JTextArea(15,55); - showText.setLineWrap(true);//文本自动回行 - showText.setWrapStyleWord(true);//文本区以单词为界自动换行 - //上两个功能应该在点击“自动换行”后实现 - //需要在该菜单项中注册监视器 + + void init() { + showText=new JTextArea(23,63); + oldValue=showText.getText(); + //创建菜单条 menubar=new JMenuBar(); + //创建菜单 menu1=new JMenu("文件(F)"); menu2=new JMenu("编辑(E)"); menu3=new JMenu("格式(O)"); menu4=new JMenu("查看(V)"); menu5=new JMenu("帮助(H)"); - subMenu=new JMenu("软件项目"); + item1=new JMenuItem("新建(N)"); - item2=new JMenuItem("打开(O)... Ctrl+O"); - item3=new JMenuItem("保存(S) Ctrl+S"); - item4=new JMenuItem("另存为(A)... "); - item5=new JMenuItem("退出(X) "); + item2=new JMenuItem("打开(O)..."); + item3=new JMenuItem("保存(S)"); + item4=new JMenuItem("另存为(A)..."); + item5=new JMenuItem("退出(X)"); //menu1的菜单项 - item2_1=new JMenuItem("撤消(U) Ctrl+Z"); - item2_2=new JMenuItem("剪切(T) Ctrl+X"); - item2_3=new JMenuItem("复制(C) Ctrl+C"); - item2_4=new JMenuItem("粘贴(P) Ctrl+V"); - item2_5=new JMenuItem("删除(L) Del"); - item2_6=new JMenuItem("查找(F)... Ctrl+F"); - item2_7=new JMenuItem("查找下一个(N) F3"); - item2_8=new JMenuItem("替换(R)... Ctrl+H"); - item2_9=new JMenuItem("转到(G)... Ctrl+G"); - item2_10=new JMenuItem("全选(A)... Ctrl+A"); - item2_11=new JMenuItem("时间/日期(D)... F5"); - //实现“转到”功能,需要取消“自动换行” + + item2_1=new JMenuItem("撤消(U)"); + item2_1.setEnabled(false); + item2_2=new JMenuItem("剪切(T)"); + item2_3=new JMenuItem("复制(C)"); + item2_4=new JMenuItem("粘贴(P)"); + item2_5=new JMenuItem("删除(L)"); + item2_10=new JMenuItem("全选(A)..."); + item2_11=new JMenuItem("时间/日期(D)..."); //menu2的菜单项 + item3_1=new JMenuItem("自动换行(W) "); - //自动换行点击后有一个√ item3_2=new JMenuItem("字体(F)... "); //menu3的菜单项 + item4_1=new JMenuItem("状态栏(S) "); - //点击可使下方状态菜单条消失 + //点击可使上方状态栏消失 //menu4的菜单项 + item5_1=new JMenuItem("查看帮助(H) "); item5_2=new JMenuItem("关于记事本(A) "); //menu5的菜单项 + + item1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_MASK)); item2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK)); item3.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK)); @@ -109,13 +113,7 @@ import javax.swing.*; item2_2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK)); item2_3.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK)); item2_4.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,InputEvent.CTRL_MASK)); - item2_5.setAccelerator(KeyStroke.getKeyStroke((char)KeyEvent.VK_DELETE)); - //? - item2_6.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F,InputEvent.CTRL_MASK)); - item2_7.setAccelerator(KeyStroke.getKeyStroke("F3")); - //? - item2_8.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H,InputEvent.CTRL_MASK)); - item2_9.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_G,InputEvent.CTRL_MASK)); + item2_5.setAccelerator(KeyStroke.getKeyStroke("Delete")); item2_10.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,InputEvent.CTRL_MASK)); item2_11.setAccelerator(KeyStroke.getKeyStroke("F5")); //设置menu2的快捷键 @@ -125,7 +123,8 @@ import javax.swing.*; menu1.add(item2); menu1.add(item3); menu1.add(item4); - menu1.addSeparator();//增加分隔条 + menu1.addSeparator(); + //增加分隔条 menu1.add(item5); //添加menu1的菜单项 menu2.add(item2_1); @@ -135,11 +134,6 @@ import javax.swing.*; menu2.add(item2_4); menu2.add(item2_5); menu2.addSeparator(); - menu2.add(item2_6); - menu2.add(item2_7); - menu2.add(item2_8); - menu2.add(item2_9); - menu2.addSeparator(); menu2.add(item2_10); menu2.add(item2_11); //添加menu2的菜单项 @@ -151,35 +145,65 @@ import javax.swing.*; menu5.add(item5_1); menu5.addSeparator(); menu5.add(item5_2); - //添加menu5的菜单项 menubar.add(menu1); menubar.add(menu2); menubar.add(menu3); menubar.add(menu4); menubar.add(menu5); + jpm=menu2.getPopupMenu(); + + + setJMenuBar(menubar); + //将菜单条放置到窗口中 + + statusline=new JLabel("状态栏"); + this.add(statusline,BorderLayout.NORTH); + statusline.setVisible(true); - - - setJMenuBar(menubar);//将菜单条放置到窗口中 - item5.addActionListener(this); - //向退出键注册监视器 item1.addActionListener(this); //向新建键注册监视器 item2.addActionListener(this); item3.addActionListener(this); + item4.addActionListener(this); + item5.addActionListener(this); + //向退出键注册监视器 + item2_1.addActionListener(this); item2_2.addActionListener(this); item2_3.addActionListener(this); item2_4.addActionListener(this); item2_5.addActionListener(this); item2_10.addActionListener(this); item2_11.addActionListener(this); + item3_1.addActionListener(this); + item3_2.addActionListener(this); + item4_1.addActionListener(this); + item5_1.addActionListener(this); + item5_2.addActionListener(this); - add(new JScrollPane(showText));//JTextArea不自带滚动窗格 + add(new JScrollPane(showText)); + //JTextArea不自带滚动窗格 //因此需要把文本区放到一个滚动窗格中 //滚动窗格只可以添加一个组件 - - } + + // 编辑区注册事件监听 + showText.getDocument().addUndoableEditListener(undoHandler); + showText.getDocument().addDocumentListener(this); + + // 右键弹出式菜单 + showText.addMouseListener(new MouseAdapter() { + public void mouseReleased(MouseEvent e) { + if (e.getButton() == MouseEvent.BUTTON3) + jpm.show(menu2, e.getX() - 30, e.getY()); + } + + public void mouseClicked(MouseEvent e) { + if (e.getButton() == MouseEvent.BUTTON1) + jpm.setVisible(false); + } + }); + } + @Override public void actionPerformed(ActionEvent e) { if (e.getSource() == item5) { @@ -190,77 +214,46 @@ import javax.swing.*; if(e.getSource()==item1)//新建 showText.setText(""); - if(e.getSource()==item2)//打开 - {showText.requestFocus(); - String currentValue = showText.getText(); - boolean isTextChange = (currentValue.equals(oldValue)) ? false : true; - if (isTextChange) { - int saveChoose = JOptionPane.showConfirmDialog(this, "您的文件尚未保存,是否保存?", "提示", - JOptionPane.YES_NO_CANCEL_OPTION); - if (saveChoose == JOptionPane.YES_OPTION) { - String str = null; - JFileChooser fileChooser = new JFileChooser(); - fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); - // fileChooser.setApproveButtonText("确定"); - fileChooser.setDialogTitle("另存为"); - int result = fileChooser.showSaveDialog(this); - if (result == JFileChooser.CANCEL_OPTION) { - statusline.setText("您没有选择任何文件"); - return; - } - File saveFileName = fileChooser.getSelectedFile(); - if (saveFileName == null || saveFileName.getName().equals("")) { - JOptionPane.showMessageDialog(this, "不合法的文件名", "不合法的文件名", JOptionPane.ERROR_MESSAGE); - } else { - try { - FileWriter fw = new FileWriter(saveFileName); - BufferedWriter bfw = new BufferedWriter(fw); - bfw.write(showText.getText(), 0, showText.getText().length()); - bfw.flush();// 刷新该流的缓冲 - bfw.close(); - isNewFile = false; - currentFile = saveFileName; - oldValue = showText.getText(); - this.setTitle(saveFileName.getName() + " - 记事本"); - statusline.setText("当前打开文件:" + saveFileName.getAbsoluteFile()); - } catch (IOException ioException) { - } - } - } else if (saveChoose == JOptionPane.NO_OPTION) { - String str = null; - JFileChooser fileChooser = new JFileChooser(); - fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); - // fileChooser.setApproveButtonText("确定"); - fileChooser.setDialogTitle("打开文件"); - int result = fileChooser.showOpenDialog(this); - if (result == JFileChooser.CANCEL_OPTION) { - statusline.setText("您没有选择任何文件"); - return; - } - File fileName = fileChooser.getSelectedFile(); - if (fileName == null || fileName.getName().equals("")) { - JOptionPane.showMessageDialog(this, "不合法的文件名", "不合法的文件名", JOptionPane.ERROR_MESSAGE); - } else { - try { - FileReader fr = new FileReader(fileName); - BufferedReader bfr = new BufferedReader(fr); - showText.setText(""); - while ((str = bfr.readLine()) != null) { - showText.append(str); - } - this.setTitle(fileName.getName() + " - 记事本"); - statusline.setText(" 当前打开文件:" + fileName.getAbsoluteFile()); - fr.close(); - isNewFile = false; - currentFile = fileName; - oldValue = showText.getText(); - } catch (IOException ioException) { + if (e.getSource() == item2)// 打开 + { + showText.requestFocus(); + String currentValue = showText.getText(); + boolean isTextChange = (currentValue.equals(oldValue)) ? false : true; + if (isTextChange) { + int saveChoose = JOptionPane.showConfirmDialog(this, "您的文件尚未保存,是否保存?", "提示", + JOptionPane.YES_NO_CANCEL_OPTION); + if (saveChoose == JOptionPane.YES_OPTION) { + String str = null; + JFileChooser fileChooser = new JFileChooser(); + fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); + // fileChooser.setApproveButtonText("确定"); + fileChooser.setDialogTitle("另存为"); + int result = fileChooser.showSaveDialog(this); + if (result == JFileChooser.CANCEL_OPTION) { + statusline.setText("您没有选择任何文件"); + return; } - } + File saveFileName = fileChooser.getSelectedFile(); + if (saveFileName == null || saveFileName.getName().equals("")) { + JOptionPane.showMessageDialog(this, "不合法的文件名", "不合法的文件名", JOptionPane.ERROR_MESSAGE); } else { - return; + try { + Writer fw = new FileWriter(saveFileName);//change + BufferedWriter bfw = new BufferedWriter(fw); + bfw.write(showText.getText(), 0, showText.getText().length()); + bfw.flush();// 刷新该流的缓冲 + bfw.close(); + isNewFile = false; + currentFile = saveFileName; + oldValue = showText.getText(); + this.setTitle(saveFileName.getName() + " - 记事本"); + statusline.setText("当前打开文件:" + saveFileName.getAbsoluteFile()); + } catch (IOException ioException) { + } } - } else { + } + else if (saveChoose == JOptionPane.NO_OPTION) + { String str = null; JFileChooser fileChooser = new JFileChooser(); fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); @@ -268,7 +261,7 @@ import javax.swing.*; fileChooser.setDialogTitle("打开文件"); int result = fileChooser.showOpenDialog(this); if (result == JFileChooser.CANCEL_OPTION) { - statusline.setText(" 您没有选择任何文件 "); + statusline.setText("您没有选择任何文件"); return; } File fileName = fileChooser.getSelectedFile(); @@ -276,7 +269,7 @@ import javax.swing.*; JOptionPane.showMessageDialog(this, "不合法的文件名", "不合法的文件名", JOptionPane.ERROR_MESSAGE); } else { try { - FileReader fr = new FileReader(fileName); + Reader fr = new FileReader(fileName); BufferedReader bfr = new BufferedReader(fr); showText.setText(""); while ((str = bfr.readLine()) != null) { @@ -290,47 +283,109 @@ import javax.swing.*; oldValue = showText.getText(); } catch (IOException ioException) { } + } + } else { + return; + } + } else { + String str = null; + JFileChooser fileChooser = new JFileChooser(); + fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); + // fileChooser.setApproveButtonText("确定"); + fileChooser.setDialogTitle("打开文件"); + int result = fileChooser.showOpenDialog(this); + if (result == JFileChooser.CANCEL_OPTION) { + statusline.setText(" 您没有选择任何文件 "); + return; + } + File fileName = fileChooser.getSelectedFile(); + if (fileName == null || fileName.getName().equals("")) { + JOptionPane.showMessageDialog(this, "不合法的文件名", "不合法的文件名", JOptionPane.ERROR_MESSAGE); + } else { + try { + Reader fr = new FileReader(fileName);//change + BufferedReader bfr = new BufferedReader(fr); + showText.setText(""); + while ((str = bfr.readLine()) != null) { + showText.append(str); + } + this.setTitle(fileName.getName() + " - 记事本"); + statusline.setText(" 当前打开文件:" + fileName.getAbsoluteFile()); + fr.close(); + isNewFile = false; + currentFile = fileName; + oldValue = showText.getText(); + } catch (IOException ioException) { + } + } + } +//问题:打开不了含有中文字符的文件 + } - } - } - if (e.getSource()==item3)//保存 - //保存后出现了文件不能打开的问题 - { - fileDlg=new FileDialog(this,"保存文件",FileDialog.SAVE); - /*fileDlg.show(); - fileName=fileDlg.getFile(); - str=showText.getText(); - byteBuf=str.getBytes(); - try { - FileOutputStream out=new FileOutputStream(fileName); - out.write(byteBuf); - out.close(); + if (e.getSource() == item3)// 保存 + + { + fileDlg = new FileDialog(this, "保存", FileDialog.SAVE); + this.setVisible(true); + + if (file == null) { + fileDlg.setVisible(true); + String dirPath = fileDlg.getDirectory(); + String fileName = fileDlg.getFile(); + if (dirPath == null || fileName == null) + return; + file = new File(dirPath, fileName); + try { + BufferedWriter bfwt = new BufferedWriter(new FileWriter(file)); + String t = showText.getText(); + bfwt.write(t); + bfwt.close(); + showText.setText(""); + } catch (IOException ex) { + throw new RuntimeException(); + } + } } - catch(IOException ioe) { - }*/ - // savedia=new FileDialog(frame,"保存",FileDialog.SAVE); - this.setVisible(true); - if(file==null){ - fileDlg.setVisible(true); - String dirPath=fileDlg.getDirectory(); - String fileName=fileDlg.getFile(); - if(dirPath==null||fileName==null) - return ; - file=new File(dirPath,fileName); - try{ - BufferedWriter bfwt=new BufferedWriter(new FileWriter(file)); - String t= showText.getText(); - bfwt.write(t); - bfwt.close(); - showText.setText(""); - } - catch (IOException ex){ - throw new RuntimeException(); - }} - } + if (e.getSource() == item4)// 另存为 + { + JFileChooser chooser = new JFileChooser(); + // 创建文件选择器 + int result = chooser.showSaveDialog(null); + // 弹出一个save file文件选择器对话框 + if (result == JFileChooser.APPROVE_OPTION) { + // JFileChooser.APPROVE_OPTION是个整数常量,代表0 + try { + // 向磁盘中写文件 + FileWriter fout = new FileWriter(chooser.getSelectedFile(), true); + // 创建文件输出流对象 + // 写数据 + String string = showText.getText(); + fout.write(showText.getText() + "\r\n"); + fout.close();// 关闭流,释放IO流所占的系统资源 + } catch (IOException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + } + } + if (e.getSource() == item2_1)// 撤销 + { + showText.requestFocus(); + if (undo.canUndo()) { + try { + undo.undo(); + } catch (CannotUndoException ex) { + System.out.println("Unable to undo:" + ex); + // ex.printStackTrace(); + } + } + if (!undo.canUndo()) { + item2_1.setEnabled(false); + } + } if(e.getSource()==item2_3) {//复制 str=showText.getSelectedText(); @@ -338,25 +393,27 @@ import javax.swing.*; if(e.getSource()==item2_2)//剪切 { str=showText.getSelectedText(); - showText.replaceRange("", showText.getSelectionStart(), showText.getSelectionEnd()); + showText.replaceRange + ("", showText.getSelectionStart(), showText.getSelectionEnd()); } if(e.getSource()==item2_4)//粘贴 { p=showText.getCaretPosition(); - showText.replaceRange("", showText.getSelectionStart(), showText.getSelectionEnd()); + showText.replaceRange + ("", showText.getSelectionStart(), showText.getSelectionEnd()); showText.insert(str, p); } if(e.getSource()==item2_5)//删除 { - showText.replaceRange("", showText.getSelectionStart(), showText.getSelectionEnd()); + showText.replaceRange + ("", showText.getSelectionStart(), showText.getSelectionEnd()); } if(e.getSource()==item2_10)//全选 { showText.selectAll(); } - if(e.getSource()==item2_11)//时间/日期 { java.text.SimpleDateFormat formatter=new java.text.SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); @@ -366,7 +423,7 @@ import javax.swing.*; } - if(e.getSource()==item3_1) { + if(e.getSource()==item3_1) {//自动回行 showText.setLineWrap(true);//文本自动回行 showText.setWrapStyleWord(true);//文本区以单词为界自动换行 @@ -387,11 +444,45 @@ import javax.swing.*; showText.repaint(); } } + if(e.getSource()==item4_1) {//状态栏 + statusline.setVisible(false); + } + //问题:无法实现再点击一次显示状态栏 + if(e.getSource()==item5_1) {//帮助 + Desktop desktop=Desktop.getDesktop(); + try{ + String str="https://cn.bing.com/search?q=%e8%8e%b7%e5%8f%96%e6%9c%89%e5%85%b3+windows+10+%e4%b8%ad%e7%9a%84%e8%ae%b0%e4%ba%8b%e6%9c%ac%e7%9a%84%e5%b8%ae%e5%8a%a9&qs=HS&sc=2-0&cvid=80C227E8B38C4ABBB70529DBA387ADCE&FORM=QBLH&sp=1"; + desktop.browse(new URI(str)); + } + catch(Exception ex) { + ex.printStackTrace(); + } + } + //点击帮助菜单项自动跳转网页 - }} - + if(e.getSource()==item5_2) {//关于记事本功能 + About about=new About(this); + about.setVisible(true); + } - + } - \ No newline at end of file + //实现DocumentListener接口中的方法 + public void removeUpdate(DocumentEvent e) + { item2_1.setEnabled(true); + } + public void insertUpdate(DocumentEvent e) + { item2_1.setEnabled(true); + } + public void changedUpdate(DocumentEvent e) + { item2_1.setEnabled(true); + }//DocumentListener结束 + + //实现接口UndoableEditListener的类UndoHandler + class UndoHandler implements UndoableEditListener + { public void undoableEditHappened(UndoableEditEvent uee) + { undo.addEdit(uee.getEdit()); + } + } + } \ No newline at end of file -- Gitee From e31947905824adc8d1431e3c963968079af577fc Mon Sep 17 00:00:00 2001 From: LENOVO Date: Fri, 11 Jun 2021 14:26:39 +0800 Subject: [PATCH 9/9] =?UTF-8?q?FontFamily=E7=B1=BB=EF=BC=9A=E8=AF=A5?= =?UTF-8?q?=E7=B1=BB=E5=AF=B9=E8=B1=A1=E5=8F=AF=E4=BB=A5=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E5=BD=93=E5=89=8D=E6=9C=BA=E5=99=A8=E5=8F=AF=E7=94=A8=E7=9A=84?= =?UTF-8?q?=E5=85=A8=E9=83=A8=E5=AD=97=E4=BD=93=E5=90=8D=E7=A7=B0=E3=80=82?= =?UTF-8?q?JDialog=E7=9A=84=E5=AD=90=E7=B1=BBFontDialog=EF=BC=9A=E8=AF=A5?= =?UTF-8?q?=E7=B1=BB=E4=B8=BAFontFamily=E5=AF=B9=E8=B1=A1=E7=BB=B4?= =?UTF-8?q?=E6=8A=A4=E7=9A=84=E6=95=B0=E6=8D=AE=E6=8F=90=E4=BE=9B=E8=A7=86?= =?UTF-8?q?=E5=9B=BE=EF=BC=8CFontDialog=E5=AF=B9=E8=B1=A1=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E4=B8=8B=E6=8B=89=E5=88=97=E8=A1=A8=E6=98=BE=E7=A4=BA?= =?UTF-8?q?FontFamily=E5=AF=B9=E8=B1=A1=E7=BB=B4=E6=8A=A4=E7=9A=84?= =?UTF-8?q?=E5=85=A8=E9=83=A8=E5=AD=97=E4=BD=93=E7=9A=84=E5=90=8D=E7=A7=B0?= =?UTF-8?q?=E3=80=82About=E7=B1=BB=EF=BC=9A=E8=AF=A5=E7=B1=BB=E4=B8=BA?= =?UTF-8?q?=E5=85=B3=E4=BA=8E=E8=AE=B0=E4=BA=8B=E6=9C=AC=E6=8F=90=E4=BE=9B?= =?UTF-8?q?=E8=A7=86=E5=9B=BE=E3=80=82MainClass=E7=B1=BB=EF=BC=9A=E8=BF=90?= =?UTF-8?q?=E8=A1=8C=E7=9A=84=E4=B8=BB=E7=B1=BB=EF=BC=8CWindowMenu?= =?UTF-8?q?=E7=B1=BB=EF=BC=9A=E5=AE=9E=E7=8E=B0=E7=B3=BB=E7=BB=9F=E7=9A=84?= =?UTF-8?q?=E5=9F=BA=E6=9C=AC=E5=8A=9F=E8=83=BD=E3=80=82=E8=BF=99=E6=98=AF?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E6=9C=80=E5=90=8E=E5=AE=8C=E6=88=90=E7=9A=84?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2020spring/About.java | 2 +- src/java2020spring/FontDialog.java | 2 +- src/java2020spring/FontFamilyNames.java | 2 +- src/java2020spring/MainClass.java | 2 +- src/java2020spring/WindowMenu.java | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/java2020spring/About.java b/src/java2020spring/About.java index f82f7d5..65a0305 100644 --- a/src/java2020spring/About.java +++ b/src/java2020spring/About.java @@ -1,4 +1,4 @@ -package java2020spring; +package java2020spring; import java.awt.Font; import java.awt.event.ActionEvent; diff --git a/src/java2020spring/FontDialog.java b/src/java2020spring/FontDialog.java index 3b3e9a4..d412cbd 100644 --- a/src/java2020spring/FontDialog.java +++ b/src/java2020spring/FontDialog.java @@ -7,7 +7,7 @@ import java.awt.event.*; import javax.swing.*; public class FontDialog extends JDialog implements ItemListener,ActionListener{ - FontFamilyNames fontFamilyNames; + FontFamilyNames fontFamilyNames; int fontSize=38; String fontName; JComboBox fontNameList,fontSizeList; diff --git a/src/java2020spring/FontFamilyNames.java b/src/java2020spring/FontFamilyNames.java index 13d1ba6..15df80b 100644 --- a/src/java2020spring/FontFamilyNames.java +++ b/src/java2020spring/FontFamilyNames.java @@ -1,4 +1,4 @@ -package java2020spring; +package java2020spring; import java.awt.GraphicsEnvironment; public class FontFamilyNames { diff --git a/src/java2020spring/MainClass.java b/src/java2020spring/MainClass.java index 986eaae..3203798 100644 --- a/src/java2020spring/MainClass.java +++ b/src/java2020spring/MainClass.java @@ -2,7 +2,7 @@ package java2020spring; public class MainClass { - + public static void main(String[] args) { WindowMenu win=new WindowMenu(); win.setBounds(100,100,590,500); diff --git a/src/java2020spring/WindowMenu.java b/src/java2020spring/WindowMenu.java index ee42e16..abe92ad 100644 --- a/src/java2020spring/WindowMenu.java +++ b/src/java2020spring/WindowMenu.java @@ -368,7 +368,7 @@ import javax.swing.undo.*; e1.printStackTrace(); } } - } + } if (e.getSource() == item2_1)// 撤销 -- Gitee