From 5f26a4e9b55266bc3e753edb919894059a6328ca Mon Sep 17 00:00:00 2001 From: milkyway Date: Tue, 8 Jun 2021 19:18:35 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E7=AC=AC=E4=B8=80=E6=AC=A1=E6=8F=90?= =?UTF-8?q?=E4=BA=A4=EF=BC=9A=E5=AE=8C=E6=88=90=E6=9C=80=E4=BD=8E=E8=A6=81?= =?UTF-8?q?=E6=B1=82=E7=9A=84=E6=96=87=E6=9C=AC=E7=BC=96=E8=BE=91=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/javademo/AboutTextEditor.java | 20 ++ src/javademo/EditorWindow.java | 399 ++++++++++++++++++++++++++++++ src/javademo/LookHelp.java | 29 +++ src/javademo/MainClass.java | 12 + src/javademo/SetFont.java | 125 ++++++++++ 5 files changed, 585 insertions(+) create mode 100644 src/javademo/AboutTextEditor.java create mode 100644 src/javademo/EditorWindow.java create mode 100644 src/javademo/LookHelp.java create mode 100644 src/javademo/MainClass.java create mode 100644 src/javademo/SetFont.java diff --git a/src/javademo/AboutTextEditor.java b/src/javademo/AboutTextEditor.java new file mode 100644 index 0000000..f498ef7 --- /dev/null +++ b/src/javademo/AboutTextEditor.java @@ -0,0 +1,20 @@ +package javademo; +import javax.swing.*; +public class AboutTextEditor extends JFrame{ + /** + * + */ + private static final long serialVersionUID = 4736295741120264846L; + + public AboutTextEditor(){ + super.setTitle("关于记事本"); + this.setVisible(true); + this.setSize(400, 200); + this.setLocation(200,300); + this.setDefaultCloseOperation(DISPOSE_ON_CLOSE); + JPanel panel = new JPanel(); + this.add(panel); + JLabel label = new JLabel("简单文本编辑器 scau202025710308"); + panel.add(label); + } +} diff --git a/src/javademo/EditorWindow.java b/src/javademo/EditorWindow.java new file mode 100644 index 0000000..0d9227f --- /dev/null +++ b/src/javademo/EditorWindow.java @@ -0,0 +1,399 @@ +package javademo; +import javax.swing.*; +import javax.swing.undo.*; +import java.awt.*; +import java.awt.event.*; +import java.io.*; +public class EditorWindow extends JFrame implements ActionListener{ + /** + * + */ + private static final long serialVersionUID = 2368117138424502007L; + JTextArea textArea; + JFileChooser fileDialog; + FileReader fileReader; + FileWriter fileWriter; + JMenuItem itemF1,itemF2,itemF3,itemF4,itemF5,itemE1,itemE2,itemE3,itemE4,itemE5, + item1,item2,item3,item4,item5,itemO2,itemH1,itemH2; + JCheckBoxMenuItem itemO1,itemV; + JLabel label; + String oldValue=null;//原始文本默认是空 + boolean isNewFile=true;//默认是新文件 + File currentFile; + UndoManager undomg=new UndoManager(); + EditorWindow() { + init(); + } + void init(){ + //设置文本编辑区的布局 + textArea=new JTextArea(); + JScrollPane scroll=new JScrollPane(textArea); + label= new JLabel("状态栏"); + this.add(label,BorderLayout.SOUTH); + this.add(scroll,BorderLayout.CENTER); + //菜单条 + JMenuBar menubar=new JMenuBar(); + this.setJMenuBar(menubar); + //菜单及其快捷键 + JMenu menu1=new JMenu("文件(F)"); + JMenu menu2=new JMenu("编辑(E)"); + JMenu menu3=new JMenu("格式(O)"); + JMenu menu4=new JMenu("查看(V)"); + JMenu menu5=new JMenu("帮助(H)"); + menubar.add(menu1); + menubar.add(menu2); + menubar.add(menu3); + menubar.add(menu4); + menubar.add(menu5); + menu1.setMnemonic('F'); + menu2.setMnemonic('E'); + menu3.setMnemonic('O'); + menu4.setMnemonic('V'); + menu5.setMnemonic('H'); + //菜单‘文件’内菜单项及其快捷键 + itemF1=new JMenuItem("新建(N)"); + itemF2=new JMenuItem("打开(O)"); + itemF3=new JMenuItem("保存(S)"); + itemF4=new JMenuItem("另存为(C)"); + itemF5=new JMenuItem("退出(X)"); + itemF1.addActionListener(this); + itemF2.addActionListener(this); + itemF3.addActionListener(this); + itemF4.addActionListener(this); + itemF5.addActionListener(this); + itemF1.setAccelerator(KeyStroke.getKeyStroke("control N")); + itemF2.setAccelerator(KeyStroke.getKeyStroke("control O")); + itemF3.setAccelerator(KeyStroke.getKeyStroke("control S")); + itemF4.setAccelerator(KeyStroke.getKeyStroke("control shift S")); + itemF1.setMnemonic('N'); + itemF2.setMnemonic('O'); + itemF2.setMnemonic('S'); + itemF2.setMnemonic('C'); + itemF5.setMnemonic('X'); + menu1.add(itemF1); + menu1.add(itemF2); + menu1.add(itemF3); + menu1.add(itemF4); + menu1.addSeparator(); + menu1.add(itemF5); + //菜单‘编辑’内菜单项及其快捷键 + itemE1=new JMenuItem("撤销(U)"); + itemE2=new JMenuItem("剪切(T)"); + itemE3=new JMenuItem("复制(C)"); + itemE4=new JMenuItem("粘贴(P)"); + itemE5=new JMenuItem("删除(L)"); + itemE1.addActionListener(this); + itemE2.addActionListener(this); + itemE3.addActionListener(this); + itemE4.addActionListener(this); + itemE5.addActionListener(this); + itemE1.setAccelerator(KeyStroke.getKeyStroke("control Z")); + itemE2.setAccelerator(KeyStroke.getKeyStroke("control X")); + itemE3.setAccelerator(KeyStroke.getKeyStroke("control C")); + itemE4.setAccelerator(KeyStroke.getKeyStroke("control V")); + itemE5.setAccelerator(KeyStroke.getKeyStroke("Del")); + itemE1.setMnemonic('U'); + itemE2.setMnemonic('T'); + itemE3.setMnemonic('C'); + itemE4.setMnemonic('P'); + itemE5.setMnemonic('L'); + menu2.add(itemE1); + menu2.add(itemE2); + menu2.add(itemE3); + menu2.add(itemE4); + menu2.add(itemE5); + //菜单‘格式’内菜单项及其快捷键 + itemO1=new JCheckBoxMenuItem("自动换行(W)"); + itemO2=new JMenuItem("字体(F)"); + itemO1.addActionListener(this); + itemO2.addActionListener(this); + itemO1.setMnemonic('W'); + itemO2.setMnemonic('F'); + menu3.add(itemO1); + menu3.add(itemO2); + //菜单‘查看’内菜单项及其快捷键 + itemV=new JCheckBoxMenuItem("状态栏(S)",true); + itemV.addActionListener(this); + itemV.setMnemonic('S'); + menu4.add(itemV); + //菜单‘帮助’内菜单项及其快捷键 + itemH1=new JMenuItem("查看帮助(H)"); + itemH2=new JMenuItem("关于记事本(A)"); + itemH1.addActionListener(this); + itemH2.addActionListener(this); + itemH1.setMnemonic('H'); + itemH2.setMnemonic('A'); + menu5.add(itemH1); + menu5.add(itemH2); + + //右键弹出菜单 + JPopupMenu popup=new JPopupMenu(); + JMenuItem item1=new JMenuItem("撤销(U)"); + JMenuItem item2=new JMenuItem("剪切(T)"); + JMenuItem item3=new JMenuItem("复制(C)"); + JMenuItem item4=new JMenuItem("粘贴(P)"); + JMenuItem item5=new JMenuItem("删除(L)"); + popup.add(item1); + popup.add(item2); + popup.add(item3); + popup.add(item4); + popup.add(item5); + textArea.getDocument().addUndoableEditListener(undomg); + item1.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if(undomg.canUndo()) { + undomg.undo(); + } + else { + JOptionPane.showMessageDialog(null, "无法撤销"); + } + } + }); + item2.addActionListener(new ActionListener(){ + @Override + public void actionPerformed(ActionEvent e){ + textArea.cut(); + } + }); + item3.addActionListener(new ActionListener(){ + @Override + public void actionPerformed(ActionEvent e){ + textArea.copy(); + } + }); + item4.addActionListener(new ActionListener(){ + @Override + public void actionPerformed(ActionEvent e){ + textArea.paste(); + } + }); + item5.addActionListener(new ActionListener(){ + @Override + public void actionPerformed(ActionEvent e){ + StringBuffer tmp = new StringBuffer (textArea.getText()); + int start = textArea.getSelectionStart(); + int len = textArea.getSelectedText().length(); + tmp.delete( start , start+len); + textArea.setText(tmp.toString()); + } + }); + + textArea.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + if(e.getButton()==MouseEvent.BUTTON3) { + popup.show(e.getComponent(), e.getX(),e.getY()); + } + } + }); + } + + public void actionPerformed(ActionEvent e){ + //新建功能 + if(e.getSource()==itemF1){ + String currentValue=textArea.getText(); + boolean isTextChange=(currentValue.equals(oldValue))?false:true; + if(isTextChange) { + int choose=JOptionPane.showConfirmDialog(this, "文件尚未保存,是否保存","提示", JOptionPane.YES_NO_CANCEL_OPTION); + if(choose==JOptionPane.YES_OPTION){ + save(); + } + else if(choose==JOptionPane.NO_OPTION) { + textArea.setText(null); + this.setTitle("无标题 -记事本"); + isNewFile=true; + oldValue=textArea.getText(); + } + else if(choose==JOptionPane.CANCEL_OPTION) { + return; + } + } + else { + textArea.setText(null); + this.setTitle("无标题 -记事本"); + isNewFile=true; + oldValue=textArea.getText(); + } + } + + //打开功能 + else if(e.getSource()==itemF2){ + String currentValue=textArea.getText(); + boolean isTextChange=(currentValue.equals(oldValue))?false:true; + if(isTextChange) { + int choose=JOptionPane.showConfirmDialog(this, "文件尚未保存,是否保存","提示", JOptionPane.YES_NO_CANCEL_OPTION); + if(choose==JOptionPane.YES_OPTION){ + save(); + } + else if(choose==JOptionPane.NO_OPTION) { + open(); + } + else if(choose==JOptionPane.CANCEL_OPTION) { + return; + } + } + else { + open(); + } + } + + //保存功能 + else if(e.getSource()==itemF3){ + if(isNewFile) { + save(); + } + else { + try{ + FileWriter fw=new FileWriter(currentFile); + BufferedWriter out=new BufferedWriter(fw) ; + out.write(textArea.getText()); + out.flush(); + fw.close(); + }catch(IOException ee){} + } + } + + //另存为 功能 + else if(e.getSource()==itemF4){ + fileDialog.setDialogTitle("另存为"); + save(); + } + + //退出功能 + else if(e.getSource()==itemF5){ + String currentValue=textArea.getText(); + boolean isTextChange=(currentValue.equals(oldValue))?false:true; + if(isTextChange) { + int choose=JOptionPane.showConfirmDialog(this, "文件尚未保存,是否保存","提示", JOptionPane.YES_NO_CANCEL_OPTION); + if(choose==JOptionPane.YES_OPTION){ + save(); + } + else if(choose==JOptionPane.NO_OPTION) { + System.exit(0); + } + else if(choose==JOptionPane.CANCEL_OPTION) { + return; + } + } + else { + System.exit(0); + } + } + + //撤销功能 + else if(e.getSource()==itemE1||e.getSource()==item1){ + if(undomg.canUndo()) { + undomg.undo(); + } + else { + JOptionPane.showMessageDialog(null, "无法撤销"); + } + } + + //剪切功能 + else if(e.getSource()==itemE2) { + textArea.cut(); + } + + //复制功能 + else if(e.getSource()==itemE3||e.getSource()==item3) { + textArea.copy(); + } + + //粘贴功能 + else if(e.getSource()==itemE4||e.getSource()==item4) { + textArea.paste(); + } + + //删除功能 + else if(e.getSource()==itemE5) { + StringBuffer tempString = new StringBuffer (textArea.getText()); + int start = textArea.getSelectionStart(); + int len = textArea.getSelectedText().length(); + tempString.delete( start , start+len); + textArea.setText(tempString.toString()); + } + + //自动换行功能 + else if(e.getSource()==itemO1) { + if(itemO1.isSelected()) + textArea.setLineWrap(true); + else + textArea.setLineWrap(false); + } + + //字体功能 + else if(e.getSource()==itemO2) { + new SetFont(EditorWindow.this, textArea); + } + + //状态栏功能 + else if(e.getSource()==itemV) { + if(itemV.isSelected()) + label.setVisible(true); + else + label.setVisible(false); + } + + //查看帮助功能 + else if(e.getSource()==itemH1) { + new LookHelp(); + } + + //关于记事本功能 + else if(e.getSource()==itemH2) { + new AboutTextEditor(); + } + + } + + //save方法和open方法 + void save() { + int state=fileDialog.showSaveDialog(this); + if(state==JFileChooser.APPROVE_OPTION){ + try{ + File dir=fileDialog.getCurrentDirectory(); + String name=fileDialog.getSelectedFile().getName(); + File file=new File(dir,name); + fileWriter=new FileWriter(file); + BufferedWriter out; + out=new BufferedWriter(fileWriter) ; + out.write(textArea.getText()); + out.close(); + fileWriter.close(); + isNewFile=false; + oldValue=textArea.getText(); + currentFile= fileDialog.getSelectedFile(); + this.setTitle(name); + }catch(IOException exp){} + } + } + + void open() { + int state=fileDialog.showOpenDialog(this); + if(state==JFileChooser.APPROVE_OPTION){ + textArea.setText(null); + try{ + File dir=fileDialog.getCurrentDirectory(); + String name=fileDialog.getSelectedFile().getName(); + File file=new File(dir,name); + fileReader=new FileReader(file); + BufferedReader in=new BufferedReader(fileReader); + String s=null; + while((s=in.readLine())!=null){ + textArea.append(s+"\n"); + } + in.close(); + fileReader.close(); + isNewFile=false; + oldValue=textArea.getText(); + currentFile=fileDialog.getSelectedFile(); + this.setTitle(name); + }catch(IOException exp){} + } + } +} + + + diff --git a/src/javademo/LookHelp.java b/src/javademo/LookHelp.java new file mode 100644 index 0000000..1b1fdd2 --- /dev/null +++ b/src/javademo/LookHelp.java @@ -0,0 +1,29 @@ +package javademo; +import javax.swing.*; +import java.awt.*; +public class LookHelp extends JFrame{ + /** + * + */ + private static final long serialVersionUID = 2638641194782942490L; + + public LookHelp() { + super.setTitle("查看帮助"); + this.setVisible(true); + this.setSize(500, 300); + this.setLocation(200,300); + this.setDefaultCloseOperation(DISPOSE_ON_CLOSE); + JLabel label1 = new JLabel("1、点击菜单、菜单项可选择功能"); + JLabel label2 = new JLabel("2、菜单快捷键为Alt+括号内字母"); + JLabel label3 = new JLabel("3、菜单项快捷键为菜单项提示"); + JLabel label4 = new JLabel("4、右键弹出编辑菜单"); + JLabel label5 = new JLabel("5、格式可设置是否自动换行"); + JPanel panel = new JPanel(new GridLayout(5,1)); + this.add(panel); + panel.add(label1); + panel.add(label2); + panel.add(label3); + panel.add(label4); + panel.add(label5); + } +} diff --git a/src/javademo/MainClass.java b/src/javademo/MainClass.java new file mode 100644 index 0000000..f87b0aa --- /dev/null +++ b/src/javademo/MainClass.java @@ -0,0 +1,12 @@ +package javademo; +import javax.swing.JFrame; +public class MainClass { + public static void main(String[] args) { + EditorWindow win=new EditorWindow(); + win.setTitle("文本编辑器"); + win.setVisible(true); + win.setSize(500,500); + win.setLocation(30,30); + win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + } +} diff --git a/src/javademo/SetFont.java b/src/javademo/SetFont.java new file mode 100644 index 0000000..2f1dfbd --- /dev/null +++ b/src/javademo/SetFont.java @@ -0,0 +1,125 @@ +package javademo; +import java.awt.*; +import java.awt.event.*; +import javax.swing.*; +public class SetFont extends JDialog{ + /** + * + */ + private static final long serialVersionUID = 6532360107996711727L; + + public SetFont(JFrame frame,JTextArea textArea) { + JPanel panel=new JPanel(); + JLabel fonts=new JLabel("字体:"); + JLabel style=new JLabel("字形:"); + JLabel size=new JLabel("大小:"); + JButton yes=new JButton("确定"); + JButton cancel=new JButton("取消"); + JLabel example=new JLabel("示例:AaBbCc"); + JButton color=new JButton("字体颜色"); + this.setTitle("字体"); + this.setSize(500,370); + this.setContentPane(panel); + this.setVisible(true); + this.setDefaultCloseOperation(DISPOSE_ON_CLOSE); + this.setResizable(false); + //获取系统字体库 + GraphicsEnvironment e = GraphicsEnvironment.getLocalGraphicsEnvironment(); + String[] fontNames = e.getAvailableFontFamilyNames(); + String[] fontStyle=new String[]{"常规","粗体","斜体","粗斜体"}; + Integer[] fontSize=new Integer[] {8,9,10,11,12,14,16,18,20,22,24,26,28,36,48,72}; + final JComboBox comboBox1 = new JComboBox(fontNames); + final JComboBox comboBox2=new JComboBox(fontStyle); + final JComboBox comboBox3=new JComboBox(fontSize); + //设置对话框布局 + panel.setLayout(null); + panel.add(fonts); + panel.add(style); + panel.add(size); + panel.add(yes); + panel.add(cancel); + panel.add(example); + panel.add(color); + panel.add(comboBox1); + panel.add(comboBox2); + panel.add(comboBox3); + fonts.setBounds(20,20,45,18); + style.setBounds(190,20,45,18); + size.setBounds(310,20,45,18); + comboBox1.setBounds(20,45,160,22); + comboBox2.setBounds(190,45,110,22); + comboBox3.setBounds(310, 45, 110, 22); + example.setBounds(50,90,380,140); + color.setBounds(20,250,85,30); + yes.setBounds(300,250,60,30); + cancel.setBounds(365,250,60,30); + + comboBox1.addItemListener(new ItemListener() { + @Override + public void itemStateChanged(ItemEvent e) { + if (e.getStateChange() == ItemEvent.SELECTED) { + example.setFont(new Font((String) comboBox1.getSelectedItem(), + example.getFont().getStyle(), example.getFont().getSize())); + } + } + }); + + comboBox2.addItemListener(new ItemListener() { + public void itemStateChanged(ItemEvent e) { + if(e.getStateChange()==ItemEvent.SELECTED) { + if(comboBox2.getSelectedItem().equals("常规")) { + example.setFont(new Font(example.getFont().getName(), Font.PLAIN, + example.getFont().getSize())); + } + else if(comboBox2.getSelectedItem().equals("粗体")){ + example.setFont(new Font(example.getFont().getName(), Font.BOLD, + example.getFont().getSize())); + } + else if(comboBox2.getSelectedItem().equals("斜体")){ + example.setFont(new Font(example.getFont().getName(), Font.ITALIC, + example.getFont().getSize())); + } + else if(comboBox2.getSelectedItem().equals("粗偏斜体")) { + example.setFont(new Font(example.getFont().getName(), Font.BOLD+ Font.ITALIC, + example.getFont().getSize())); + } + } + } + }); + + comboBox3.addItemListener(new ItemListener() { + public void itemStateChanged(ItemEvent e) { + if(e.getStateChange()==ItemEvent.SELECTED) { + example.setFont(new Font(example.getFont().getName(),example.getFont().getStyle(), + (int) comboBox3.getSelectedItem())); + + } + } + }); + + color.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + Color color = JColorChooser.showDialog(null, "设置字体颜色", null); + if (color==null) { + return; + } + textArea.setForeground(color); + } + }); + + yes.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + textArea.setFont(example.getFont()); + SetFont.this.setVisible(false); + } + }); + + cancel.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + SetFont.this.setVisible(false); + } + }); + + } +} -- Gitee From d3493415d6709d32b78cea99697f357e9b82facc Mon Sep 17 00:00:00 2001 From: milkyway Date: Tue, 8 Jun 2021 19:54:05 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E7=AC=AC=E4=BA=8C=E6=AC=A1=E6=8F=90?= =?UTF-8?q?=E4=BA=A4=EF=BC=9A=E6=B7=BB=E5=8A=A0=E4=BA=86=E5=85=A8=E9=80=89?= =?UTF-8?q?=E5=92=8C=E6=97=B6=E9=97=B4=E6=97=B6=E6=9C=9F=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=EF=BC=8C=E5=87=8F=E5=B0=91=E4=BA=86=E5=8F=B3=E9=94=AE=E5=BC=B9?= =?UTF-8?q?=E5=87=BA=E8=8F=9C=E5=8D=95=E5=92=8C=E7=BC=96=E8=BE=91=E8=8F=9C?= =?UTF-8?q?=E5=8D=95=E5=8A=9F=E8=83=BD=E5=AE=9E=E7=8E=B0=E7=9A=84=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E5=86=97=E4=BD=99=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/javademo/EditorWindow.java | 111 +++++++++++++++++---------------- 1 file changed, 56 insertions(+), 55 deletions(-) diff --git a/src/javademo/EditorWindow.java b/src/javademo/EditorWindow.java index 0d9227f..db36b3c 100644 --- a/src/javademo/EditorWindow.java +++ b/src/javademo/EditorWindow.java @@ -4,6 +4,8 @@ import javax.swing.undo.*; import java.awt.*; import java.awt.event.*; import java.io.*; +import java.text.*; +import java.util.*; public class EditorWindow extends JFrame implements ActionListener{ /** * @@ -13,24 +15,25 @@ public class EditorWindow extends JFrame implements ActionListener{ JFileChooser fileDialog; FileReader fileReader; FileWriter fileWriter; - JMenuItem itemF1,itemF2,itemF3,itemF4,itemF5,itemE1,itemE2,itemE3,itemE4,itemE5, - item1,item2,item3,item4,item5,itemO2,itemH1,itemH2; + JMenuItem itemF1,itemF2,itemF3,itemF4,itemF5,itemE1,itemE2,itemE3,itemE4,itemE5,itemE6,itemE7, + item1,item2,item3,item4,item5,item6,item7,itemO2,itemH1,itemH2; JCheckBoxMenuItem itemO1,itemV; JLabel label; String oldValue=null;//原始文本默认是空 boolean isNewFile=true;//默认是新文件 File currentFile; - UndoManager undomg=new UndoManager(); + UndoManager undomg=new UndoManager(); EditorWindow() { init(); } void init(){ //设置文本编辑区的布局 - textArea=new JTextArea(); + textArea=new JTextArea(); JScrollPane scroll=new JScrollPane(textArea); label= new JLabel("状态栏"); this.add(label,BorderLayout.SOUTH); - this.add(scroll,BorderLayout.CENTER); + this.add(scroll,BorderLayout.CENTER); + textArea.getDocument().addUndoableEditListener(undomg); //菜单条 JMenuBar menubar=new JMenuBar(); this.setJMenuBar(menubar); @@ -82,26 +85,38 @@ public class EditorWindow extends JFrame implements ActionListener{ itemE3=new JMenuItem("复制(C)"); itemE4=new JMenuItem("粘贴(P)"); itemE5=new JMenuItem("删除(L)"); + itemE6=new JMenuItem("全选(A)"); + itemE7=new JMenuItem("时间/日期(D)"); itemE1.addActionListener(this); itemE2.addActionListener(this); itemE3.addActionListener(this); itemE4.addActionListener(this); itemE5.addActionListener(this); + itemE6.addActionListener(this); + itemE7.addActionListener(this); itemE1.setAccelerator(KeyStroke.getKeyStroke("control Z")); itemE2.setAccelerator(KeyStroke.getKeyStroke("control X")); itemE3.setAccelerator(KeyStroke.getKeyStroke("control C")); itemE4.setAccelerator(KeyStroke.getKeyStroke("control V")); itemE5.setAccelerator(KeyStroke.getKeyStroke("Del")); + itemE6.setAccelerator(KeyStroke.getKeyStroke("control A")); + itemE7.setAccelerator(KeyStroke.getKeyStroke("F5")); itemE1.setMnemonic('U'); itemE2.setMnemonic('T'); itemE3.setMnemonic('C'); itemE4.setMnemonic('P'); itemE5.setMnemonic('L'); + itemE6.setMnemonic('A'); + itemE7.setMnemonic('D'); menu2.add(itemE1); + menu2.addSeparator(); menu2.add(itemE2); menu2.add(itemE3); menu2.add(itemE4); menu2.add(itemE5); + menu2.addSeparator(); + menu2.add(itemE6); + menu2.add(itemE7); //菜单‘格式’内菜单项及其快捷键 itemO1=new JCheckBoxMenuItem("自动换行(W)"); itemO2=new JMenuItem("字体(F)"); @@ -124,61 +139,34 @@ public class EditorWindow extends JFrame implements ActionListener{ itemH1.setMnemonic('H'); itemH2.setMnemonic('A'); menu5.add(itemH1); - menu5.add(itemH2); - + menu5.add(itemH2); + + //右键弹出菜单 JPopupMenu popup=new JPopupMenu(); - JMenuItem item1=new JMenuItem("撤销(U)"); - JMenuItem item2=new JMenuItem("剪切(T)"); - JMenuItem item3=new JMenuItem("复制(C)"); - JMenuItem item4=new JMenuItem("粘贴(P)"); - JMenuItem item5=new JMenuItem("删除(L)"); + item1=new JMenuItem("撤销(U)"); + item2=new JMenuItem("剪切(T)"); + item3=new JMenuItem("复制(C)"); + item4=new JMenuItem("粘贴(P)"); + item5=new JMenuItem("删除(L)"); + item6=new JMenuItem("全选(A)"); + item7=new JMenuItem("时间/日期(D)"); + item1.addActionListener(this); + item2.addActionListener(this); + item3.addActionListener(this); + item4.addActionListener(this); + item5.addActionListener(this); + item6.addActionListener(this); + item7.addActionListener(this); popup.add(item1); + popup.addSeparator(); popup.add(item2); popup.add(item3); popup.add(item4); popup.add(item5); - textArea.getDocument().addUndoableEditListener(undomg); - item1.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - if(undomg.canUndo()) { - undomg.undo(); - } - else { - JOptionPane.showMessageDialog(null, "无法撤销"); - } - } - }); - item2.addActionListener(new ActionListener(){ - @Override - public void actionPerformed(ActionEvent e){ - textArea.cut(); - } - }); - item3.addActionListener(new ActionListener(){ - @Override - public void actionPerformed(ActionEvent e){ - textArea.copy(); - } - }); - item4.addActionListener(new ActionListener(){ - @Override - public void actionPerformed(ActionEvent e){ - textArea.paste(); - } - }); - item5.addActionListener(new ActionListener(){ - @Override - public void actionPerformed(ActionEvent e){ - StringBuffer tmp = new StringBuffer (textArea.getText()); - int start = textArea.getSelectionStart(); - int len = textArea.getSelectedText().length(); - tmp.delete( start , start+len); - textArea.setText(tmp.toString()); - } - }); - + popup.addSeparator(); + popup.add(item6); + popup.add(item7); textArea.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { @@ -190,6 +178,7 @@ public class EditorWindow extends JFrame implements ActionListener{ } public void actionPerformed(ActionEvent e){ + //新建功能 if(e.getSource()==itemF1){ String currentValue=textArea.getText(); @@ -292,7 +281,7 @@ public class EditorWindow extends JFrame implements ActionListener{ } //剪切功能 - else if(e.getSource()==itemE2) { + else if(e.getSource()==itemE2||e.getSource()==item2) { textArea.cut(); } @@ -307,12 +296,24 @@ public class EditorWindow extends JFrame implements ActionListener{ } //删除功能 - else if(e.getSource()==itemE5) { + else if(e.getSource()==itemE5||e.getSource()==item5) { StringBuffer tempString = new StringBuffer (textArea.getText()); int start = textArea.getSelectionStart(); int len = textArea.getSelectedText().length(); tempString.delete( start , start+len); textArea.setText(tempString.toString()); + } + + //全选功能 + else if(e.getSource()==itemE6||e.getSource()==item6) { + textArea.selectAll(); + } + + //时间/日期功能 + else if(e.getSource()==itemE7||e.getSource()==item7) { + SimpleDateFormat currentDateTime=new SimpleDateFormat("HH:mmyyyy-MM-dd"); + textArea.insert(currentDateTime.format(new Date()),textArea.getCaretPosition()); + } //自动换行功能 -- Gitee From 49ab0a35d6489943cafc68f2d49c7d41c330014d Mon Sep 17 00:00:00 2001 From: milkyway Date: Wed, 9 Jun 2021 19:22:02 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E7=AC=AC=E4=B8=89=E6=AC=A1=E6=8F=90?= =?UTF-8?q?=E4=BA=A4=EF=BC=9A=E5=AE=8C=E5=96=84=E4=BA=86=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E6=A0=8F=E5=8A=9F=E8=83=BD=EF=BC=8C=E4=BF=AE=E5=A4=8D=E4=BA=86?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=B2=A1=E8=BE=93=E5=85=A5=E6=97=B6=E6=8C=89?= =?UTF-8?q?=E6=96=B0=E5=BB=BA=E6=89=93=E5=BC=80=E6=97=B6=E8=BF=98=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=E4=BF=9D=E5=AD=98=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/javademo/EditorWindow.java | 90 +++++++++++++++++++++------------- 1 file changed, 56 insertions(+), 34 deletions(-) diff --git a/src/javademo/EditorWindow.java b/src/javademo/EditorWindow.java index db36b3c..e533b11 100644 --- a/src/javademo/EditorWindow.java +++ b/src/javademo/EditorWindow.java @@ -1,5 +1,6 @@ package javademo; import javax.swing.*; +import javax.swing.event.*; import javax.swing.undo.*; import java.awt.*; import java.awt.event.*; @@ -11,29 +12,32 @@ public class EditorWindow extends JFrame implements ActionListener{ * */ private static final long serialVersionUID = 2368117138424502007L; - JTextArea textArea; - JFileChooser fileDialog; + JTextArea textArea; FileReader fileReader; FileWriter fileWriter; JMenuItem itemF1,itemF2,itemF3,itemF4,itemF5,itemE1,itemE2,itemE3,itemE4,itemE5,itemE6,itemE7, item1,item2,item3,item4,item5,item6,item7,itemO2,itemH1,itemH2; - JCheckBoxMenuItem itemO1,itemV; - JLabel label; - String oldValue=null;//原始文本默认是空 + JCheckBoxMenuItem itemO1,itemV1; + JLabel label1,label2,label3; + JToolBar toolState; + String oldText="";//原始文本默认是"" boolean isNewFile=true;//默认是新文件 - File currentFile; + File currentFile; + int line = 1; + int column = 1; + JFileChooser fileDialog=new JFileChooser(); UndoManager undomg=new UndoManager(); EditorWindow() { init(); } - void init(){ + void init(){ //设置文本编辑区的布局 textArea=new JTextArea(); - JScrollPane scroll=new JScrollPane(textArea); - label= new JLabel("状态栏"); - this.add(label,BorderLayout.SOUTH); - this.add(scroll,BorderLayout.CENTER); - textArea.getDocument().addUndoableEditListener(undomg); + JScrollPane scroll=new JScrollPane(textArea); + toolState = new JToolBar(); + this.add(toolState,BorderLayout.SOUTH); + this.add(scroll,BorderLayout.CENTER); + textArea.getDocument().addUndoableEditListener(undomg); //菜单条 JMenuBar menubar=new JMenuBar(); this.setJMenuBar(menubar); @@ -117,6 +121,7 @@ public class EditorWindow extends JFrame implements ActionListener{ menu2.addSeparator(); menu2.add(itemE6); menu2.add(itemE7); + //菜单‘格式’内菜单项及其快捷键 itemO1=new JCheckBoxMenuItem("自动换行(W)"); itemO2=new JMenuItem("字体(F)"); @@ -127,10 +132,10 @@ public class EditorWindow extends JFrame implements ActionListener{ menu3.add(itemO1); menu3.add(itemO2); //菜单‘查看’内菜单项及其快捷键 - itemV=new JCheckBoxMenuItem("状态栏(S)",true); - itemV.addActionListener(this); - itemV.setMnemonic('S'); - menu4.add(itemV); + itemV1=new JCheckBoxMenuItem("状态栏(S)",true); + itemV1.addActionListener(this); + itemV1.setMnemonic('S'); + menu4.add(itemV1); //菜单‘帮助’内菜单项及其快捷键 itemH1=new JMenuItem("查看帮助(H)"); itemH2=new JMenuItem("关于记事本(A)"); @@ -139,9 +144,27 @@ public class EditorWindow extends JFrame implements ActionListener{ itemH1.setMnemonic('H'); itemH2.setMnemonic('A'); menu5.add(itemH1); - menu5.add(itemH2); - + menu5.add(itemH2); + //状态栏功能 + label1 = new JLabel("状态栏"); + label2 = new JLabel("第 " + line + " 行, 第 " + column+" 列 "); + toolState.add(label1); + toolState.add(label2); + textArea.addCaretListener(new CaretListener() { + public void caretUpdate(CaretEvent e) { + JTextArea editArea = (JTextArea)e.getSource(); + try { + int caretPositon = editArea.getCaretPosition(); + line = editArea.getLineOfOffset(caretPositon); + column = caretPositon - textArea.getLineStartOffset(line); + line += 1; + label2.setText("第 " + line + " 行,第 " + (column+1)+" 列  "); + } + catch(Exception ee) {} + } + }); + //右键弹出菜单 JPopupMenu popup=new JPopupMenu(); item1=new JMenuItem("撤销(U)"); @@ -177,12 +200,11 @@ public class EditorWindow extends JFrame implements ActionListener{ }); } - public void actionPerformed(ActionEvent e){ - + public void actionPerformed(ActionEvent e){ //新建功能 if(e.getSource()==itemF1){ String currentValue=textArea.getText(); - boolean isTextChange=(currentValue.equals(oldValue))?false:true; + boolean isTextChange=(currentValue.equals(oldText))?false:true; if(isTextChange) { int choose=JOptionPane.showConfirmDialog(this, "文件尚未保存,是否保存","提示", JOptionPane.YES_NO_CANCEL_OPTION); if(choose==JOptionPane.YES_OPTION){ @@ -192,7 +214,7 @@ public class EditorWindow extends JFrame implements ActionListener{ textArea.setText(null); this.setTitle("无标题 -记事本"); isNewFile=true; - oldValue=textArea.getText(); + oldText=textArea.getText(); } else if(choose==JOptionPane.CANCEL_OPTION) { return; @@ -202,14 +224,14 @@ public class EditorWindow extends JFrame implements ActionListener{ textArea.setText(null); this.setTitle("无标题 -记事本"); isNewFile=true; - oldValue=textArea.getText(); + oldText=textArea.getText(); } } //打开功能 else if(e.getSource()==itemF2){ String currentValue=textArea.getText(); - boolean isTextChange=(currentValue.equals(oldValue))?false:true; + boolean isTextChange=(currentValue.equals(oldText))?false:true; if(isTextChange) { int choose=JOptionPane.showConfirmDialog(this, "文件尚未保存,是否保存","提示", JOptionPane.YES_NO_CANCEL_OPTION); if(choose==JOptionPane.YES_OPTION){ @@ -251,8 +273,8 @@ public class EditorWindow extends JFrame implements ActionListener{ //退出功能 else if(e.getSource()==itemF5){ - String currentValue=textArea.getText(); - boolean isTextChange=(currentValue.equals(oldValue))?false:true; + String currentText=textArea.getText(); + boolean isTextChange=(currentText.equals(oldText))?false:true; if(isTextChange) { int choose=JOptionPane.showConfirmDialog(this, "文件尚未保存,是否保存","提示", JOptionPane.YES_NO_CANCEL_OPTION); if(choose==JOptionPane.YES_OPTION){ @@ -329,14 +351,14 @@ public class EditorWindow extends JFrame implements ActionListener{ new SetFont(EditorWindow.this, textArea); } - //状态栏功能 - else if(e.getSource()==itemV) { - if(itemV.isSelected()) - label.setVisible(true); + //设置状态栏是否可见 + else if(e.getSource()==itemV1) { + if(itemV1.isSelected()) + toolState.setVisible(true); else - label.setVisible(false); + toolState.setVisible(false); } - + //查看帮助功能 else if(e.getSource()==itemH1) { new LookHelp(); @@ -364,7 +386,7 @@ public class EditorWindow extends JFrame implements ActionListener{ out.close(); fileWriter.close(); isNewFile=false; - oldValue=textArea.getText(); + oldText=textArea.getText(); currentFile= fileDialog.getSelectedFile(); this.setTitle(name); }catch(IOException exp){} @@ -388,7 +410,7 @@ public class EditorWindow extends JFrame implements ActionListener{ in.close(); fileReader.close(); isNewFile=false; - oldValue=textArea.getText(); + oldText=textArea.getText(); currentFile=fileDialog.getSelectedFile(); this.setTitle(name); }catch(IOException exp){} -- Gitee From 29e4eafde5364a145a710dbb6353310be79b1ed1 Mon Sep 17 00:00:00 2001 From: milkyway Date: Wed, 9 Jun 2021 20:31:25 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E7=AC=AC=E5=9B=9B=E6=AC=A1=E6=8F=90?= =?UTF-8?q?=E4=BA=A4=EF=BC=9A=E6=B7=BB=E5=8A=A0=E7=BB=9F=E8=AE=A1=E5=AD=97?= =?UTF-8?q?=E6=95=B0=E5=8A=9F=E8=83=BD=EF=BC=8C=E4=BF=AE=E5=A4=8D=E4=BA=86?= =?UTF-8?q?=E4=BF=9D=E5=AD=98bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/javademo/AboutTextEditor.java | 6 ++++-- src/javademo/EditorWindow.java | 35 ++++++++++++++++++++----------- src/javademo/FontCount.java | 12 +++++++++++ 3 files changed, 39 insertions(+), 14 deletions(-) create mode 100644 src/javademo/FontCount.java diff --git a/src/javademo/AboutTextEditor.java b/src/javademo/AboutTextEditor.java index f498ef7..ff453a5 100644 --- a/src/javademo/AboutTextEditor.java +++ b/src/javademo/AboutTextEditor.java @@ -14,7 +14,9 @@ public class AboutTextEditor extends JFrame{ this.setDefaultCloseOperation(DISPOSE_ON_CLOSE); JPanel panel = new JPanel(); this.add(panel); - JLabel label = new JLabel("简单文本编辑器 scau202025710308"); - panel.add(label); + JLabel label1 = new JLabel("简单文本编辑器 scau202025710308"); + JLabel label2 = new JLabel("一些方法学习参考于网络,不足请提出:1500912092@qq.com"); + panel.add(label1); + panel.add(label2); } } diff --git a/src/javademo/EditorWindow.java b/src/javademo/EditorWindow.java index e533b11..947ec31 100644 --- a/src/javademo/EditorWindow.java +++ b/src/javademo/EditorWindow.java @@ -16,11 +16,11 @@ public class EditorWindow extends JFrame implements ActionListener{ FileReader fileReader; FileWriter fileWriter; JMenuItem itemF1,itemF2,itemF3,itemF4,itemF5,itemE1,itemE2,itemE3,itemE4,itemE5,itemE6,itemE7, - item1,item2,item3,item4,item5,item6,item7,itemO2,itemH1,itemH2; + item1,item2,item3,item4,item5,item6,item7,itemO2,itemH1,itemH2,itemV2; JCheckBoxMenuItem itemO1,itemV1; JLabel label1,label2,label3; - JToolBar toolState; - String oldText="";//原始文本默认是"" + JToolBar toolBar; + String oldText=""; boolean isNewFile=true;//默认是新文件 File currentFile; int line = 1; @@ -34,8 +34,8 @@ public class EditorWindow extends JFrame implements ActionListener{ //设置文本编辑区的布局 textArea=new JTextArea(); JScrollPane scroll=new JScrollPane(textArea); - toolState = new JToolBar(); - this.add(toolState,BorderLayout.SOUTH); + toolBar = new JToolBar(); + this.add(toolBar,BorderLayout.SOUTH); this.add(scroll,BorderLayout.CENTER); textArea.getDocument().addUndoableEditListener(undomg); //菜单条 @@ -133,9 +133,13 @@ public class EditorWindow extends JFrame implements ActionListener{ menu3.add(itemO2); //菜单‘查看’内菜单项及其快捷键 itemV1=new JCheckBoxMenuItem("状态栏(S)",true); + itemV2=new JMenuItem("统计字数(B)"); itemV1.addActionListener(this); + itemV2.addActionListener(this); itemV1.setMnemonic('S'); + itemV2.setMnemonic('B'); menu4.add(itemV1); + menu4.add(itemV2); //菜单‘帮助’内菜单项及其快捷键 itemH1=new JMenuItem("查看帮助(H)"); itemH2=new JMenuItem("关于记事本(A)"); @@ -144,13 +148,14 @@ public class EditorWindow extends JFrame implements ActionListener{ itemH1.setMnemonic('H'); itemH2.setMnemonic('A'); menu5.add(itemH1); + menu5.addSeparator(); menu5.add(itemH2); //状态栏功能 label1 = new JLabel("状态栏"); label2 = new JLabel("第 " + line + " 行, 第 " + column+" 列 "); - toolState.add(label1); - toolState.add(label2); + toolBar.add(label1); + toolBar.add(label2); textArea.addCaretListener(new CaretListener() { public void caretUpdate(CaretEvent e) { JTextArea editArea = (JTextArea)e.getSource(); @@ -260,7 +265,8 @@ public class EditorWindow extends JFrame implements ActionListener{ BufferedWriter out=new BufferedWriter(fw) ; out.write(textArea.getText()); out.flush(); - fw.close(); + fw.close(); + oldText=textArea.getText(); }catch(IOException ee){} } } @@ -322,7 +328,7 @@ public class EditorWindow extends JFrame implements ActionListener{ StringBuffer tempString = new StringBuffer (textArea.getText()); int start = textArea.getSelectionStart(); int len = textArea.getSelectedText().length(); - tempString.delete( start , start+len); + tempString.delete(start, start+len); textArea.setText(tempString.toString()); } @@ -354,11 +360,16 @@ public class EditorWindow extends JFrame implements ActionListener{ //设置状态栏是否可见 else if(e.getSource()==itemV1) { if(itemV1.isSelected()) - toolState.setVisible(true); + toolBar.setVisible(true); else - toolState.setVisible(false); + toolBar.setVisible(false); } - + + //统计字数功能 + else if(e.getSource()==itemV2) { + new FontCount(textArea); + } + //查看帮助功能 else if(e.getSource()==itemH1) { new LookHelp(); diff --git a/src/javademo/FontCount.java b/src/javademo/FontCount.java new file mode 100644 index 0000000..3140ce6 --- /dev/null +++ b/src/javademo/FontCount.java @@ -0,0 +1,12 @@ +package javademo; + +import javax.swing.*; + +public class FontCount extends JFrame{ + public FontCount(JTextArea textArea){ + String line=textArea.getText(); + super.setTitle("统计"); + JOptionPane.showMessageDialog(this, "字符数:"+line.length(),"统计字数",JOptionPane.PLAIN_MESSAGE); + } +} + -- Gitee From ab174960fccae05d5f39e50a46ccdd07375a3c5e Mon Sep 17 00:00:00 2001 From: milkyway Date: Thu, 10 Jun 2021 16:16:30 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E6=9C=80=E5=90=8E=E4=B8=80=E6=AC=A1?= =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/javademo/AboutTextEditor.java | 6 +-- src/javademo/EditorWindow.java | 77 ++++++++++++++++++------------- src/javademo/FontCount.java | 12 ----- src/javademo/LookHelp.java | 4 +- src/javademo/SetFont.java | 15 +++--- 5 files changed, 57 insertions(+), 57 deletions(-) delete mode 100644 src/javademo/FontCount.java diff --git a/src/javademo/AboutTextEditor.java b/src/javademo/AboutTextEditor.java index ff453a5..ab30547 100644 --- a/src/javademo/AboutTextEditor.java +++ b/src/javademo/AboutTextEditor.java @@ -12,10 +12,10 @@ public class AboutTextEditor extends JFrame{ this.setSize(400, 200); this.setLocation(200,300); this.setDefaultCloseOperation(DISPOSE_ON_CLOSE); - JPanel panel = new JPanel(); - this.add(panel); + JPanel panel = new JPanel(); JLabel label1 = new JLabel("简单文本编辑器 scau202025710308"); - JLabel label2 = new JLabel("一些方法学习参考于网络,不足请提出:1500912092@qq.com"); + JLabel label2 = new JLabel("一些方法学习参考于网络,不足请提出:1500912092@qq.com"); + this.add(panel); panel.add(label1); panel.add(label2); } diff --git a/src/javademo/EditorWindow.java b/src/javademo/EditorWindow.java index 947ec31..bbdcdc1 100644 --- a/src/javademo/EditorWindow.java +++ b/src/javademo/EditorWindow.java @@ -1,6 +1,7 @@ package javademo; import javax.swing.*; import javax.swing.event.*; +import javax.swing.text.JTextComponent; import javax.swing.undo.*; import java.awt.*; import java.awt.event.*; @@ -12,6 +13,7 @@ public class EditorWindow extends JFrame implements ActionListener{ * */ private static final long serialVersionUID = 2368117138424502007L; + JMenuBar menuBar; JTextArea textArea; FileReader fileReader; FileWriter fileWriter; @@ -21,7 +23,7 @@ public class EditorWindow extends JFrame implements ActionListener{ JLabel label1,label2,label3; JToolBar toolBar; String oldText=""; - boolean isNewFile=true;//默认是新文件 + boolean isNewFile=true; File currentFile; int line = 1; int column = 1; @@ -32,32 +34,31 @@ public class EditorWindow extends JFrame implements ActionListener{ } void init(){ //设置文本编辑区的布局 + menuBar=new JMenuBar(); textArea=new JTextArea(); JScrollPane scroll=new JScrollPane(textArea); toolBar = new JToolBar(); this.add(toolBar,BorderLayout.SOUTH); + this.add(menuBar,BorderLayout.NORTH); this.add(scroll,BorderLayout.CENTER); - textArea.getDocument().addUndoableEditListener(undomg); - //菜单条 - JMenuBar menubar=new JMenuBar(); - this.setJMenuBar(menubar); + textArea.getDocument().addUndoableEditListener(undomg); //菜单及其快捷键 JMenu menu1=new JMenu("文件(F)"); JMenu menu2=new JMenu("编辑(E)"); JMenu menu3=new JMenu("格式(O)"); JMenu menu4=new JMenu("查看(V)"); JMenu menu5=new JMenu("帮助(H)"); - menubar.add(menu1); - menubar.add(menu2); - menubar.add(menu3); - menubar.add(menu4); - menubar.add(menu5); + menuBar.add(menu1); + menuBar.add(menu2); + menuBar.add(menu3); + menuBar.add(menu4); + menuBar.add(menu5); menu1.setMnemonic('F'); menu2.setMnemonic('E'); menu3.setMnemonic('O'); menu4.setMnemonic('V'); menu5.setMnemonic('H'); - //菜单‘文件’内菜单项及其快捷键 + //菜单‘文件’内菜单项及其快捷键,并注册事件监听器 itemF1=new JMenuItem("新建(N)"); itemF2=new JMenuItem("打开(O)"); itemF3=new JMenuItem("保存(S)"); @@ -83,12 +84,12 @@ public class EditorWindow extends JFrame implements ActionListener{ menu1.add(itemF4); menu1.addSeparator(); menu1.add(itemF5); - //菜单‘编辑’内菜单项及其快捷键 + //菜单‘编辑’内菜单项及其快捷键,并注册事件监听器 itemE1=new JMenuItem("撤销(U)"); itemE2=new JMenuItem("剪切(T)"); itemE3=new JMenuItem("复制(C)"); itemE4=new JMenuItem("粘贴(P)"); - itemE5=new JMenuItem("删除(L)"); + itemE5=new JMenuItem("删除(Del)"); itemE6=new JMenuItem("全选(A)"); itemE7=new JMenuItem("时间/日期(D)"); itemE1.addActionListener(this); @@ -108,8 +109,7 @@ public class EditorWindow extends JFrame implements ActionListener{ itemE1.setMnemonic('U'); itemE2.setMnemonic('T'); itemE3.setMnemonic('C'); - itemE4.setMnemonic('P'); - itemE5.setMnemonic('L'); + itemE4.setMnemonic('P'); itemE6.setMnemonic('A'); itemE7.setMnemonic('D'); menu2.add(itemE1); @@ -120,9 +120,8 @@ public class EditorWindow extends JFrame implements ActionListener{ menu2.add(itemE5); menu2.addSeparator(); menu2.add(itemE6); - menu2.add(itemE7); - - //菜单‘格式’内菜单项及其快捷键 + menu2.add(itemE7); + //菜单‘格式’内菜单项及其快捷键,并注册事件监听器 itemO1=new JCheckBoxMenuItem("自动换行(W)"); itemO2=new JMenuItem("字体(F)"); itemO1.addActionListener(this); @@ -131,7 +130,7 @@ public class EditorWindow extends JFrame implements ActionListener{ itemO2.setMnemonic('F'); menu3.add(itemO1); menu3.add(itemO2); - //菜单‘查看’内菜单项及其快捷键 + //菜单‘查看’内菜单项及其快捷键,并注册事件监听器 itemV1=new JCheckBoxMenuItem("状态栏(S)",true); itemV2=new JMenuItem("统计字数(B)"); itemV1.addActionListener(this); @@ -140,7 +139,7 @@ public class EditorWindow extends JFrame implements ActionListener{ itemV2.setMnemonic('B'); menu4.add(itemV1); menu4.add(itemV2); - //菜单‘帮助’内菜单项及其快捷键 + //菜单‘帮助’内菜单项及其快捷键,并注册事件监听器 itemH1=new JMenuItem("查看帮助(H)"); itemH2=new JMenuItem("关于记事本(A)"); itemH1.addActionListener(this); @@ -158,10 +157,9 @@ public class EditorWindow extends JFrame implements ActionListener{ toolBar.add(label2); textArea.addCaretListener(new CaretListener() { public void caretUpdate(CaretEvent e) { - JTextArea editArea = (JTextArea)e.getSource(); try { - int caretPositon = editArea.getCaretPosition(); - line = editArea.getLineOfOffset(caretPositon); + int caretPositon = ((JTextComponent) e.getSource()).getCaretPosition(); + line = ((JTextArea) e.getSource()).getLineOfOffset(caretPositon); column = caretPositon - textArea.getLineStartOffset(line); line += 1; label2.setText("第 " + line + " 行,第 " + (column+1)+" 列  "); @@ -176,7 +174,7 @@ public class EditorWindow extends JFrame implements ActionListener{ item2=new JMenuItem("剪切(T)"); item3=new JMenuItem("复制(C)"); item4=new JMenuItem("粘贴(P)"); - item5=new JMenuItem("删除(L)"); + item5=new JMenuItem("删除(Del)"); item6=new JMenuItem("全选(A)"); item7=new JMenuItem("时间/日期(D)"); item1.addActionListener(this); @@ -194,7 +192,18 @@ public class EditorWindow extends JFrame implements ActionListener{ popup.add(item5); popup.addSeparator(); popup.add(item6); - popup.add(item7); + popup.add(item7); + item1.setMnemonic('U'); + item2.setMnemonic('T'); + item3.setMnemonic('C'); + item4.setMnemonic('P'); + item6.setMnemonic('A'); + item7.setMnemonic('D'); + item1.setAccelerator(KeyStroke.getKeyStroke("control Z")); + item2.setAccelerator(KeyStroke.getKeyStroke("control X")); + item3.setAccelerator(KeyStroke.getKeyStroke("control C")); + item4.setAccelerator(KeyStroke.getKeyStroke("control V")); + item5.setAccelerator(KeyStroke.getKeyStroke("Del")); textArea.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { @@ -205,11 +214,12 @@ public class EditorWindow extends JFrame implements ActionListener{ }); } + public void actionPerformed(ActionEvent e){ //新建功能 if(e.getSource()==itemF1){ - String currentValue=textArea.getText(); - boolean isTextChange=(currentValue.equals(oldText))?false:true; + String currentText=textArea.getText(); + boolean isTextChange=(currentText.equals(oldText))?false:true; if(isTextChange) { int choose=JOptionPane.showConfirmDialog(this, "文件尚未保存,是否保存","提示", JOptionPane.YES_NO_CANCEL_OPTION); if(choose==JOptionPane.YES_OPTION){ @@ -235,8 +245,8 @@ public class EditorWindow extends JFrame implements ActionListener{ //打开功能 else if(e.getSource()==itemF2){ - String currentValue=textArea.getText(); - boolean isTextChange=(currentValue.equals(oldText))?false:true; + String currentText=textArea.getText(); + boolean isTextChange=(currentText.equals(oldText))?false:true; if(isTextChange) { int choose=JOptionPane.showConfirmDialog(this, "文件尚未保存,是否保存","提示", JOptionPane.YES_NO_CANCEL_OPTION); if(choose==JOptionPane.YES_OPTION){ @@ -339,9 +349,9 @@ public class EditorWindow extends JFrame implements ActionListener{ //时间/日期功能 else if(e.getSource()==itemE7||e.getSource()==item7) { - SimpleDateFormat currentDateTime=new SimpleDateFormat("HH:mmyyyy-MM-dd"); - textArea.insert(currentDateTime.format(new Date()),textArea.getCaretPosition()); - + Date date=new Date(); + SimpleDateFormat currentDateTime=new SimpleDateFormat("HH:mm yyyy-MM-dd"); + textArea.insert(currentDateTime.format(date),textArea.getCaretPosition()); } //自动换行功能 @@ -367,7 +377,8 @@ public class EditorWindow extends JFrame implements ActionListener{ //统计字数功能 else if(e.getSource()==itemV2) { - new FontCount(textArea); + String line=textArea.getText(); + JOptionPane.showMessageDialog(null, "字符数:"+line.length(),"统计字数",JOptionPane.PLAIN_MESSAGE); } //查看帮助功能 diff --git a/src/javademo/FontCount.java b/src/javademo/FontCount.java deleted file mode 100644 index 3140ce6..0000000 --- a/src/javademo/FontCount.java +++ /dev/null @@ -1,12 +0,0 @@ -package javademo; - -import javax.swing.*; - -public class FontCount extends JFrame{ - public FontCount(JTextArea textArea){ - String line=textArea.getText(); - super.setTitle("统计"); - JOptionPane.showMessageDialog(this, "字符数:"+line.length(),"统计字数",JOptionPane.PLAIN_MESSAGE); - } -} - diff --git a/src/javademo/LookHelp.java b/src/javademo/LookHelp.java index 1b1fdd2..8db0b11 100644 --- a/src/javademo/LookHelp.java +++ b/src/javademo/LookHelp.java @@ -15,9 +15,9 @@ public class LookHelp extends JFrame{ this.setDefaultCloseOperation(DISPOSE_ON_CLOSE); JLabel label1 = new JLabel("1、点击菜单、菜单项可选择功能"); JLabel label2 = new JLabel("2、菜单快捷键为Alt+括号内字母"); - JLabel label3 = new JLabel("3、菜单项快捷键为菜单项提示"); + JLabel label3 = new JLabel("3、菜单项快捷键为菜单项后蓝色提示"); JLabel label4 = new JLabel("4、右键弹出编辑菜单"); - JLabel label5 = new JLabel("5、格式可设置是否自动换行"); + JLabel label5 = new JLabel("5、格式可设置是否自动换行和设置字体"); JPanel panel = new JPanel(new GridLayout(5,1)); this.add(panel); panel.add(label1); diff --git a/src/javademo/SetFont.java b/src/javademo/SetFont.java index 2f1dfbd..6bd5037 100644 --- a/src/javademo/SetFont.java +++ b/src/javademo/SetFont.java @@ -16,7 +16,7 @@ public class SetFont extends JDialog{ JButton yes=new JButton("确定"); JButton cancel=new JButton("取消"); JLabel example=new JLabel("示例:AaBbCc"); - JButton color=new JButton("字体颜色"); + JButton colorButton=new JButton("字体颜色"); this.setTitle("字体"); this.setSize(500,370); this.setContentPane(panel); @@ -39,7 +39,7 @@ public class SetFont extends JDialog{ panel.add(yes); panel.add(cancel); panel.add(example); - panel.add(color); + panel.add(colorButton); panel.add(comboBox1); panel.add(comboBox2); panel.add(comboBox3); @@ -50,7 +50,7 @@ public class SetFont extends JDialog{ comboBox2.setBounds(190,45,110,22); comboBox3.setBounds(310, 45, 110, 22); example.setBounds(50,90,380,140); - color.setBounds(20,250,85,30); + colorButton.setBounds(20,250,85,30); yes.setBounds(300,250,60,30); cancel.setBounds(365,250,60,30); @@ -97,21 +97,22 @@ public class SetFont extends JDialog{ } }); - color.addActionListener(new ActionListener() { + colorButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { Color color = JColorChooser.showDialog(null, "设置字体颜色", null); if (color==null) { return; } - textArea.setForeground(color); + example.setForeground(color); + textArea.setForeground(color); } }); yes.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - textArea.setFont(example.getFont()); - SetFont.this.setVisible(false); + textArea.setFont(example.getFont()); + SetFont.this.setVisible(false); } }); -- Gitee