From 4813758e7148d3ee110662dac78e4961868bf203 Mon Sep 17 00:00:00 2001 From: 86184 <86184@LAPTOP-H62NC2FB> Date: Wed, 19 May 2021 19:06:00 +0800 Subject: [PATCH 01/12] =?UTF-8?q?=E5=88=9A=E5=BC=80=E5=A7=8B=E8=AF=95?= =?UTF-8?q?=E8=AF=95=E6=B0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/NoteLayout.java | 25 +++++++++++++++++++++++++ src/NoteMain.java | 10 ++++++++++ 2 files changed, 35 insertions(+) create mode 100644 src/NoteLayout.java create mode 100644 src/NoteMain.java diff --git a/src/NoteLayout.java b/src/NoteLayout.java new file mode 100644 index 0000000..38f378b --- /dev/null +++ b/src/NoteLayout.java @@ -0,0 +1,25 @@ +import java.awt.*; +import java.awt.event.*; +import java.io.*; +import javax.swing.*; +import javax.swing.filechooser.FileFilter; +import javax.swing.undo.UndoManager; +public class NoteLayout extends JFrame { + JMenuBar menuBar; + JMenu file,edit,foramt,view,help; + /*分别是文件,编辑,格式,查看,帮助的菜单栏 */ + NoteLayout(){ + init(); + setVisible(true); + setDefaultCloseOperation(DISPOSE_ON_CLOSE); + } + void init() { + setLayout(new FlowLayout()); + menuBar=new JMenuBar(); + file=new JMenu("文件"); + edit=new JMenu("编辑"); + foramt=new JMenu("格式"); + view=new JMenu("查看"); + help=new JMenu("帮助"); + } +} diff --git a/src/NoteMain.java b/src/NoteMain.java new file mode 100644 index 0000000..decd43e --- /dev/null +++ b/src/NoteMain.java @@ -0,0 +1,10 @@ +public class NoteMain { + + public static void main(String[] args) { + // TODO Auto-generated method stub + NoteLayout note=new NoteLayout(); + note.setTitle("血狼记事本"); + note.setBounds(100,100,800,550); + } + +} -- Gitee From c24981259fe41c5970b3d62d34934cb0a57e5097 Mon Sep 17 00:00:00 2001 From: 86184 <86184@LAPTOP-H62NC2FB> Date: Thu, 20 May 2021 23:55:50 +0800 Subject: [PATCH 02/12] =?UTF-8?q?=E5=A4=A7=E8=87=B4=E5=BC=84=E5=A5=BD?= =?UTF-8?q?=E4=BA=86=E5=B8=83=E5=B1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/NoteLayout.java | 94 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 86 insertions(+), 8 deletions(-) diff --git a/src/NoteLayout.java b/src/NoteLayout.java index 38f378b..2d66636 100644 --- a/src/NoteLayout.java +++ b/src/NoteLayout.java @@ -5,9 +5,38 @@ import javax.swing.*; import javax.swing.filechooser.FileFilter; import javax.swing.undo.UndoManager; public class NoteLayout extends JFrame { - JMenuBar menuBar; - JMenu file,edit,foramt,view,help; + JMenuBar menuBar=new JMenuBar(); + JMenu file=new JMenu("文件(F)"), + edit=new JMenu("编辑(E)"), + format=new JMenu("格式(O)"), + view=new JMenu("查看(V)"), + help=new JMenu("帮助(H)"); /*分别是文件,编辑,格式,查看,帮助的菜单栏 */ + JMenuItem n=new JMenuItem("新建(N)"), + o=new JMenuItem("打开(O)"), + s=new JMenuItem("保存(S)"), + a=new JMenuItem("另存为(A)"), + x=new JMenuItem("退出(X)"); + /*分别是新建,打开,保存,另存为,退出*/ + + JMenuItem e1=new JMenuItem("撤销(U)"), + e2=new JMenuItem("剪切(T)"), + e3=new JMenuItem("复制(C)"), + e4=new JMenuItem("粘贴(P)"), + e5=new JMenuItem("删除(D)"), + e6=new JMenuItem("全选(A)"); + + JMenuItem o1=new JMenuItem("自行换行(W)"), + o2=new JMenuItem("字体(F)"); + + JMenu sf=new JMenu("缩放(Z)"); + JMenuItem v1=new JMenuItem("放大(I)"), + v2=new JMenuItem("缩小(O)"), + v3=new JMenuItem("恢复默认缩小"), + v4=new JMenuItem("状态栏(S)"); + + JMenuItem h1=new JMenuItem("查看帮助(H)"), + h2=new JMenuItem("关于记事本(A)"); NoteLayout(){ init(); setVisible(true); @@ -15,11 +44,60 @@ public class NoteLayout extends JFrame { } void init() { setLayout(new FlowLayout()); - menuBar=new JMenuBar(); - file=new JMenu("文件"); - edit=new JMenu("编辑"); - foramt=new JMenu("格式"); - view=new JMenu("查看"); - help=new JMenu("帮助"); + setFileLayout(); + seteditLayout(); + setformatLayout(); + setviewLayout(); + sethelpLayout(); + menuBar.add(file); + menuBar.add(edit); + menuBar.add(format); + menuBar.add(view); + menuBar.add(help); + setJMenuBar(menuBar); + } + //file的布局 + void setFileLayout() { + n.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_MASK)); + o.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK)); + s.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,InputEvent.CTRL_MASK)); + x.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK)); + file.add(n); + file.add(o); + file.add(s); + file.add(x); + } + //edit布局 + void seteditLayout() { + e1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z,InputEvent.CTRL_MASK)); + e2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK)); + e3.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK)); + e4.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,InputEvent.CTRL_MASK)); + e5.setAccelerator(KeyStroke.getKeyStroke('D')); + e6.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,InputEvent.CTRL_MASK)); + edit.add(e1); + edit.add(e2); + edit.add(e3); + edit.add(e4); + edit.add(e5); + edit.add(e6); + } + //format布局 + void setformatLayout(){ + format.add(o1); + format.add(o2); + } + //view布局 + void setviewLayout() { + view.add(sf); + view.add(v4); + sf.add(v1); + sf.add(v2); + sf.add(v3); + } + //help布局 + void sethelpLayout() { + help.add(h1); + help.add(h2); } } -- Gitee From f2113c3987909f82cebee7bbb585067b079609a8 Mon Sep 17 00:00:00 2001 From: 86184 <86184@LAPTOP-H62NC2FB> Date: Fri, 21 May 2021 23:28:42 +0800 Subject: [PATCH 03/12] =?UTF-8?q?=E6=94=B9=E4=BA=86=E4=B8=80=E4=B8=8B?= =?UTF-8?q?=E5=B8=83=E5=B1=80=EF=BC=8C=E6=9E=84=E6=80=9D=E4=BA=86=E4=B8=80?= =?UTF-8?q?=E4=B8=8B=E6=95=B4=E4=BD=93=E7=BB=93=E6=9E=84=EF=BC=8C=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E6=96=B9=E6=B3=95=E6=B2=A1=E5=81=9A=E5=AE=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/NoteLayout.java | 74 +++++++++++++++++++++++++++++---------------- 1 file changed, 48 insertions(+), 26 deletions(-) diff --git a/src/NoteLayout.java b/src/NoteLayout.java index 2d66636..b302549 100644 --- a/src/NoteLayout.java +++ b/src/NoteLayout.java @@ -5,45 +5,47 @@ import javax.swing.*; import javax.swing.filechooser.FileFilter; import javax.swing.undo.UndoManager; public class NoteLayout extends JFrame { + + JTextArea area=new JTextArea(); JMenuBar menuBar=new JMenuBar(); - JMenu file=new JMenu("文件(F)"), - edit=new JMenu("编辑(E)"), - format=new JMenu("格式(O)"), - view=new JMenu("查看(V)"), - help=new JMenu("帮助(H)"); + JMenu file=new JMenu("文 件(F)"), + edit=new JMenu("编 辑(E)"), + format=new JMenu("格 式(O)"), + view=new JMenu("查 看(V)"), + help=new JMenu("帮 助(H)"); /*分别是文件,编辑,格式,查看,帮助的菜单栏 */ - JMenuItem n=new JMenuItem("新建(N)"), - o=new JMenuItem("打开(O)"), - s=new JMenuItem("保存(S)"), - a=new JMenuItem("另存为(A)"), - x=new JMenuItem("退出(X)"); + JMenuItem n=new JMenuItem("新建(N) "), + o=new JMenuItem("打开(O) "), + s=new JMenuItem("保存(S) "), + a=new JMenuItem("另存为(A) "), + x=new JMenuItem("退出(X) "); /*分别是新建,打开,保存,另存为,退出*/ - JMenuItem e1=new JMenuItem("撤销(U)"), - e2=new JMenuItem("剪切(T)"), - e3=new JMenuItem("复制(C)"), - e4=new JMenuItem("粘贴(P)"), - e5=new JMenuItem("删除(D)"), - e6=new JMenuItem("全选(A)"); + JMenuItem e1=new JMenuItem("撤销(U) "), + e2=new JMenuItem("剪切(T) "), + e3=new JMenuItem("复制(C) "), + e4=new JMenuItem("粘贴(P) "), + e5=new JMenuItem("删除(D) "), + e6=new JMenuItem("全选(A) "); - JMenuItem o1=new JMenuItem("自行换行(W)"), - o2=new JMenuItem("字体(F)"); + JMenuItem o1=new JMenuItem("自行换行(W) "), + o2=new JMenuItem("字体(F) "); JMenu sf=new JMenu("缩放(Z)"); - JMenuItem v1=new JMenuItem("放大(I)"), - v2=new JMenuItem("缩小(O)"), - v3=new JMenuItem("恢复默认缩小"), - v4=new JMenuItem("状态栏(S)"); + JMenuItem v1=new JMenuItem("放大(I) "), + v2=new JMenuItem("缩小(O) "), + v3=new JMenuItem("恢复默认缩小 "), + v4=new JMenuItem("状态栏(S) "); - JMenuItem h1=new JMenuItem("查看帮助(H)"), - h2=new JMenuItem("关于记事本(A)"); + JMenuItem h1=new JMenuItem("查看帮助(H) "), + h2=new JMenuItem("关于记事本(A) "); NoteLayout(){ init(); setVisible(true); setDefaultCloseOperation(DISPOSE_ON_CLOSE); } void init() { - setLayout(new FlowLayout()); + setLayout(new BorderLayout()); setFileLayout(); seteditLayout(); setformatLayout(); @@ -54,8 +56,14 @@ public class NoteLayout extends JFrame { menuBar.add(format); menuBar.add(view); menuBar.add(help); - setJMenuBar(menuBar); + JScrollPane main=new JScrollPane(area); + area.setLineWrap(true);//自动换行 + add(menuBar,BorderLayout.NORTH); + add(main,BorderLayout.CENTER); + + setS(); } + //file的布局 void setFileLayout() { n.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_MASK)); @@ -100,4 +108,18 @@ public class NoteLayout extends JFrame { help.add(h1); help.add(h2); } + //保存功能实现 + void setS() { + s.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + try { + JOptionPane.showMessageDialog(null,"保存成功","保存",JOptionPane.OK_CANCEL_OPTION); + + } + catch(Exception exp) { + System.out.println("eorr:"+exp); + } + } + }); + } } -- Gitee From d09b5be75eea0ca61bbcdf52de828b0cb64957a8 Mon Sep 17 00:00:00 2001 From: 86184 <86184@LAPTOP-H62NC2FB> Date: Fri, 21 May 2021 23:32:15 +0800 Subject: [PATCH 04/12] =?UTF-8?q?=E6=94=B9=E4=BA=86=E4=B8=80=E4=B8=8B?= =?UTF-8?q?=E5=B8=83=E5=B1=80=EF=BC=8C=E7=BC=95=E4=BA=86=E4=B8=8B=E6=80=9D?= =?UTF-8?q?=E8=B7=AF=EF=BC=8C=E4=BF=9D=E5=AD=98=E5=8A=9F=E8=83=BD=E6=B2=A1?= =?UTF-8?q?=E5=81=9A=E5=AE=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/NoteLayout.java | 1 - src/NoteMain.java | 1 - 2 files changed, 2 deletions(-) diff --git a/src/NoteLayout.java b/src/NoteLayout.java index b302549..62f8b23 100644 --- a/src/NoteLayout.java +++ b/src/NoteLayout.java @@ -5,7 +5,6 @@ import javax.swing.*; import javax.swing.filechooser.FileFilter; import javax.swing.undo.UndoManager; public class NoteLayout extends JFrame { - JTextArea area=new JTextArea(); JMenuBar menuBar=new JMenuBar(); JMenu file=new JMenu("文 件(F)"), diff --git a/src/NoteMain.java b/src/NoteMain.java index decd43e..6baef9f 100644 --- a/src/NoteMain.java +++ b/src/NoteMain.java @@ -1,5 +1,4 @@ public class NoteMain { - public static void main(String[] args) { // TODO Auto-generated method stub NoteLayout note=new NoteLayout(); -- Gitee From 62475d5cdf2bd1a543be33d8b814e22de48ebc39 Mon Sep 17 00:00:00 2001 From: 86184 <86184@LAPTOP-H62NC2FB> Date: Tue, 25 May 2021 23:33:04 +0800 Subject: [PATCH 05/12] =?UTF-8?q?actionListener=EF=BC=88=E8=BF=98=E5=AD=98?= =?UTF-8?q?=E5=9C=A8=E9=94=99=E8=AF=AF=E6=8F=90=E7=A4=BA=EF=BC=8C=E6=9C=AA?= =?UTF-8?q?=E5=AE=8C=E6=88=90=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/NoteLayout.java | 61 +++++++++++++++++++++++++++++++++------------ 1 file changed, 45 insertions(+), 16 deletions(-) diff --git a/src/NoteLayout.java b/src/NoteLayout.java index 62f8b23..fd80b2b 100644 --- a/src/NoteLayout.java +++ b/src/NoteLayout.java @@ -2,9 +2,12 @@ import java.awt.*; import java.awt.event.*; import java.io.*; import javax.swing.*; +import javax.swing.event.DocumentListener; import javax.swing.filechooser.FileFilter; import javax.swing.undo.UndoManager; -public class NoteLayout extends JFrame { +public class NoteLayout extends JFrame implements ActionListener,DocumentListener{ + String oldValue;//oldValue是area里面原来的文本内容,用来判断area内容是否改动,是否需要保存 + JLabel statusLabel;//剪切板 JTextArea area=new JTextArea(); JMenuBar menuBar=new JMenuBar(); JMenu file=new JMenu("文 件(F)"), @@ -18,6 +21,12 @@ public class NoteLayout extends JFrame { s=new JMenuItem("保存(S) "), a=new JMenuItem("另存为(A) "), x=new JMenuItem("退出(X) "); + /*建立监视*/ + n.addActionListener(this); + o.addActionListener(this); + s.addActionListener(this); + a.addActionListener(this); + x.addActionListener(this); /*分别是新建,打开,保存,另存为,退出*/ JMenuItem e1=new JMenuItem("撤销(U) "), @@ -27,6 +36,14 @@ public class NoteLayout extends JFrame { e5=new JMenuItem("删除(D) "), e6=new JMenuItem("全选(A) "); + /*建立监视*/ + e1.addActionListener(this); + e2.addActionListener(this); + e3.addActionListener(this); + e4.addActionListener(this); + e5.addActionListener(this); + e6.addActionListener(this); + JMenuItem o1=new JMenuItem("自行换行(W) "), o2=new JMenuItem("字体(F) "); @@ -57,10 +74,11 @@ public class NoteLayout extends JFrame { menuBar.add(help); JScrollPane main=new JScrollPane(area); area.setLineWrap(true);//自动换行 + oldValue=area.getText();//获取area的内容 add(menuBar,BorderLayout.NORTH); add(main,BorderLayout.CENTER); - setS(); + } //file的布局 @@ -72,6 +90,7 @@ public class NoteLayout extends JFrame { file.add(n); file.add(o); file.add(s); + file.add(a); file.add(x); } //edit布局 @@ -107,18 +126,28 @@ public class NoteLayout extends JFrame { help.add(h1); help.add(h2); } - //保存功能实现 - void setS() { - s.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - try { - JOptionPane.showMessageDialog(null,"保存成功","保存",JOptionPane.OK_CANCEL_OPTION); - - } - catch(Exception exp) { - System.out.println("eorr:"+exp); - } - } - }); - } + public void actionPerformed(ActionEvent e) { + //新建功能 + if(e.getSource()==n) { + area.requestFocus(); + String currentValue=area.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.setDialogTitle("另存为"); + int result=fileChooser.showSaveDialog(this); + if(result==JFileChooser.CANCEL_OPTION) { + statusLabel.setText("您没有选择任何文件"); + return; + } + } + }//未完 + + + + }} } -- Gitee From cc1f09e910dc9b5b860d3358d0afc08f44e3dd14 Mon Sep 17 00:00:00 2001 From: 86184 <86184@LAPTOP-H62NC2FB> Date: Tue, 1 Jun 2021 11:15:54 +0800 Subject: [PATCH 06/12] =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=BA=86=E5=85=B3?= =?UTF-8?q?=E9=97=AD=E7=AA=97=E5=8F=A3=E4=BF=9D=E5=AD=98=E7=9A=84=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/NoteLayout.java | 198 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 182 insertions(+), 16 deletions(-) diff --git a/src/NoteLayout.java b/src/NoteLayout.java index fd80b2b..3e812ce 100644 --- a/src/NoteLayout.java +++ b/src/NoteLayout.java @@ -2,13 +2,29 @@ import java.awt.*; import java.awt.event.*; import java.io.*; import javax.swing.*; +import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.filechooser.FileFilter; import javax.swing.undo.UndoManager; + +import java.awt.datatransfer.Clipboard; +import java.awt.datatransfer.Transferable; public class NoteLayout extends JFrame implements ActionListener,DocumentListener{ String oldValue;//oldValue是area里面原来的文本内容,用来判断area内容是否改动,是否需要保存 + boolean isNewFile=true;//是否新文件(未保存过的) + File currentFile;//当前文件名 + JLabel statusLabel;//剪切板 + + protected UndoManager undo=new UndoManager(); + //protected UndoableEditListener undoHandler=new UndoHandler(); + //其他变量 + JTextArea area=new JTextArea(); + + Toolkit toolkit=Toolkit.getDefaultToolkit(); + Clipboard clipBoard=toolkit.getSystemClipboard(); + JMenuBar menuBar=new JMenuBar(); JMenu file=new JMenu("文 件(F)"), edit=new JMenu("编 辑(E)"), @@ -21,12 +37,7 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene s=new JMenuItem("保存(S) "), a=new JMenuItem("另存为(A) "), x=new JMenuItem("退出(X) "); - /*建立监视*/ - n.addActionListener(this); - o.addActionListener(this); - s.addActionListener(this); - a.addActionListener(this); - x.addActionListener(this); + /*分别是新建,打开,保存,另存为,退出*/ JMenuItem e1=new JMenuItem("撤销(U) "), @@ -36,13 +47,7 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene e5=new JMenuItem("删除(D) "), e6=new JMenuItem("全选(A) "); - /*建立监视*/ - e1.addActionListener(this); - e2.addActionListener(this); - e3.addActionListener(this); - e4.addActionListener(this); - e5.addActionListener(this); - e6.addActionListener(this); + JMenuItem o1=new JMenuItem("自行换行(W) "), o2=new JMenuItem("字体(F) "); @@ -55,12 +60,14 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene JMenuItem h1=new JMenuItem("查看帮助(H) "), h2=new JMenuItem("关于记事本(A) "); + NoteLayout(){ init(); setVisible(true); setDefaultCloseOperation(DISPOSE_ON_CLOSE); } - void init() { + + public void init() { setLayout(new BorderLayout()); setFileLayout(); seteditLayout(); @@ -77,9 +84,20 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene oldValue=area.getText();//获取area的内容 add(menuBar,BorderLayout.NORTH); add(main,BorderLayout.CENTER); + //建立监视 + setActionEvent(); + addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + exitWindowChoose(); + } + }); + area.requestFocus(); - } + //设置菜单项的功能:剪切,复制,粘帖,删除功能 + checkMenuItemEnabled(); + } + //file的布局 void setFileLayout() { @@ -95,12 +113,15 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene } //edit布局 void seteditLayout() { + //快捷键 + file.setMnemonic('F'); e1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z,InputEvent.CTRL_MASK)); e2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,InputEvent.CTRL_MASK)); e3.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK)); e4.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,InputEvent.CTRL_MASK)); e5.setAccelerator(KeyStroke.getKeyStroke('D')); e6.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,InputEvent.CTRL_MASK)); + //布局 edit.add(e1); edit.add(e2); edit.add(e3); @@ -126,6 +147,136 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene help.add(h1); help.add(h2); } + + //监视 + public void setActionEvent() { + //file + n.addActionListener(this); + o.addActionListener(this); + s.addActionListener(this); + a.addActionListener(this); + x.addActionListener(this); + + //edit + e1.addActionListener(this); + e2.addActionListener(this); + e3.addActionListener(this); + e4.addActionListener(this); + e5.addActionListener(this); + e6.addActionListener(this); + + //format + o1.addActionListener(this); + o2.addActionListener(this); + + //view + v1.addActionListener(this); + v2.addActionListener(this); + v3.addActionListener(this); + v4.addActionListener(this); + + //help + h1.addActionListener(this); + h2.addActionListener(this); + + //area + area.getDocument().addDocumentListener(this); + } + + //设置菜单项的可用性:剪切,复制,粘帖,删除功能 + public void checkMenuItemEnabled() { + String selectText=area.getSelectedText(); + if(selectText==null) { + e2.setEnabled(false); + e3.setEnabled(false); + e4.setEnabled(false); + e5.setEnabled(false); + } + else { + e2.setEnabled(true); + e3.setEnabled(true); + e4.setEnabled(true); + e5.setEnabled(true); + } + Transferable contents=clipBoard.getContents(this); + if(contents==null) { + e4.setEnabled(false); + } + else { + e4.setEnabled(true); + } + } + + //关闭窗口时调用 + public void exitWindowChoose() { + area.requestFocus(); + String currentValue=area.getText(); + if(currentValue.equals(oldValue)==true) { + System.exit(0); + } + else{ + int exitChoose=JOptionPane.showConfirmDialog(this,"您的文件尚未保存,是否保存?","退出提示",JOptionPane.YES_NO_CANCEL_OPTION); + if(exitChoose==JOptionPane.YES_OPTION){ //boolean isSave=false; + if(isNewFile){ + 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){ + statusLabel.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(area.getText(),0,area.getText().length()); + bfw.flush(); + fw.close(); + + isNewFile=false; + currentFile=saveFileName; + oldValue=area.getText(); + + this.setTitle(saveFileName.getName()+" - 记事本"); + statusLabel.setText(" 当前打开文件:"+saveFileName.getAbsoluteFile()); + //isSave=true; + } + catch(IOException ioException){} + } + } + else { + try{ + FileWriter fw=new FileWriter(currentFile); + BufferedWriter bfw=new BufferedWriter(fw); + bfw.write(area.getText(),0,area.getText().length()); + bfw.flush(); + fw.close(); + //isSave=true; + } + catch(IOException ioException){} + } + System.exit(0); + } + else if(exitChoose==JOptionPane.NO_OPTION){ + System.exit(0); + } + else{ + return; + } + } + }//关闭窗口时调用方法结束 + public void actionPerformed(ActionEvent e) { //新建功能 if(e.getSource()==n) { @@ -149,5 +300,20 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene - }} + }} + @Override + public void insertUpdate(DocumentEvent e) { + // TODO Auto-generated method stub + + } + @Override + public void removeUpdate(DocumentEvent e) { + // TODO Auto-generated method stub + + } + @Override + public void changedUpdate(DocumentEvent e) { + // TODO Auto-generated method stub + + } } -- Gitee From 645ca7060f19f639c6979e39821053f0ce78543b Mon Sep 17 00:00:00 2001 From: 86184 <86184@LAPTOP-H62NC2FB> Date: Thu, 3 Jun 2021 11:43:53 +0800 Subject: [PATCH 07/12] =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=AD=97=E4=BD=93?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=EF=BC=8C=E6=96=B0=E5=BB=BA=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=87=BA=E7=8E=B0Bug=EF=BC=8C=E7=BB=A7=E7=BB=AD=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/NoteLayout.java | 232 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 210 insertions(+), 22 deletions(-) diff --git a/src/NoteLayout.java b/src/NoteLayout.java index 3e812ce..ca00878 100644 --- a/src/NoteLayout.java +++ b/src/NoteLayout.java @@ -4,6 +4,8 @@ import java.io.*; import javax.swing.*; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; import javax.swing.filechooser.FileFilter; import javax.swing.undo.UndoManager; @@ -16,6 +18,8 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene JLabel statusLabel;//剪切板 + + protected UndoManager undo=new UndoManager(); //protected UndoableEditListener undoHandler=new UndoHandler(); //其他变量 @@ -96,6 +100,8 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene //设置菜单项的功能:剪切,复制,粘帖,删除功能 checkMenuItemEnabled(); + + } @@ -198,6 +204,7 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene e4.setEnabled(true); e5.setEnabled(true); } + //粘帖功能可用性判断 Transferable contents=clipBoard.getContents(this); if(contents==null) { e4.setEnabled(false); @@ -205,7 +212,7 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene else { e4.setEnabled(true); } - } + }//方法checkMenuItemEnabled()结束 //关闭窗口时调用 public void exitWindowChoose() { @@ -217,7 +224,7 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene else{ int exitChoose=JOptionPane.showConfirmDialog(this,"您的文件尚未保存,是否保存?","退出提示",JOptionPane.YES_NO_CANCEL_OPTION); if(exitChoose==JOptionPane.YES_OPTION){ //boolean isSave=false; - if(isNewFile){ + if(isNewFile){ String str=null; JFileChooser fileChooser=new JFileChooser(); fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); @@ -229,7 +236,7 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene if(result==JFileChooser.CANCEL_OPTION){ statusLabel.setText(" 您没有保存文件"); return; - } + } File saveFileName=fileChooser.getSelectedFile(); @@ -277,30 +284,211 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene } }//关闭窗口时调用方法结束 + //字体功能 + public void setFont(){ + //默认字体 + Font font = new Font("Dialog", Font.PLAIN, 12); + java.util.Enumeration keys = UIManager.getDefaults().keys(); + while (keys.hasMoreElements()) { + Object key = keys.nextElement(); + Object value = UIManager.get(key); + if (value instanceof javax.swing.plaf.FontUIResource) { + UIManager.put(key, font); + } + } + final JDialog fontDialog=new JDialog(this,"字体设置",false); + Container con=fontDialog.getContentPane(); + con.setLayout(new FlowLayout(FlowLayout.LEFT)); + JLabel fontLabel=new JLabel("字体(F):"); + fontLabel.setPreferredSize(new Dimension(100,20)); + JLabel styleLabel=new JLabel("字形(Y):"); + styleLabel.setPreferredSize(new Dimension(100,20)); + JLabel sizeLabel=new JLabel("大小(S):"); + sizeLabel.setPreferredSize(new Dimension(100,20)); + final JLabel sample=new JLabel("血狼记事本"); + final JTextField textField=new JTextField(10); + textField.setPreferredSize(new Dimension(200,20)); + final JTextField styleText=new JTextField(8); + styleText.setPreferredSize(new Dimension(200,20)); + final int style[]={Font.PLAIN,Font.BOLD,Font.ITALIC,Font.BOLD+Font.ITALIC}; + final JTextField sizeText=new JTextField(5); + sizeText.setPreferredSize(new Dimension(200,20)); + JButton okButton=new JButton("确定"); + JButton cancel=new JButton("取消"); + cancel.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent e){ + fontDialog.dispose(); + } + }); + Font currentFont=area.getFont(); + textField.setText(currentFont.getFontName()); + textField.selectAll(); + if(currentFont.getStyle()==Font.PLAIN) + styleText.setText("常规"); + else if(currentFont.getStyle()==Font.BOLD) + styleText.setText("粗体"); + else if(currentFont.getStyle()==Font.ITALIC) + styleText.setText("斜体"); + else if(currentFont.getStyle()==(Font.BOLD+Font.ITALIC)) + styleText.setText("粗斜体"); + styleText.selectAll(); + String str=String.valueOf(currentFont.getSize()); + sizeText.setText(str); + sizeText.selectAll(); + final JList fontList,styleList,sizeList; + GraphicsEnvironment ge=GraphicsEnvironment.getLocalGraphicsEnvironment(); + final String fontName[]=ge.getAvailableFontFamilyNames(); + fontList=new JList(fontName); + fontList.setFixedCellWidth(90); + fontList.setFixedCellHeight(20); + fontList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + final String fontStyle[]={"常规","粗体","斜体","粗斜体"}; + styleList=new JList(fontStyle); + styleList.setFixedCellWidth(90); + styleList.setFixedCellHeight(20); + styleList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + if(currentFont.getStyle()==Font.PLAIN) + styleList.setSelectedIndex(0); + else if(currentFont.getStyle()==Font.BOLD) + styleList.setSelectedIndex(1); + else if(currentFont.getStyle()==Font.ITALIC) + styleList.setSelectedIndex(2); + else if(currentFont.getStyle()==(Font.BOLD+Font.ITALIC)) + styleList.setSelectedIndex(3); + final String fontSize[]={"8","9","10","11","12","14","16","18","20","22","24","26","28","36","48","72"}; + sizeList=new JList(fontSize); + sizeList.setFixedCellWidth(45); + sizeList.setFixedCellHeight(20); + sizeList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + fontList.addListSelectionListener(new ListSelectionListener(){ + public void valueChanged(ListSelectionEvent event){ + textField.setText(fontName[fontList.getSelectedIndex()]); + textField.selectAll(); + Font sampleFont1=new Font(textField.getText(),style[styleList.getSelectedIndex()],Integer.parseInt(sizeText.getText())); + sample.setFont(sampleFont1); + } + }); + styleList.addListSelectionListener(new ListSelectionListener(){ + public void valueChanged(ListSelectionEvent event){ + int s=style[styleList.getSelectedIndex()]; + styleText.setText(fontStyle[s]); + styleText.selectAll(); + Font sampleFont2=new Font(textField.getText(),style[styleList.getSelectedIndex()],Integer.parseInt(sizeText.getText())); + sample.setFont(sampleFont2); + } + }); + sizeList.addListSelectionListener(new ListSelectionListener(){ + public void valueChanged(ListSelectionEvent event){ + sizeText.setText(fontSize[sizeList.getSelectedIndex()]); + sizeText.selectAll(); + Font sampleFont3=new Font(textField.getText(),style[styleList.getSelectedIndex()],Integer.parseInt(sizeText.getText())); + sample.setFont(sampleFont3); + } + }); + okButton.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent e){ + Font okFont=new Font(textField.getText(),style[styleList.getSelectedIndex()],Integer.parseInt(sizeText.getText())); + area.setFont(okFont); + fontDialog.dispose(); + } + }); + JPanel samplePanel=new JPanel(); + samplePanel.setBorder(BorderFactory.createTitledBorder("示例")); + samplePanel.add(sample); + JPanel panel1=new JPanel(); + JPanel panel2=new JPanel(); + JPanel panel3=new JPanel(); + panel2.add(textField); + panel2.add(styleText); + panel2.add(sizeText); + panel2.add(okButton); + panel3.add(new JScrollPane(fontList)); + panel3.add(new JScrollPane(styleList)); + panel3.add(new JScrollPane(sizeList)); + panel3.add(cancel); + con.add(panel1); + con.add(panel2); + con.add(panel3); + con.add(samplePanel); + fontDialog.setSize(350,340); + fontDialog.setLocation(200,200); + fontDialog.setResizable(false); + fontDialog.setVisible(true); + }//字体结束 + + public void setN() { + area.requestFocus(); + String currentValue=area.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选择文件 + JFileChooser fileChooser=new JFileChooser(); + fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); + fileChooser.setDialogTitle("另存为"); + int result=fileChooser.showSaveDialog(this); + if(result==JFileChooser.CANCEL_OPTION) { + statusLabel.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(area.getText(),0,area.getText().length()); + bfw.flush();//刷新该流的缓冲 + bfw.close(); + isNewFile=false; + currentFile=saveFileName; + oldValue=area.getText(); + this.setTitle(saveFileName.getName()+" - 血狼记事本"); + statusLabel.setText("当前打开文件:"+saveFileName.getAbsoluteFile()); + } + catch (IOException ioException) {} + } + } + if(saveChoose==JOptionPane.NO_OPTION) { + area.replaceRange("",0,area.getText().length()); + statusLabel.setText(" 新建文件"); + this.setTitle("无标题 - 血狼记事本"); + isNewFile=true; + undo.discardAllEdits(); + e1.setEnabled(false); + oldValue=area.getText(); + } + else if(saveChoose==JOptionPane.CANCEL_OPTION) { + return; + } + } + else{ + area.replaceRange("",0,area.getText().length()); + statusLabel.setText(" 新建文件"); + this.setTitle("无标题 - 记事本"); + isNewFile=true; + undo.discardAllEdits(); + e1.setEnabled(false); + oldValue=area.getText(); + } + }//新建结束 + public void actionPerformed(ActionEvent e) { //新建功能 if(e.getSource()==n) { - area.requestFocus(); - String currentValue=area.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.setDialogTitle("另存为"); - int result=fileChooser.showSaveDialog(this); - if(result==JFileChooser.CANCEL_OPTION) { - statusLabel.setText("您没有选择任何文件"); - return; - } + setN(); } - }//未完 + else if(e.getSource()==o2) { + area.requestFocus(); + setFont(); + } - - - }} + + } @Override public void insertUpdate(DocumentEvent e) { // TODO Auto-generated method stub -- Gitee From 24875621cdeb7f6b0b46bf94b20e8f88f8b4b60b Mon Sep 17 00:00:00 2001 From: 86184 <86184@LAPTOP-H62NC2FB> Date: Mon, 7 Jun 2021 23:57:41 +0800 Subject: [PATCH 08/12] =?UTF-8?q?=E6=96=B0=E5=BB=BA=E7=9A=84=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=B7=B2=E7=BB=8F=E5=AE=8C=E6=88=90=EF=BC=8C=E7=BC=96?= =?UTF-8?q?=E8=BE=91=E6=A0=8F=E7=9A=84=E5=8A=9F=E8=83=BD=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E4=B8=80=E5=8D=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/NoteLayout.java | 315 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 287 insertions(+), 28 deletions(-) diff --git a/src/NoteLayout.java b/src/NoteLayout.java index ca00878..74c2747 100644 --- a/src/NoteLayout.java +++ b/src/NoteLayout.java @@ -6,10 +6,13 @@ import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; +import javax.swing.event.UndoableEditListener; import javax.swing.filechooser.FileFilter; +import javax.swing.undo.CannotUndoException; import javax.swing.undo.UndoManager; import java.awt.datatransfer.Clipboard; +import java.awt.datatransfer.StringSelection; import java.awt.datatransfer.Transferable; public class NoteLayout extends JFrame implements ActionListener,DocumentListener{ String oldValue;//oldValue是area里面原来的文本内容,用来判断area内容是否改动,是否需要保存 @@ -21,7 +24,6 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene protected UndoManager undo=new UndoManager(); - //protected UndoableEditListener undoHandler=new UndoHandler(); //其他变量 JTextArea area=new JTextArea(); @@ -189,30 +191,6 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene area.getDocument().addDocumentListener(this); } - //设置菜单项的可用性:剪切,复制,粘帖,删除功能 - public void checkMenuItemEnabled() { - String selectText=area.getSelectedText(); - if(selectText==null) { - e2.setEnabled(false); - e3.setEnabled(false); - e4.setEnabled(false); - e5.setEnabled(false); - } - else { - e2.setEnabled(true); - e3.setEnabled(true); - e4.setEnabled(true); - e5.setEnabled(true); - } - //粘帖功能可用性判断 - Transferable contents=clipBoard.getContents(this); - if(contents==null) { - e4.setEnabled(false); - } - else { - e4.setEnabled(true); - } - }//方法checkMenuItemEnabled()结束 //关闭窗口时调用 public void exitWindowChoose() { @@ -477,17 +455,298 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene } }//新建结束 + //打开o + public void setO() { + String currentValue=area.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.setDialogTitle("另存为"); + int result=fileChooser.showSaveDialog(this); + if(result==JFileChooser.CANCEL_OPTION){ + statusLabel.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(area.getText(),0,area.getText().length()); + bfw.flush();//刷新该流的缓冲 + bfw.close(); + isNewFile=false; + currentFile=saveFileName; + oldValue=area.getText(); + this.setTitle(saveFileName.getName()+" - 记事本"); + statusLabel.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.setDialogTitle("打开文件"); + int result=fileChooser.showOpenDialog(this); + if(result==JFileChooser.CANCEL_OPTION){ + statusLabel.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); + area.setText(""); + while((str=bfr.readLine())!=null){ + area.append(str); + } + this.setTitle(fileName.getName()+" - 血狼记事本"); + statusLabel.setText(" 当前打开文件:"+fileName.getAbsoluteFile()); + fr.close(); + isNewFile=false; + currentFile=fileName; + oldValue=area.getText(); + } + catch (IOException ioException) {} + } + } + else { + return; + } + } + else{ + String str=null; + JFileChooser fileChooser=new JFileChooser(); + fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); + fileChooser.setDialogTitle("打开文件"); + int result=fileChooser.showOpenDialog(this); + if(result==JFileChooser.CANCEL_OPTION){ + statusLabel.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); + area.setText(""); + while((str=bfr.readLine())!=null) { + area.append(str); + } + this.setTitle(fileName.getName()+" - 记事本"); + statusLabel.setText(" 当前打开文件:"+fileName.getAbsoluteFile()); + fr.close(); + isNewFile=false; + currentFile=fileName; + oldValue=a.getText(); + } + catch (IOException ioException) {} + } + } + }//打开结束 + + //保存s + public void setS() { + if(isNewFile) { + String str=null; + JFileChooser fileChooser=new JFileChooser(); + fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); + fileChooser.setDialogTitle("保存"); + int result=fileChooser.showSaveDialog(this); + if(result==JFileChooser.CANCEL_OPTION) { + statusLabel.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(area.getText(),0,area.getText().length()); + bfw.flush();//刷新该流的缓冲 + bfw.close(); + isNewFile=false; + currentFile=saveFileName; + oldValue=area.getText(); + this.setTitle(saveFileName.getName()+" - 血狼记事本"); + statusLabel.setText("当前打开文件:"+saveFileName.getAbsoluteFile()); + } + catch (IOException ioException) {} + } + } + else{ + try{ + FileWriter fw=new FileWriter(currentFile); + BufferedWriter bfw=new BufferedWriter(fw); + bfw.write(area.getText(),0,area.getText().length()); + bfw.flush(); + fw.close(); + } + catch(IOException ioException) {} + } + }//保存结束 + + //另存为 + public void setA() { + String str=null; + JFileChooser fileChooser=new JFileChooser(); + fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); + fileChooser.setDialogTitle("另存为"); + int result=fileChooser.showSaveDialog(this); + if(result==JFileChooser.CANCEL_OPTION) { + statusLabel.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(area.getText(),0,area.getText().length()); + bfw.flush(); + fw.close(); + oldValue=area.getText(); + this.setTitle(saveFileName.getName()+" - 血狼记事本"); + statusLabel.setText(" 当前打开文件:"+saveFileName.getAbsoluteFile()); + } + catch(IOException ioException) {} + } + }//另存为结束 + + //退出x + public void setX() { + int exitChoose=JOptionPane.showConfirmDialog(this,"确定要退出吗?","退出提示",JOptionPane.OK_CANCEL_OPTION); + if(exitChoose==JOptionPane.OK_OPTION) { + System.exit(0); + } + else { + return; + } + }//退出结束 + + //撤销 + public void setE1() { + if(undo.canUndo()) { + try { + undo.undo(); + } + catch (CannotUndoException ex) { + System.out.println("Unable to undo:" + ex); + } + } + if(!undo.canUndo()) { + e1.setEnabled(false); + } + }//撤销结束 + + //剪辑 + public void setE2() { + String text=area.getSelectedText(); + StringSelection selection=new StringSelection(text); + clipBoard.setContents(selection,null); + area.replaceRange("",area.getSelectionStart(),area.getSelectionEnd()); + checkMenuItemEnabled();//设置剪切,复制,粘帖,删除功能的可用性 + }//剪辑结束 + + //复制 + public void setE3() { + String text=area.getSelectedText(); + StringSelection selection=new StringSelection(text); + clipBoard.setContents(selection,null); + checkMenuItemEnabled();//设置剪切,复制,粘帖,删除功能的可用性 + } + + //设置菜单项的可用性:剪切,复制,粘帖,删除功能 + public void checkMenuItemEnabled() { + String selectText=area.getSelectedText(); + if(selectText==null) { + e2.setEnabled(false); + e3.setEnabled(false); + e4.setEnabled(false); + e5.setEnabled(false); + } + else { + e2.setEnabled(true); + e3.setEnabled(true); + e4.setEnabled(true); + e5.setEnabled(true); + } + //粘帖功能可用性判断 + Transferable contents=clipBoard.getContents(this); + if(contents==null) { + e4.setEnabled(false); + } + else { + e4.setEnabled(true); + } + }//checkMenuItemEnabled()结束 + public void actionPerformed(ActionEvent e) { - //新建功能 if(e.getSource()==n) { + //新建功能 setN(); } else if(e.getSource()==o2) { + //字体 area.requestFocus(); setFont(); } - - + else if(e.getSource()==o) { + //打开 + area.requestFocus(); + setO(); + } + else if(e.getSource()==s) { + //保存 + area.requestFocus(); + setS(); + } + else if(e.getSource()==a) { + //另保存 + area.requestFocus(); + setA(); + } + else if(e.getSource()==x) { + //退出 + setX(); + } + else if(e.getSource()==e1) { + //撤销 + area.requestFocus(); + setE1(); + } + else if(e.getSource()==e2) { + //撤销 + area.requestFocus(); + setE2(); + } + else if(e.getSource()==e3) { + //复制 + area.requestFocus(); + setE3(); + } } @Override public void insertUpdate(DocumentEvent e) { -- Gitee From 327350faee4aa05adbd2725e8b4d36a4a7d2e78e Mon Sep 17 00:00:00 2001 From: 86184 <86184@LAPTOP-H62NC2FB> Date: Tue, 8 Jun 2021 10:53:38 +0800 Subject: [PATCH 09/12] =?UTF-8?q?=E5=B7=B2=E5=9F=BA=E6=9C=AC=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0=E5=A4=A7=E9=83=A8=E5=88=86=E5=8A=9F=E8=83=BD=EF=BC=8C?= =?UTF-8?q?=E6=96=B0=E5=BB=BA=EF=BC=8C=E6=92=A4=E9=94=80=E5=87=BA=E7=8E=B0?= =?UTF-8?q?bug=EF=BC=8C=E6=94=BE=E5=A4=A7=E7=BC=A9=E5=B0=8F=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E8=BF=98=E6=9C=AA=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/NoteLayout.java | 260 +++++++++++++++++++++++++++----------------- 1 file changed, 159 insertions(+), 101 deletions(-) diff --git a/src/NoteLayout.java b/src/NoteLayout.java index 74c2747..9fa7489 100644 --- a/src/NoteLayout.java +++ b/src/NoteLayout.java @@ -6,12 +6,14 @@ import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; +import javax.swing.event.UndoableEditEvent; import javax.swing.event.UndoableEditListener; import javax.swing.filechooser.FileFilter; import javax.swing.undo.CannotUndoException; import javax.swing.undo.UndoManager; import java.awt.datatransfer.Clipboard; +import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.StringSelection; import java.awt.datatransfer.Transferable; public class NoteLayout extends JFrame implements ActionListener,DocumentListener{ @@ -19,11 +21,10 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene boolean isNewFile=true;//是否新文件(未保存过的) File currentFile;//当前文件名 - JLabel statusLabel;//剪切板 + JLabel Label;//剪切板 - - - protected UndoManager undo=new UndoManager(); + UndoManager undo = new UndoManager(); + UndoableEditListener undoHandler = new UndoHandler(); //其他变量 JTextArea area=new JTextArea(); @@ -53,16 +54,15 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene e5=new JMenuItem("删除(D) "), e6=new JMenuItem("全选(A) "); - - - JMenuItem o1=new JMenuItem("自行换行(W) "), - o2=new JMenuItem("字体(F) "); + JCheckBoxMenuItem o1=new JCheckBoxMenuItem("自行换行(W) "); + //为了实现自动换行可以勾选 + JMenuItem o2=new JMenuItem("字体(F) "); JMenu sf=new JMenu("缩放(Z)"); JMenuItem v1=new JMenuItem("放大(I) "), v2=new JMenuItem("缩小(O) "), - v3=new JMenuItem("恢复默认缩小 "), - v4=new JMenuItem("状态栏(S) "); + v3=new JMenuItem("恢复默认缩小 "); + JCheckBoxMenuItem v4=new JCheckBoxMenuItem("状态栏(S) ");//同自动换行 JMenuItem h1=new JMenuItem("查看帮助(H) "), h2=new JMenuItem("关于记事本(A) "); @@ -98,12 +98,9 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene exitWindowChoose(); } }); - area.requestFocus(); - + area.requestFocus(); //设置菜单项的功能:剪切,复制,粘帖,删除功能 - checkMenuItemEnabled(); - - + checkMenuItemEnabled(); } @@ -149,6 +146,9 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene sf.add(v1); sf.add(v2); sf.add(v3); + + Label=new JLabel(" 血狼记事本状态栏"); + this.add(Label,BorderLayout.SOUTH); } //help布局 void sethelpLayout() { @@ -212,7 +212,7 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene int result=fileChooser.showSaveDialog(this); if(result==JFileChooser.CANCEL_OPTION){ - statusLabel.setText(" 您没有保存文件"); + Label.setText(" 血狼记事本状态栏:您没有保存文件"); return; } @@ -234,7 +234,7 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene oldValue=area.getText(); this.setTitle(saveFileName.getName()+" - 记事本"); - statusLabel.setText(" 当前打开文件:"+saveFileName.getAbsoluteFile()); + Label.setText(" 血狼记事本状态栏:当前打开文件:"+saveFileName.getAbsoluteFile()); //isSave=true; } catch(IOException ioException){} @@ -408,7 +408,7 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene fileChooser.setDialogTitle("另存为"); int result=fileChooser.showSaveDialog(this); if(result==JFileChooser.CANCEL_OPTION) { - statusLabel.setText("您没有选择任何文件"); + Label.setText("血狼记事本状态栏:您没有选择任何文件"); return; } File saveFileName=fileChooser.getSelectedFile(); @@ -426,14 +426,14 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene currentFile=saveFileName; oldValue=area.getText(); this.setTitle(saveFileName.getName()+" - 血狼记事本"); - statusLabel.setText("当前打开文件:"+saveFileName.getAbsoluteFile()); + Label.setText("血狼记事本状态栏:当前打开文件:"+saveFileName.getAbsoluteFile()); } catch (IOException ioException) {} } } if(saveChoose==JOptionPane.NO_OPTION) { area.replaceRange("",0,area.getText().length()); - statusLabel.setText(" 新建文件"); + Label.setText(" 血狼记事本状态栏:新建文件"); this.setTitle("无标题 - 血狼记事本"); isNewFile=true; undo.discardAllEdits(); @@ -446,7 +446,7 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene } else{ area.replaceRange("",0,area.getText().length()); - statusLabel.setText(" 新建文件"); + Label.setText(" 血狼记事本状态栏:新建文件"); this.setTitle("无标题 - 记事本"); isNewFile=true; undo.discardAllEdits(); @@ -468,7 +468,7 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene fileChooser.setDialogTitle("另存为"); int result=fileChooser.showSaveDialog(this); if(result==JFileChooser.CANCEL_OPTION){ - statusLabel.setText("您没有选择任何文件"); + Label.setText("血狼记事本状态栏:您没有选择任何文件"); return; } File saveFileName=fileChooser.getSelectedFile(); @@ -485,8 +485,8 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene isNewFile=false; currentFile=saveFileName; oldValue=area.getText(); - this.setTitle(saveFileName.getName()+" - 记事本"); - statusLabel.setText("当前打开文件:"+saveFileName.getAbsoluteFile()); + this.setTitle(saveFileName.getName()+" - 血狼记事本"); + Label.setText("当前血狼记事本状态栏:打开文件:"+saveFileName.getAbsoluteFile()); } catch (IOException ioException){} } @@ -498,7 +498,7 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene fileChooser.setDialogTitle("打开文件"); int result=fileChooser.showOpenDialog(this); if(result==JFileChooser.CANCEL_OPTION){ - statusLabel.setText("您没有选择任何文件"); + Label.setText("血狼记事本状态栏:您没有选择任何文件"); return; } File fileName=fileChooser.getSelectedFile(); @@ -514,7 +514,7 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene area.append(str); } this.setTitle(fileName.getName()+" - 血狼记事本"); - statusLabel.setText(" 当前打开文件:"+fileName.getAbsoluteFile()); + Label.setText(" 血狼记事本状态栏:当前打开文件:"+fileName.getAbsoluteFile()); fr.close(); isNewFile=false; currentFile=fileName; @@ -534,7 +534,7 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene fileChooser.setDialogTitle("打开文件"); int result=fileChooser.showOpenDialog(this); if(result==JFileChooser.CANCEL_OPTION){ - statusLabel.setText(" 您没有选择任何文件 "); + Label.setText(" 血狼记事本状态栏:您没有选择任何文件 "); return; } File fileName=fileChooser.getSelectedFile(); @@ -549,8 +549,8 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene while((str=bfr.readLine())!=null) { area.append(str); } - this.setTitle(fileName.getName()+" - 记事本"); - statusLabel.setText(" 当前打开文件:"+fileName.getAbsoluteFile()); + this.setTitle(fileName.getName()+" - 血狼记事本"); + Label.setText(" 血狼记事本状态栏:当前打开文件:"+fileName.getAbsoluteFile()); fr.close(); isNewFile=false; currentFile=fileName; @@ -570,7 +570,7 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene fileChooser.setDialogTitle("保存"); int result=fileChooser.showSaveDialog(this); if(result==JFileChooser.CANCEL_OPTION) { - statusLabel.setText("您没有选择任何文件"); + Label.setText("血狼记事本状态栏:您没有选择任何文件"); return; } File saveFileName=fileChooser.getSelectedFile(); @@ -588,7 +588,7 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene currentFile=saveFileName; oldValue=area.getText(); this.setTitle(saveFileName.getName()+" - 血狼记事本"); - statusLabel.setText("当前打开文件:"+saveFileName.getAbsoluteFile()); + Label.setText("血狼记事本状态栏:当前打开文件:"+saveFileName.getAbsoluteFile()); } catch (IOException ioException) {} } @@ -613,7 +613,7 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene fileChooser.setDialogTitle("另存为"); int result=fileChooser.showSaveDialog(this); if(result==JFileChooser.CANCEL_OPTION) { - statusLabel.setText(" 您没有选择任何文件"); + Label.setText(" 血狼记事本状态栏:您没有选择任何文件"); return; } File saveFileName=fileChooser.getSelectedFile(); @@ -629,7 +629,7 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene fw.close(); oldValue=area.getText(); this.setTitle(saveFileName.getName()+" - 血狼记事本"); - statusLabel.setText(" 当前打开文件:"+saveFileName.getAbsoluteFile()); + Label.setText(" 血狼记事本状态栏:当前打开文件:"+saveFileName.getAbsoluteFile()); } catch(IOException ioException) {} } @@ -648,6 +648,7 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene //撤销 public void setE1() { + area.requestFocusInWindow(); if(undo.canUndo()) { try { undo.undo(); @@ -661,14 +662,14 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene } }//撤销结束 - //剪辑 + //剪切 public void setE2() { String text=area.getSelectedText(); StringSelection selection=new StringSelection(text); clipBoard.setContents(selection,null); area.replaceRange("",area.getSelectionStart(),area.getSelectionEnd()); checkMenuItemEnabled();//设置剪切,复制,粘帖,删除功能的可用性 - }//剪辑结束 + }//剪切结束 //复制 public void setE3() { @@ -676,23 +677,52 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene StringSelection selection=new StringSelection(text); clipBoard.setContents(selection,null); checkMenuItemEnabled();//设置剪切,复制,粘帖,删除功能的可用性 - } + }//复制结束 + + //粘贴 + public void setE4() { + Transferable contents=clipBoard.getContents(this); + if(contents==null) + return; + String text=""; + try { + text=(String)contents.getTransferData(DataFlavor.stringFlavor); + } + catch (Exception exception) {} + area.replaceRange(text,area.getSelectionStart(),area.getSelectionEnd()); + checkMenuItemEnabled(); + }//粘贴结束 + + //删除 + public void setE5() { + area.replaceRange("",area.getSelectionStart(),area.getSelectionEnd()); + checkMenuItemEnabled(); + }//删除结束 + + //全选 + public void setE6() { + area.selectAll(); + }//全选结束 //设置菜单项的可用性:剪切,复制,粘帖,删除功能 public void checkMenuItemEnabled() { String selectText=area.getSelectedText(); - if(selectText==null) { - e2.setEnabled(false); - e3.setEnabled(false); - e4.setEnabled(false); - e5.setEnabled(false); - } - else { - e2.setEnabled(true); - e3.setEnabled(true); - e4.setEnabled(true); - e5.setEnabled(true); - } +// if(selectText==null) { +// e2.setEnabled(false); +// e3.setEnabled(false); +// e4.setEnabled(false); +// e5.setEnabled(false); +// } +// else { +// e2.setEnabled(true); +// e3.setEnabled(true); +// e4.setEnabled(true); +// e5.setEnabled(true); +// } + e2.setEnabled(true); + e3.setEnabled(true); + e4.setEnabled(true); + e5.setEnabled(true); //粘帖功能可用性判断 Transferable contents=clipBoard.getContents(this); if(contents==null) { @@ -702,65 +732,93 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene e4.setEnabled(true); } }//checkMenuItemEnabled()结束 + + //自动换行 + public void setO1() { + if(o1.getState()) + area.setLineWrap(true); + else + area.setLineWrap(false); + } + + //状态栏 + public void setV4() { + if(v4.getState()) + Label.setVisible(true); + else + Label.setVisible(false); + } - public void actionPerformed(ActionEvent e) { - if(e.getSource()==n) { - //新建功能 - setN(); + //查看帮助 + public void setH1() { + String str="血狼笔记本\n状态栏暂时只显示当前文件状态"; + JOptionPane.showMessageDialog(this,str,"血狼记事本-查看帮助",JOptionPane.INFORMATION_MESSAGE); } - else if(e.getSource()==o2) { - //字体 - area.requestFocus(); - setFont(); - } - else if(e.getSource()==o) { - //打开 - area.requestFocus(); - setO(); - } - else if(e.getSource()==s) { - //保存 - area.requestFocus(); - setS(); - } - else if(e.getSource()==a) { - //另保存 - area.requestFocus(); - setA(); - } - else if(e.getSource()==x) { - //退出 - setX(); - } - else if(e.getSource()==e1) { - //撤销 + + //关于记事本 + public void setH2() { + String str="****************************\n" + +"name:血狼笔记本\n" + + "author:李上俊\n" + + "Writing time:2021-6\n" + + "speciality:IMIS\n" + + "class:2\n" + +"****************************"; + JOptionPane.showMessageDialog(this,str,"血狼记事本-关于记事本",JOptionPane.INFORMATION_MESSAGE); + } + + public void actionPerformed(ActionEvent e) { area.requestFocus(); - setE1(); + if(e.getSource()==n) + setN();//新建功能 + else if(e.getSource()==o2) + setFont();//字体 + else if(e.getSource()==o) + setO();//打开 + else if(e.getSource()==s) + setS();//保存 + else if(e.getSource()==a) + setA();//另保存 + else if(e.getSource()==x) + setX();//退出 + else if(e.getSource()==e1) + setE1();//撤销 + else if(e.getSource()==e2) + setE2();//剪切 + else if(e.getSource()==e3) + setE3();//复制 + else if(e.getSource()==e4) + setE4();//粘贴 + else if(e.getSource()==e5) + setE5();//删除 + else if(e.getSource()==e6) + setE6();//全选 + else if(e.getSource()==o1) + setO1();//自动换行 + else if(e.getSource()==v4) + setV4(); + else if(e.getSource()==h1) + setH1(); + else if(e.getSource()==h2) + setH2(); + } + //实现DocumentListener接口中的方法(与撤销操作有关) + public void removeUpdate(DocumentEvent e) { + e1.setEnabled(true); } - else if(e.getSource()==e2) { - //撤销 - area.requestFocus(); - setE2(); + public void insertUpdate(DocumentEvent e) { + e1.setEnabled(true); } - else if(e.getSource()==e3) { - //复制 - area.requestFocus(); - setE3(); + + public void changedUpdate(DocumentEvent e) { + e1.setEnabled(true); } + + //实现接口UndoableEditListener的类UndoHandler(与撤销操作有关) + class UndoHandler implements UndoableEditListener{ + public void undoableEditHappened(UndoableEditEvent uee) { + undo.addEdit(uee.getEdit()); } - @Override - public void insertUpdate(DocumentEvent e) { - // TODO Auto-generated method stub - - } - @Override - public void removeUpdate(DocumentEvent e) { - // TODO Auto-generated method stub - } - @Override - public void changedUpdate(DocumentEvent e) { - // TODO Auto-generated method stub - - } + } -- Gitee From c4ba6c3cc9945f10e204ed306f17d152c5ca7af8 Mon Sep 17 00:00:00 2001 From: 86184 <86184@LAPTOP-H62NC2FB> Date: Tue, 8 Jun 2021 11:44:38 +0800 Subject: [PATCH 10/12] =?UTF-8?q?=E7=8A=B6=E6=80=81=E6=A0=8F=E4=BB=A5?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=BA=E5=87=A0=E8=A1=8C=E5=87=A0=E5=88=97?= =?UTF-8?q?=EF=BC=8C=E5=AD=97=E4=BD=93=E7=BC=A9=E6=94=BE=E6=9A=82=E6=97=B6?= =?UTF-8?q?=E4=B8=8D=E5=BC=84=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/NoteLayout.java | 78 +++++++++++++++------------------------------ 1 file changed, 26 insertions(+), 52 deletions(-) diff --git a/src/NoteLayout.java b/src/NoteLayout.java index 9fa7489..69fa566 100644 --- a/src/NoteLayout.java +++ b/src/NoteLayout.java @@ -58,10 +58,10 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene //为了实现自动换行可以勾选 JMenuItem o2=new JMenuItem("字体(F) "); - JMenu sf=new JMenu("缩放(Z)"); - JMenuItem v1=new JMenuItem("放大(I) "), - v2=new JMenuItem("缩小(O) "), - v3=new JMenuItem("恢复默认缩小 "); +// JMenu sf=new JMenu("缩放(Z)"); +// JMenuItem v1=new JMenuItem("放大(I) "), +// v2=new JMenuItem("缩小(O) "), +// v3=new JMenuItem("恢复默认缩小 "); JCheckBoxMenuItem v4=new JCheckBoxMenuItem("状态栏(S) ");//同自动换行 JMenuItem h1=new JMenuItem("查看帮助(H) "), @@ -141,11 +141,11 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene } //view布局 void setviewLayout() { - view.add(sf); +// view.add(sf); view.add(v4); - sf.add(v1); - sf.add(v2); - sf.add(v3); +// sf.add(v1); +// sf.add(v2); +// sf.add(v3); Label=new JLabel(" 血狼记事本状态栏"); this.add(Label,BorderLayout.SOUTH); @@ -178,9 +178,9 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene o2.addActionListener(this); //view - v1.addActionListener(this); - v2.addActionListener(this); - v3.addActionListener(this); +// v1.addActionListener(this); +// v2.addActionListener(this); +// v3.addActionListener(this); v4.addActionListener(this); //help @@ -210,11 +210,6 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene fileChooser.setDialogTitle("另存为"); int result=fileChooser.showSaveDialog(this); - - if(result==JFileChooser.CANCEL_OPTION){ - Label.setText(" 血狼记事本状态栏:您没有保存文件"); - return; - } File saveFileName=fileChooser.getSelectedFile(); @@ -234,8 +229,6 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene oldValue=area.getText(); this.setTitle(saveFileName.getName()+" - 记事本"); - Label.setText(" 血狼记事本状态栏:当前打开文件:"+saveFileName.getAbsoluteFile()); - //isSave=true; } catch(IOException ioException){} } @@ -407,10 +400,6 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); fileChooser.setDialogTitle("另存为"); int result=fileChooser.showSaveDialog(this); - if(result==JFileChooser.CANCEL_OPTION) { - Label.setText("血狼记事本状态栏:您没有选择任何文件"); - return; - } File saveFileName=fileChooser.getSelectedFile(); if(saveFileName==null ||saveFileName.getName().equals("")) { JOptionPane.showMessageDialog(this,"不合法的文件名","不合法的文件名",JOptionPane.ERROR_MESSAGE); @@ -426,14 +415,12 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene currentFile=saveFileName; oldValue=area.getText(); this.setTitle(saveFileName.getName()+" - 血狼记事本"); - Label.setText("血狼记事本状态栏:当前打开文件:"+saveFileName.getAbsoluteFile()); - } + } catch (IOException ioException) {} } } if(saveChoose==JOptionPane.NO_OPTION) { area.replaceRange("",0,area.getText().length()); - Label.setText(" 血狼记事本状态栏:新建文件"); this.setTitle("无标题 - 血狼记事本"); isNewFile=true; undo.discardAllEdits(); @@ -446,7 +433,6 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene } else{ area.replaceRange("",0,area.getText().length()); - Label.setText(" 血狼记事本状态栏:新建文件"); this.setTitle("无标题 - 记事本"); isNewFile=true; undo.discardAllEdits(); @@ -467,10 +453,6 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); fileChooser.setDialogTitle("另存为"); int result=fileChooser.showSaveDialog(this); - if(result==JFileChooser.CANCEL_OPTION){ - Label.setText("血狼记事本状态栏:您没有选择任何文件"); - return; - } File saveFileName=fileChooser.getSelectedFile(); if(saveFileName==null || saveFileName.getName().equals("")) { JOptionPane.showMessageDialog(this,"不合法的文件名","不合法的文件名",JOptionPane.ERROR_MESSAGE); @@ -486,7 +468,6 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene currentFile=saveFileName; oldValue=area.getText(); this.setTitle(saveFileName.getName()+" - 血狼记事本"); - Label.setText("当前血狼记事本状态栏:打开文件:"+saveFileName.getAbsoluteFile()); } catch (IOException ioException){} } @@ -497,10 +478,6 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); fileChooser.setDialogTitle("打开文件"); int result=fileChooser.showOpenDialog(this); - if(result==JFileChooser.CANCEL_OPTION){ - Label.setText("血狼记事本状态栏:您没有选择任何文件"); - return; - } File fileName=fileChooser.getSelectedFile(); if(fileName==null || fileName.getName().equals("")){ JOptionPane.showMessageDialog(this,"不合法的文件名","不合法的文件名",JOptionPane.ERROR_MESSAGE); @@ -514,7 +491,6 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene area.append(str); } this.setTitle(fileName.getName()+" - 血狼记事本"); - Label.setText(" 血狼记事本状态栏:当前打开文件:"+fileName.getAbsoluteFile()); fr.close(); isNewFile=false; currentFile=fileName; @@ -533,10 +509,6 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); fileChooser.setDialogTitle("打开文件"); int result=fileChooser.showOpenDialog(this); - if(result==JFileChooser.CANCEL_OPTION){ - Label.setText(" 血狼记事本状态栏:您没有选择任何文件 "); - return; - } File fileName=fileChooser.getSelectedFile(); if(fileName==null || fileName.getName().equals("")){ JOptionPane.showMessageDialog(this,"不合法的文件名","不合法的文件名",JOptionPane.ERROR_MESSAGE); @@ -550,7 +522,6 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene area.append(str); } this.setTitle(fileName.getName()+" - 血狼记事本"); - Label.setText(" 血狼记事本状态栏:当前打开文件:"+fileName.getAbsoluteFile()); fr.close(); isNewFile=false; currentFile=fileName; @@ -569,10 +540,6 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); fileChooser.setDialogTitle("保存"); int result=fileChooser.showSaveDialog(this); - if(result==JFileChooser.CANCEL_OPTION) { - Label.setText("血狼记事本状态栏:您没有选择任何文件"); - return; - } File saveFileName=fileChooser.getSelectedFile(); if(saveFileName==null || saveFileName.getName().equals("")) { JOptionPane.showMessageDialog(this,"不合法的文件名","不合法的文件名",JOptionPane.ERROR_MESSAGE); @@ -588,7 +555,6 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene currentFile=saveFileName; oldValue=area.getText(); this.setTitle(saveFileName.getName()+" - 血狼记事本"); - Label.setText("血狼记事本状态栏:当前打开文件:"+saveFileName.getAbsoluteFile()); } catch (IOException ioException) {} } @@ -612,10 +578,6 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); fileChooser.setDialogTitle("另存为"); int result=fileChooser.showSaveDialog(this); - if(result==JFileChooser.CANCEL_OPTION) { - Label.setText(" 血狼记事本状态栏:您没有选择任何文件"); - return; - } File saveFileName=fileChooser.getSelectedFile(); if(saveFileName==null||saveFileName.getName().equals("")) { JOptionPane.showMessageDialog(this,"不合法的文件名","不合法的文件名",JOptionPane.ERROR_MESSAGE); @@ -629,7 +591,6 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene fw.close(); oldValue=area.getText(); this.setTitle(saveFileName.getName()+" - 血狼记事本"); - Label.setText(" 血狼记事本状态栏:当前打开文件:"+saveFileName.getAbsoluteFile()); } catch(IOException ioException) {} } @@ -743,6 +704,14 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene //状态栏 public void setV4() { + try { + int position = area.getCaretPosition();//返回当前位置 + int line = area.getLineOfOffset(position);//当前行 + int column = position - area.getLineStartOffset(line);//当前列 + line += 1; + Label.setText("血狼记事本-"+" 第 " + line + " 行, 第 " + (column+1)+" 列 "); + } + catch(Exception ex) { } if(v4.getState()) Label.setVisible(true); else @@ -751,7 +720,12 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene //查看帮助 public void setH1() { - String str="血狼笔记本\n状态栏暂时只显示当前文件状态"; + String str="血狼笔记本实现功能:\n" + +"文件:新建,打开,保存,另存为,退出\n" + +"编辑:撤销,剪切,复制,粘贴,删除,全选\n" + + "格式:自动换行,字体\n" + +"查看:状态栏\n" + +"帮助:查看帮助,关于记事本"; JOptionPane.showMessageDialog(this,str,"血狼记事本-查看帮助",JOptionPane.INFORMATION_MESSAGE); } -- Gitee From b098e3e393b12c524ae9a3899a6a761715f9a2ec Mon Sep 17 00:00:00 2001 From: 86184 <86184@LAPTOP-H62NC2FB> Date: Wed, 9 Jun 2021 20:19:19 +0800 Subject: [PATCH 11/12] =?UTF-8?q?=E5=B7=B2=E4=BF=AE=E6=94=B9=E6=92=A4?= =?UTF-8?q?=E9=94=80=E7=9A=84bug=EF=BC=8C=E5=A2=9E=E5=8A=A0=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E6=97=B6=E9=97=B4=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/NoteLayout.java | 106 ++++++++++++++++++++++++-------------------- 1 file changed, 57 insertions(+), 49 deletions(-) diff --git a/src/NoteLayout.java b/src/NoteLayout.java index 69fa566..69fb35f 100644 --- a/src/NoteLayout.java +++ b/src/NoteLayout.java @@ -1,6 +1,10 @@ import java.awt.*; import java.awt.event.*; import java.io.*; +import java.sql.Date; +import java.util.Calendar; +import java.util.Calendar.*; + import javax.swing.*; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; @@ -11,7 +15,6 @@ import javax.swing.event.UndoableEditListener; import javax.swing.filechooser.FileFilter; import javax.swing.undo.CannotUndoException; import javax.swing.undo.UndoManager; - import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.StringSelection; @@ -23,7 +26,7 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene JLabel Label;//剪切板 - UndoManager undo = new UndoManager(); + UndoManager undo = new UndoManager();//撤销 UndoableEditListener undoHandler = new UndoHandler(); //其他变量 @@ -47,12 +50,13 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene /*分别是新建,打开,保存,另存为,退出*/ - JMenuItem e1=new JMenuItem("撤销(U) "), - e2=new JMenuItem("剪切(T) "), - e3=new JMenuItem("复制(C) "), - e4=new JMenuItem("粘贴(P) "), - e5=new JMenuItem("删除(D) "), - e6=new JMenuItem("全选(A) "); + JMenuItem e1=new JMenuItem("撤销(U) "), + e2=new JMenuItem("剪切(T) "), + e3=new JMenuItem("复制(C) "), + e4=new JMenuItem("粘贴(P) "), + e5=new JMenuItem("删除(L) "), + e6=new JMenuItem("全选(A) "), + e7=new JMenuItem("时间/日期(D) "); JCheckBoxMenuItem o1=new JCheckBoxMenuItem("自行换行(W) "); //为了实现自动换行可以勾选 @@ -99,11 +103,9 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene } }); area.requestFocus(); - //设置菜单项的功能:剪切,复制,粘帖,删除功能 - checkMenuItemEnabled(); + checkMenuItemEnabled(); //设置菜单项的功能:剪切,复制,粘帖,删除功能 } - //file的布局 void setFileLayout() { n.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_MASK)); @@ -133,6 +135,7 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene edit.add(e4); edit.add(e5); edit.add(e6); + edit.add(e7); } //format布局 void setformatLayout(){ @@ -146,7 +149,6 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene // sf.add(v1); // sf.add(v2); // sf.add(v3); - Label=new JLabel(" 血狼记事本状态栏"); this.add(Label,BorderLayout.SOUTH); } @@ -167,11 +169,16 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene //edit e1.addActionListener(this); + //编辑区注册事件监听(与撤销操作有关) + area.getDocument().addUndoableEditListener(undoHandler); + area.getDocument().addDocumentListener(this); + e2.addActionListener(this); e3.addActionListener(this); e4.addActionListener(this); e5.addActionListener(this); e6.addActionListener(this); + e7.addActionListener(this); //format o1.addActionListener(this); @@ -194,20 +201,20 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene //关闭窗口时调用 public void exitWindowChoose() { - area.requestFocus(); + area.requestFocus(); String currentValue=area.getText(); if(currentValue.equals(oldValue)==true) { - System.exit(0); + System.exit(0); } else{ - int exitChoose=JOptionPane.showConfirmDialog(this,"您的文件尚未保存,是否保存?","退出提示",JOptionPane.YES_NO_CANCEL_OPTION); - if(exitChoose==JOptionPane.YES_OPTION){ //boolean isSave=false; - if(isNewFile){ - String str=null; - JFileChooser fileChooser=new JFileChooser(); - fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); - fileChooser.setApproveButtonText("确定"); - fileChooser.setDialogTitle("另存为"); + int exitChoose=JOptionPane.showConfirmDialog(this,"您的文件尚未保存,是否保存?","退出提示",JOptionPane.YES_NO_CANCEL_OPTION); + if(exitChoose==JOptionPane.YES_OPTION){ //boolean isSave=false; + if(isNewFile){ + String str=null; + JFileChooser fileChooser=new JFileChooser(); + fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);//只能选文件 + fileChooser.setApproveButtonText("确定"); + fileChooser.setDialogTitle("另存为"); int result=fileChooser.showSaveDialog(this); @@ -263,8 +270,8 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene while (keys.hasMoreElements()) { Object key = keys.nextElement(); Object value = UIManager.get(key); - if (value instanceof javax.swing.plaf.FontUIResource) { - UIManager.put(key, font); + if (value instanceof javax.swing.plaf.FontUIResource) { + UIManager.put(key, font); } } final JDialog fontDialog=new JDialog(this,"字体设置",false); @@ -609,7 +616,6 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene //撤销 public void setE1() { - area.requestFocusInWindow(); if(undo.canUndo()) { try { undo.undo(); @@ -618,9 +624,7 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene System.out.println("Unable to undo:" + ex); } } - if(!undo.canUndo()) { - e1.setEnabled(false); - } + }//撤销结束 //剪切 @@ -665,21 +669,22 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene area.selectAll(); }//全选结束 + //时间/日期 + public void setE7() { + Calendar calendar=Calendar.getInstance(); + //calendar.setTime(new Date()); + int year=calendar.get(Calendar.YEAR), + month=calendar.get(Calendar.MONTH), + day=calendar.get(Calendar.DAY_OF_MONTH), + hour=calendar.get(Calendar.HOUR_OF_DAY), + min=calendar.get(Calendar.MINUTE), + second=calendar.get(Calendar.SECOND); + area.append("血狼记事本提醒您,现在是北京时间:"+year+"-"+month+"-"+day+" "+hour+":"+min+":"+second); + } + //设置菜单项的可用性:剪切,复制,粘帖,删除功能 public void checkMenuItemEnabled() { String selectText=area.getSelectedText(); -// if(selectText==null) { -// e2.setEnabled(false); -// e3.setEnabled(false); -// e4.setEnabled(false); -// e5.setEnabled(false); -// } -// else { -// e2.setEnabled(true); -// e3.setEnabled(true); -// e4.setEnabled(true); -// e5.setEnabled(true); -// } e2.setEnabled(true); e3.setEnabled(true); e4.setEnabled(true); @@ -706,12 +711,14 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene public void setV4() { try { int position = area.getCaretPosition();//返回当前位置 - int line = area.getLineOfOffset(position);//当前行 + int line = area.getLineOfOffset(position);//当前行 int column = position - area.getLineStartOffset(line);//当前列 line += 1; - Label.setText("血狼记事本-"+" 第 " + line + " 行, 第 " + (column+1)+" 列 "); + column+=1; + String str="血狼记事本-"+" 第" + line + "行, 第" + column+"列 "; + Label.setText(str); } - catch(Exception ex) { } + catch(Exception ex) {} if(v4.getState()) Label.setVisible(true); else @@ -767,6 +774,8 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene setE5();//删除 else if(e.getSource()==e6) setE6();//全选 + else if(e.getSource()==e7) + setE7();//时间/日期 else if(e.getSource()==o1) setO1();//自动换行 else if(e.getSource()==v4) @@ -787,12 +796,11 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene public void changedUpdate(DocumentEvent e) { e1.setEnabled(true); } - //实现接口UndoableEditListener的类UndoHandler(与撤销操作有关) - class UndoHandler implements UndoableEditListener{ - public void undoableEditHappened(UndoableEditEvent uee) { - undo.addEdit(uee.getEdit()); + class UndoHandler implements UndoableEditListener{ + public void undoableEditHappened(UndoableEditEvent e) { + undo.addEdit(e.getEdit()); + } } - } - } + -- Gitee From 9c3bcc7f678d7bc2993fdf01e785928c98a7a86c Mon Sep 17 00:00:00 2001 From: 86184 <86184@LAPTOP-H62NC2FB> Date: Thu, 10 Jun 2021 12:20:47 +0800 Subject: [PATCH 12/12] =?UTF-8?q?=E5=81=9A=E4=BA=86=E6=9C=80=E5=90=8E?= =?UTF-8?q?=E4=B8=80=E7=82=B9=E4=BF=AE=E6=94=B9=EF=BC=8C=E6=9C=80=E7=BB=88?= =?UTF-8?q?=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/NoteLayout.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/NoteLayout.java b/src/NoteLayout.java index 69fb35f..2251991 100644 --- a/src/NoteLayout.java +++ b/src/NoteLayout.java @@ -729,7 +729,7 @@ public class NoteLayout extends JFrame implements ActionListener,DocumentListene public void setH1() { String str="血狼笔记本实现功能:\n" +"文件:新建,打开,保存,另存为,退出\n" - +"编辑:撤销,剪切,复制,粘贴,删除,全选\n" + +"编辑:撤销,剪切,复制,粘贴,删除,全选,时间/日期\n" + "格式:自动换行,字体\n" +"查看:状态栏\n" +"帮助:查看帮助,关于记事本"; -- Gitee