From 78e776abcb2b792926dbaf1076c1d77d63dfc49e Mon Sep 17 00:00:00 2001 From: panjinhui <1552876650@qq.com> Date: Mon, 4 Jul 2022 15:44:34 +0800 Subject: [PATCH 1/2] 123 --- src/java2022spring/MainFrame.java | 323 ++++++++++++++++++++++++++++++ 1 file changed, 323 insertions(+) create mode 100644 src/java2022spring/MainFrame.java diff --git a/src/java2022spring/MainFrame.java b/src/java2022spring/MainFrame.java new file mode 100644 index 0000000..353fc6f --- /dev/null +++ b/src/java2022spring/MainFrame.java @@ -0,0 +1,323 @@ +package java2022spring; +import java.awt.*; +import java.awt.event.*; +import java.io.*; +import javax.swing.*; +import javax.swing.event.CaretEvent; +import javax.swing.event.CaretListener; +import javax.swing.text.BadLocationException; +import javax.swing.undo.UndoManager; +@SuppressWarnings("serial") +public class MainFrame extends JFrame { + JTextArea textarea = new JTextArea();//创建文本框 + JLabel Label=new JLabel("当前字数:"+0+" 行"+1+" 列"+1); //创建状态栏 + public static void main(String args[]) { + MainFrame notebook = new MainFrame(); + notebook.setBounds(450,150,1024,768); + notebook.setBackground(Color.WHITE); + notebook.setVisible(true); + notebook.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + } + + void getWordSize() { + FontDialog dialog=new FontDialog(); + dialog.setVisible(true); + if(dialog.getState()==FontDialog.YES) { + textarea.setFont(dialog.getFont()); + textarea.repaint(); + } + if(dialog.getState()==FontDialog.NO) { + textarea.repaint(); + } + }//字体功能方法 + + + public MainFrame() { + super("夏科雪的文本编辑器"); + JMenuBar menubar = new JMenuBar(); + JMenu file = new JMenu("文件(F)"); + JMenu edit = new JMenu("编辑(E)"); + JMenu form = new JMenu("格式(O)"); + JMenu view = new JMenu("查看(V)"); + JMenu help = new JMenu("帮助(H)"); + menubar.add(file); + menubar.add(edit); + menubar.add(form); + menubar.add(view); + menubar.add(help); + file.setMnemonic('F'); + edit.setMnemonic('E'); + form.setMnemonic('O'); + view.setMnemonic('V'); + help.setMnemonic('H'); + this.setJMenuBar(menubar);//菜单栏 + JScrollPane scroll=new JScrollPane(textarea); + this.add(scroll,BorderLayout.CENTER);//加入有滚动窗格的文本区 + JMenuItem file1 = new JMenuItem("新建(N)"); + JMenuItem file2 = new JMenuItem("打开(O)..."); + JMenuItem file3 = new JMenuItem("保存(S)"); + JMenuItem file4 = new JMenuItem("另存为(A)..."); + JMenuItem file5 = new JMenuItem("退出(X)"); + file.add(file1); + file.add(file2); + file.add(file3); + file.add(file4); + file.add(file5); + file1.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e){ + textarea.setText(""); + }//新建按钮,清空文本框 + }); + file1.setMnemonic('N'); + file1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,ActionEvent.CTRL_MASK)); + FileDialog open; + FileDialog save; + open = new FileDialog(this,"打开(O)",FileDialog.LOAD); + save = new FileDialog(this,"另存为(A)",FileDialog.SAVE); + file2.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + open.setVisible(true); + try{ BufferedReader in = new BufferedReader(new FileReader(open.getDirectory() +open.getFile())); + String str = null; + while ((str = in.readLine()) != null){ + System.out.println(str); + textarea.append(str + "\n"); + } + in.close(); + } + catch (IOException er1) { + throw new RuntimeException("文件打开失败!"); + } + } + });//打开功能 + file2.setMnemonic('O'); + file2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,ActionEvent.CTRL_MASK)); + file3.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + save.setVisible(true); + try{ FileOutputStream out = new FileOutputStream(save.getDirectory() + save.getFile() + ".txt"); + String str = textarea.getText(); + out.write(str.getBytes()); + out.close(); + } + catch (IOException er1) { + throw new RuntimeException("文件保存失败!"); + } + } + });//保存功能 + file3.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,ActionEvent.CTRL_MASK)); + file3.setMnemonic('S'); + file4.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + save.setVisible(true); + try{ FileOutputStream out = new FileOutputStream(save.getDirectory() + save.getFile() + ".txt"); + String str = textarea.getText(); + out.write(str.getBytes()); + out.close(); + } + catch (IOException er1) { + throw new RuntimeException("文件保存失败!"); + } + } + });//另存为功能 + file4.setMnemonic('A'); + file5.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent e){ + System.exit(0); + } + });//退出功能 + file5.setMnemonic('X'); + JMenuItem edit1 = new JMenuItem("撤销(U)"); + JMenuItem edit2 = new JMenuItem("剪切(T)"); + JMenuItem edit3 = new JMenuItem("复制(C)"); + JMenuItem edit4 = new JMenuItem("粘贴(P)"); + JMenuItem edit5 = new JMenuItem("删除(L)"); + JMenuItem edit6 = new JMenuItem("全选(A)"); + edit.add(edit1); + edit.add(edit2); + edit.add(edit3); + edit.add(edit4); + edit.add(edit5); + edit.add(edit6);//编辑功能的子菜单 + UndoManager undo = new UndoManager(); + textarea.getDocument().addUndoableEditListener(undo); + edit1.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent e) { + if(undo.canUndo()) + undo.undo(); + } + });//撤销功能 + edit1.setMnemonic('U'); + edit1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Z,ActionEvent.CTRL_MASK)); + edit2.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent e) { + textarea.cut(); + } + });//剪切功能 + edit2.setMnemonic('T'); + edit2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,ActionEvent.CTRL_MASK)); + edit3.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent e) { + textarea.copy(); + } + });//复制功能 + edit3.setMnemonic('C'); + edit3.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,ActionEvent.CTRL_MASK)); + edit4.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent e) { + textarea.paste(); + } + });//粘贴功能 + edit4.setMnemonic('P'); + edit4.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,ActionEvent.CTRL_MASK)); + edit5.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent e) { + int start= textarea.getSelectionStart(); + int end = textarea.getSelectionEnd(); + textarea.replaceRange("",start,end); + } + });//删除功能 + edit5.setMnemonic('L'); + edit5.setMnemonic(KeyEvent.VK_DELETE); + edit6.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent e) { + textarea.selectAll(); + } + });//全选功能 + edit6.setMnemonic('A'); + edit6.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,ActionEvent.CTRL_MASK)); + + JCheckBoxMenuItem form1=new JCheckBoxMenuItem("自动换行(W)"); + JMenuItem form2 = new JMenuItem("字体(F)..."); + form1.setState(false); + textarea.setLineWrap(false); + form.add(form1); + form.add(form2); + form1.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent e) { + if(textarea.getLineWrap()) + textarea.setLineWrap(false); + else + textarea.setLineWrap(true); + textarea.setWrapStyleWord(true); + + } + });//自动换行功能 + form1.setMnemonic('W'); + form2.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + getWordSize(); + } + });//字体功能 + form2.setMnemonic('F'); + JPopupMenu popupMenu = new JPopupMenu(); + JMenuItem right1 = new JMenuItem("撤销(U)"); + JMenuItem right2 = new JMenuItem("剪切(T)"); + JMenuItem right3 = new JMenuItem("复制(C)"); + JMenuItem right4 = new JMenuItem("粘贴(A)"); + JMenuItem right5 = new JMenuItem("删除(X)"); + JMenuItem right6 = new JMenuItem("全选(A)"); + popupMenu.add(right1); + popupMenu.add(right2); + popupMenu.add(right3); + popupMenu.add(right4); + popupMenu.add(right5); + popupMenu.add(right6); + textarea.addMouseListener(new MouseAdapter() { + public void mouseClicked(MouseEvent e) + { + if(e.getButton() == MouseEvent.BUTTON3) + popupMenu.show(e.getComponent(), e.getX(), e.getY()); + } + + }); + right1.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent e) { + if(undo.canUndo()) + undo.undo(); + } + });//撤销功能 + right2.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent e) { + textarea.cut(); + } + });//剪贴功能 + right3.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent e) { + textarea.copy(); + } + });//复制功能 + right4.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent e) { + textarea.paste(); + } + });//粘贴功能 + right5.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent e) { + int start= textarea.getSelectionStart(); + int end = textarea.getSelectionEnd(); + textarea.replaceRange("",start,end); + } + });//删除功能 + right6.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent e) { + textarea.selectAll(); + } + });//全选功能 + + JCheckBoxMenuItem view1=new JCheckBoxMenuItem("状态栏(S)");//状态栏 + textarea.addCaretListener(new CaretListener() { + public void caretUpdate(CaretEvent e) { + int position=textarea.getCaretPosition(); + int currentNumber=0; + int offset = e.getDot(); + int start = 0; + try { + start = textarea.getLineOfOffset(offset); + } + catch (BadLocationException e2) { + e2.printStackTrace(); + } + int end = 0; + try { + end = e.getDot() - textarea.getLineStartOffset(start); + } + catch (BadLocationException e1) { + e1.printStackTrace(); + } + String content = textarea.getText().replaceAll("\\s+", ""); + currentNumber=content.length(); + Label.setText("当前字数:"+String.valueOf(currentNumber)+" 行"+(start+1)+" 列"+(end+1)); + } + });//统计字数和行号 + this.add(Label,BorderLayout.SOUTH); + view1.setState(true); + view.add(view1); + Label.setVisible(true); + Label.setHorizontalAlignment(SwingConstants.RIGHT); + view1.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + if(view1.getState()) + Label.setVisible(true); + else + Label.setVisible(false); + } + });//状态栏功能 + JMenuItem help1 = new JMenuItem("查看帮助(H)"); + JMenuItem help2 = new JMenuItem("关于记事本(A)"); + help.add(help1); + help.add(help2); + help1.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent event) { + new LookHelp(); + } + }); + help2.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent event) { + new AboutBook(); + } + }); + help1.setMnemonic('H'); + help2.setMnemonic('A'); + } +} -- Gitee From 5124c81628b6c6ccc7eadb5030d9fa24d9fece9e Mon Sep 17 00:00:00 2001 From: xiakexue <1552876650@qq.com> Date: Mon, 4 Jul 2022 15:49:35 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=AE=8C=E5=96=84=E8=AE=B0=E4=BA=8B?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/java2022spring/AboutBook.java | 5 +++++ src/java2022spring/FontDialog.java | 32 ++++++++++++++++++++++++++++++ src/java2022spring/LookHelp.java | 5 +++++ 3 files changed, 42 insertions(+) create mode 100644 src/java2022spring/AboutBook.java create mode 100644 src/java2022spring/FontDialog.java create mode 100644 src/java2022spring/LookHelp.java diff --git a/src/java2022spring/AboutBook.java b/src/java2022spring/AboutBook.java new file mode 100644 index 0000000..897041b --- /dev/null +++ b/src/java2022spring/AboutBook.java @@ -0,0 +1,5 @@ +package java2022spring; + +public class AboutBook { + +} diff --git a/src/java2022spring/FontDialog.java b/src/java2022spring/FontDialog.java new file mode 100644 index 0000000..b60a8ce --- /dev/null +++ b/src/java2022spring/FontDialog.java @@ -0,0 +1,32 @@ +package java2022spring; + +import java.awt.Font; + +public record FontDialog() { + + + //public void menuPerformed(MenuEvent e) + //{ checkMenuItemEnabled();//设置剪切、复制、粘贴、删除等功能的可用性 + //} + public static final Object YES = null; + public static final Object NO = null; + + + + public void setVisible(boolean b) { + // TODO 自动生成的方法存根 + + } + + public Object getState() { + // TODO 自动生成的方法存根 + return null; + } + + public Font getFont() { + // TODO 自动生成的方法存根 + return null; + } + +} + diff --git a/src/java2022spring/LookHelp.java b/src/java2022spring/LookHelp.java new file mode 100644 index 0000000..3bfb940 --- /dev/null +++ b/src/java2022spring/LookHelp.java @@ -0,0 +1,5 @@ +package java2022spring; + +public class LookHelp { + +} -- Gitee