diff --git a/src/java2020spring/About.java b/src/java2020spring/About.java new file mode 100644 index 0000000000000000000000000000000000000000..f3100ec4b9256a730ff2fb611635ba96884d926f --- /dev/null +++ b/src/java2020spring/About.java @@ -0,0 +1,21 @@ +package java2020spring; + +import javax.swing.*; + +public class About extends JFrame{ + JPanel panel; + JLabel label; + public About() { + this.setTitle("关于记事本"); + this.setSize(200, 100); + this.setLocation(200, 300); + this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); + this.setVisible(true); + panel=new JPanel(); + label=new JLabel("制作人:hyb"); + panel.add(label); + add(label); + + } + +} diff --git a/src/java2020spring/CheckHelp.java b/src/java2020spring/CheckHelp.java new file mode 100644 index 0000000000000000000000000000000000000000..dc51a602741492013e12bd0c3884a119514a3d2f --- /dev/null +++ b/src/java2020spring/CheckHelp.java @@ -0,0 +1,21 @@ +package java2020spring; +import javax.swing.*; +import java.awt.*; +public class CheckHelp extends JFrame{ + public CheckHelp() { + this.setTitle("查看帮助"); + this.setSize(500, 300); + this.setLocation(200, 300); + this.setResizable(false); + this.setVisible(true); + this.setDefaultCloseOperation(DISPOSE_ON_CLOSE); + Container c=this.getContentPane(); + c.setLayout(new GridLayout(5,0)); + JLabel label1=new JLabel("菜单可选择功能"); + JLabel label2=new JLabel("可自动换行"); + JLabel label3=new JLabel("可右键唤出编辑菜单"); + c.add(label1); + c.add(label2); + c.add(label3); + } +} diff --git a/src/java2020spring/Right.java b/src/java2020spring/Right.java new file mode 100644 index 0000000000000000000000000000000000000000..055a0075c904596fd9b3488a19a25100674f9069 --- /dev/null +++ b/src/java2020spring/Right.java @@ -0,0 +1,98 @@ +package java2020spring; +import java.awt.*; +import javax.swing.*; +import java.awt.event.*; +import javax.swing.undo.UndoManager; +import java.awt.datatransfer.*; +public class Right extends JTextArea implements MouseListener{ + JPopupMenu pop=null; + JMenuItem revoke=null,copy=null,paste=null,delete=null,cut=null; + UndoManager undo=new UndoManager(); + + public Right() { + super(); + init(); + } + + void init() { + this.addMouseListener(this); + pop = new JPopupMenu(); + pop.add(copy = new JMenuItem("复制")); + pop.add(paste = new JMenuItem("粘贴")); + pop.add(cut = new JMenuItem("剪切")); + copy.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + action(e); + } + }); + paste.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + action(e); + } + }); + cut.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + action(e); + } + }); + this.add(pop); + } + + + public void action(ActionEvent e) { + String str=e.getActionCommand(); + if(str.equals(copy.getText())) + this.copy(); + else if(str.equals(paste.getText())) + this.paste(); + else if(str.equals(paste.getText())) + this.cut(); + } + + public JPopupMenu getPop() { + return pop; + } + public void setPop(JPopupMenu pop) { + this.pop=pop; + } + public boolean isClipboardString() { + boolean b=false; + Clipboard cilp=this.getToolkit().getSystemClipboard(); + Transferable content=cilp.getContents(this); + try { + if(content.getTransferData(DataFlavor.stringFlavor)instanceof String) { + b=true; + } + } + catch(Exception e) { + } + return b; + } + + public boolean isCanCopy() { + boolean b=false; + int start=this.getSelectionStart(); + int end=this.getSelectionEnd(); + if(start!=end) + b=true; + return b; + } + + public void mouseClicked(MouseEvent e) { +} + public void mouseEntered(MouseEvent e) { + } + public void mouseExited(MouseEvent e) { + } + public void mousePressed(MouseEvent e) { + if(e.getButton()==MouseEvent.BUTTON3) { + copy.setEnabled(isCanCopy()); + paste.setEnabled(isClipboardString()); + cut.setEnabled(isCanCopy()); + pop.show(this, e.getX(), e.getY()); + } + } + public void mouseReleased(MouseEvent e) { + } +} + diff --git a/src/java2020spring/TextEditor.java b/src/java2020spring/TextEditor.java new file mode 100644 index 0000000000000000000000000000000000000000..37a44170ba3d36ed80e7ebd675d9ad041dd9dcd5 --- /dev/null +++ b/src/java2020spring/TextEditor.java @@ -0,0 +1,342 @@ +package java2020spring; +import javax.swing.*; +import javax.swing.event.CaretEvent; +import javax.swing.event.CaretListener; +import javax.swing.undo.UndoManager; + +import java.awt.*; +import java.awt.event.*; +import java.io.*; +import java.awt.datatransfer.*; + +public class TextEditor extends JFrame implements ActionListener,MouseListener,CaretListener{ + JMenuBar menuBar; + JMenu menuFile,menuEditor,menuFormat,menuCheck,menuHelp; + JMenuItem itemNew,itemOpen,itemSave,itemSaveTo,itemQuit; + JMenuItem itemRevoke,itemCut,itemCopy,itemPaste,itemDelete,item26; + JRadioButtonMenuItem itemWordWrap; + JCheckBoxMenuItem itemStatus; + JMenuItem itemCheckHelp,itemAbout; + JTextArea textShow; + JScrollPane scroll; + JFileChooser fileChooser; + UndoManager undoManager; + JPopupMenu jp=new JPopupMenu();//快捷菜单 + JMenuItem revoke,copy,paste,delete,cut; + JLabel statusLabel; + + public TextEditor() { + editMenuBar(); + textArea(); + addActionListener(); + this.setJMenuBar(menuBar); + this.setSize(800, 600); + this.setLocation(0, 0); + this.setVisible(true); + this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + this.setTitle("文本编辑器"); + revoke=new JMenuItem("撤销"); + cut=new JMenuItem("剪切"); + copy=new JMenuItem("复制"); + paste=new JMenuItem("粘贴"); + delete=new JMenuItem("删除"); + jp.add(revoke); + jp.addSeparator(); + jp.add(cut); + jp.add(copy); + jp.add(paste); + jp.add(delete); + revoke.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + if(undoManager.canUndo()) { + undoManager.undo(); + } + } + }); + cut.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + textShow.cut(); + }}); + copy.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + textShow.copy(); + } + }); + paste.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + textShow.paste(); + } + }); + delete.addActionListener(new ActionListener(){ + public void actionPerformed(ActionEvent e) { + textShow.replaceSelection(""); + } + }); + + textShow.addMouseListener(new MouseAdapter() { + public void mousePressed(MouseEvent me) { + int mode=me.getModifiers(); + if(mode==InputEvent.BUTTON3_MASK) { + jp.show(textShow,me.getX(),me.getY()); + } + } + }); + statusLabel=new JLabel("状态栏"); + add(statusLabel,BorderLayout.SOUTH); + textShow.addCaretListener(new CaretListener(){ + public void caretUpdate(CaretEvent e){ + JTextArea editArea = (JTextArea)e.getSource(); + int linenum =1; + int columnnum = 1; + try { + int caretpos = editArea.getCaretPosition(); + linenum = editArea.getLineOfOffset(caretpos); + columnnum = caretpos - editArea.getLineStartOffset(linenum); + linenum += 1; + } + catch(Exception ex) { } + updateStatus(linenum,columnnum); + } }); + updateStatus(1,1); + } + + private void updateStatus(int linenum, int columnnum) { + statusLabel.setText("第"+linenum+"行,第"+columnnum+"列"); + statusLabel.setHorizontalAlignment(JTextField.RIGHT); + + } + + public void editMenuBar() { //设计菜单栏 + menuBar=new JMenuBar(); + menuFile=new JMenu("文件"); + menuEditor=new JMenu("编辑"); + menuFormat=new JMenu("格式"); + menuCheck=new JMenu("查看"); + menuHelp=new JMenu("帮助"); + menuBar.add(menuFile); + menuBar.add(menuEditor); + menuBar.add(menuFormat); + menuBar.add(menuCheck); + menuBar.add(menuHelp); + itemNew=new JMenuItem("新建"); + itemOpen=new JMenuItem("打开"); + itemSave=new JMenuItem("保存"); + itemSaveTo=new JMenuItem("另存为"); + itemQuit=new JMenuItem("退出"); + menuFile.add(itemNew); + menuFile.add(itemOpen); + menuFile.add(itemSave); + menuFile.add(itemSaveTo); + menuFile.add(itemQuit); + itemRevoke=new JMenuItem("撤销"); + undoManager=new UndoManager(); + itemCut=new JMenuItem("剪切"); + itemCopy=new JMenuItem("复制"); + itemPaste=new JMenuItem("粘贴"); + itemDelete=new JMenuItem("删除"); + item26=new JMenuItem("右键"); + menuEditor.add(itemRevoke); + menuEditor.add(itemCut); + menuEditor.add(itemCopy); + menuEditor.add(itemPaste); + menuEditor.add(itemDelete); + menuEditor.add(item26); + itemWordWrap=new JRadioButtonMenuItem("自动换行()",false); + menuFormat.add(itemWordWrap); + itemStatus=new JCheckBoxMenuItem("状态栏"); + menuCheck.add(itemStatus); + itemCheckHelp=new JMenuItem("查看帮助"); + itemAbout=new JMenuItem("关于记事本"); + menuHelp.add(itemCheckHelp); + menuHelp.add(itemAbout); + } + + public void textArea() { //设计文本框 + textShow=new JTextArea(); + scroll=new JScrollPane(textShow); + add(scroll,BorderLayout.CENTER); + } + + public static void main(String args[]) { + TextEditor text=new TextEditor(); + } + + public void addActionListener() { //添加监视器 + itemNew.addActionListener(this); + itemOpen.addActionListener(this); + itemSave.addActionListener(this); + itemSaveTo.addActionListener(this); + itemQuit.addActionListener(this); + itemRevoke.addActionListener(this); + itemCut.addActionListener(this); + itemCopy.addActionListener(this); + itemPaste.addActionListener(this); + itemDelete.addActionListener(this); + item26.addActionListener(this); + itemWordWrap.addActionListener(this); + itemCheckHelp.addActionListener(this); + itemAbout.addActionListener(this); + textShow.getDocument().addUndoableEditListener(undoManager); + itemStatus.addActionListener(this); + } + + +@Override +public void actionPerformed(ActionEvent e) { + if(e.getSource()==itemAbout) + new About(); + else if(e.getSource()==itemNew) + textShow.setText(" "); + if(e.getSource()==itemOpen) + openFile(); + else if(e.getSource()==itemSave) + saveFile(); + else if(e.getSource()==itemSaveTo) + saveTo(); + else if(e.getSource()==itemQuit) + System.exit(0); + else if(e.getSource()==itemRevoke) { + if(undoManager.canUndo()) + undoManager.undo(); + else + JOptionPane.showMessageDialog(null,"无法撤销","警告",JOptionPane.WARNING_MESSAGE); + } + + else if(e.getSource()==itemCut) + textShow.cut(); + else if(e.getSource()==itemCopy) + textShow.copy(); + else if(e.getSource()==itemPaste) + textShow.paste(); + else if(e.getSource()==itemDelete) { + if(undoManager.canUndo()) + undoManager.undo(); + else + JOptionPane.showMessageDialog(null,"无法删除","警告",JOptionPane.WARNING_MESSAGE); + } + else if(e.getSource()==itemWordWrap) + textShow.setLineWrap(true); + else if(e.getSource()==itemCheckHelp) + new CheckHelp(); + else if(e.getSource()==itemStatus) { + if((itemStatus).getState()) + itemStatus.setVisible(true); + else itemStatus.setVisible(false); + } + } + + + + + void openFile() { + File file=null; + int result; + fileChooser=new JFileChooser("C:\\"); + fileChooser.setApproveButtonToolTipText("确定"); + fileChooser.setDialogTitle("打开文件"); + result=fileChooser.showOpenDialog(rootPane); + if(result==JFileChooser.APPROVE_OPTION) + file=fileChooser.getSelectedFile(); + if(file.isFile()&&file.exists()) { + BufferedReader reader=null; + try { + InputStreamReader inputStreamReader=new InputStreamReader(new FileInputStream(file),"UTF-8"); + reader=new BufferedReader(inputStreamReader); + String readline=""; + while ((readline=reader.readLine())!=null) + textShow.append(readline+'\n'); + reader.close(); + } + catch(IOException e) { + e.printStackTrace(); + } + } + } + + void saveFile() { + File file =null; + int result; + fileChooser=new JFileChooser("C:\\"); + fileChooser.setApproveButtonToolTipText("保存"); + fileChooser.setDialogTitle("保存文件"); + result=fileChooser.showOpenDialog(rootPane); + if(result==JFileChooser.APPROVE_OPTION) + file=fileChooser.getSelectedFile(); + try { + OutputStreamWriter outputStreamWriter=new OutputStreamWriter(new FileOutputStream(file),"UTF-8"); + BufferedWriter bufferWriter=new BufferedWriter(outputStreamWriter); + String content=textShow.getText(); + bufferWriter.write(content); + bufferWriter.close(); + } + catch(IOException e) { + e.printStackTrace(); + } + } + + void saveTo() { + JFileChooser fileChooser=new JFileChooser(); + fileChooser.showOpenDialog(null); + File file=fileChooser.getSelectedFile(); + byte[] result=new byte[(int)file.length()]; + try { + FileInputStream inputStream=new FileInputStream(file); + inputStream.read(result); + String string=new String(result); + System.out.println(file.getAbsolutePath()); + System.out.println(string); + fileChooser.showSaveDialog(null); + File file2=fileChooser.getSelectedFile(); + FileOutputStream outputStream=new FileOutputStream(file2); + outputStream.write(result); + outputStream.close(); + } + catch(IOException e) { + e.printStackTrace(); + } + } + +@Override +public void mouseClicked(MouseEvent e) { + // TODO 自动生成的方法存根 + +} + +@Override +public void mousePressed(MouseEvent e) { + // TODO 自动生成的方法存根 + +} + +@Override +public void mouseReleased(MouseEvent e) { + // TODO 自动生成的方法存根 + +} + +@Override +public void mouseEntered(MouseEvent e) { + // TODO 自动生成的方法存根 + +} + +@Override +public void mouseExited(MouseEvent e) { + // TODO 自动生成的方法存根 + +} + +@Override +public void caretUpdate(CaretEvent e) { + // TODO 自动生成的方法存根 + +} + + + + + + + +} + \ No newline at end of file