用JAVA实现Undo、Redo,Copy、Paste、Cut

package clipborad;

import javax.swing.JTextArea;
import java.awt.datatransfer.*;
import java.awt.*;
import javax.swing.*;
import java.io.*;
import javax.swing.undo.*;
import javax.swing.text.*;
import javax.swing.event.*;
import java.awt.event.*;
/**
 * Title: 用JAVA实现Undo、Redo,Copy、Paste、Cut
 * Description:用JAVA实现Undo、Redo,Copy、Paste、Cut
 * Copyright:    Copyright (c) 2001
 * Company: 
 * @author: 彭建雄
 * @version 1.0
 */

public class ClipTextArea extends JTextArea  implements ClipboardOwner{

  Clipboard strBoard = this.getToolkit().getSystemClipboard();
  UndoManager undo = new UndoManager();
  Document doc = getDocument();

 

  public ClipTextArea() {
      doc.addUndoableEditListener(new UndoableEditListener(){
      public void undoableEditHappened(UndoableEditEvent e) {
        doc_addedit(e);}
          });

    addActionMap();
  }

  public void addActionMap()
  {
     getActionMap().put("Undo", new AbstractAction("Undo") {
     public void actionPerformed(ActionEvent evt) {
        try {
        if (undo.canUndo()) {
        undo.undo();
        }
        } catch (CannotUndoException e) {
        }
      }
    });
    getInputMap().put(KeyStroke.getKeyStroke("control Z"), "Undo");

    getActionMap().put("Redo",new AbstractAction("Redo") {
      public void actionPerformed(ActionEvent evt) {
        try
        {
          if (undo.canRedo()) {
              undo.redo();
          }
          } catch (CannotRedoException e) {
        }
        }
        });
    getInputMap().put(KeyStroke.getKeyStroke("control R"), "Redo");

    getActionMap().put("Copy",new AbstractAction("Copy") {
      public void actionPerformed(ActionEvent evt) {
        copy();
      }
    });
    getInputMap().put(KeyStroke.getKeyStroke("control C"), "Copy");

    getActionMap().put("Cut",new AbstractAction("Cut") {
      public void actionPerformed(ActionEvent evt) {
        cut();
      }
    });
    getInputMap().put(KeyStroke.getKeyStroke("control X"), "Cut");

   getActionMap().put("Paste",new AbstractAction("Paste") {
      public void actionPerformed(ActionEvent evt) {
        paste();
      }
    });
    getInputMap().put(KeyStroke.getKeyStroke("control V"), "Paste");

  }


  public void copy()
  {
    String sCopy = getSelectedText();
    if (sCopy != null)
    {
      StringSelection sSelection = new StringSelection(sCopy);
      strBoard.setContents(sSelection,this);
    }
  }

  public void cut()
  {
    String sCopy = getSelectedText();
    if (sCopy != null)
    {
      StringSelection sSelection = new StringSelection(sCopy);
      strBoard.setContents(sSelection,this);
      this.replaceSelection("");
    }
  }

  public void paste()
  {
    Transferable sTransf = strBoard.getContents(this);
    if (sTransf!=null)
    {
      try
      {
        String sPaste = (String)sTransf.getTransferData(DataFlavor.stringFlavor);
        this.replaceRange(sPaste,getSelectionStart(),getSelectionEnd());
      }
      catch(UnsupportedFlavorException e)
      {
      }
      catch(IOException ioe)
      {
      }
    }
  }


  public void lostOwnership(Clipboard clipboard,Transferable contents)
  {

  }

  void doc_addedit(UndoableEditEvent e)
  {
    undo.addEdit(e.getEdit());
  }

}

阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个简单的Java Swing记事本程序的代码,你可以参考它来编写你自己的程序: ```java import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; public class SimpleNotepad extends JFrame implements ActionListener { private JTextArea textArea; private JScrollPane scrollPane; private JMenuBar menuBar; private JMenu fileMenu, editMenu; private JMenuItem newFileItem, openFileItem, saveFileItem, saveAsFileItem, exitFileItem; private JMenuItem undoItem, redoItem, cutItem, copyItem, pasteItem, selectAllItem; private File currentFile; public SimpleNotepad() { super("Simple Notepad"); textArea = new JTextArea(20, 60); textArea.setFont(new Font("Consolas", Font.PLAIN, 14)); scrollPane = new JScrollPane(textArea); menuBar = new JMenuBar(); fileMenu = new JMenu("File"); newFileItem = new JMenuItem("New"); openFileItem = new JMenuItem("Open"); saveFileItem = new JMenuItem("Save"); saveAsFileItem = new JMenuItem("Save As"); exitFileItem = new JMenuItem("Exit"); editMenu = new JMenu("Edit"); undoItem = new JMenuItem("Undo"); redoItem = new JMenuItem("Redo"); cutItem = new JMenuItem("Cut"); copyItem = new JMenuItem("Copy"); pasteItem = new JMenuItem("Paste"); selectAllItem = new JMenuItem("Select All"); newFileItem.addActionListener(this); openFileItem.addActionListener(this); saveFileItem.addActionListener(this); saveAsFileItem.addActionListener(this); exitFileItem.addActionListener(this); undoItem.addActionListener(this); redoItem.addActionListener(this); cutItem.addActionListener(this); copyItem.addActionListener(this); pasteItem.addActionListener(this); selectAllItem.addActionListener(this); fileMenu.add(newFileItem); fileMenu.add(openFileItem); fileMenu.add(saveFileItem); fileMenu.add(saveAsFileItem); fileMenu.addSeparator(); fileMenu.add(exitFileItem); editMenu.add(undoItem); editMenu.add(redoItem); editMenu.addSeparator(); editMenu.add(cutItem); editMenu.add(copyItem); editMenu.add(pasteItem); editMenu.addSeparator(); editMenu.add(selectAllItem); menuBar.add(fileMenu); menuBar.add(editMenu); setJMenuBar(menuBar); add(scrollPane); setSize(800, 600); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocationRelativeTo(null); setVisible(true); } public static void main(String[] args) { new SimpleNotepad(); } @Override public void actionPerformed(ActionEvent e) { if (e.getSource() == newFileItem) { newFile(); } else if (e.getSource() == openFileItem) { openFile(); } else if (e.getSource() == saveFileItem) { saveFile(); } else if (e.getSource() == saveAsFileItem) { saveAsFile(); } else if (e.getSource() == exitFileItem) { exit(); } else if (e.getSource() == undoItem) { textArea.undo(); } else if (e.getSource() == redoItem) { textArea.redo(); } else if (e.getSource() == cutItem) { textArea.cut(); } else if (e.getSource() == copyItem) { textArea.copy(); } else if (e.getSource() == pasteItem) { textArea.paste(); } else if (e.getSource() == selectAllItem) { textArea.selectAll(); } } private void newFile() { textArea.setText(""); currentFile = null; } private void openFile() { JFileChooser fileChooser = new JFileChooser("."); int result = fileChooser.showOpenDialog(this); if (result == JFileChooser.APPROVE_OPTION) { File file = fileChooser.getSelectedFile(); try { FileReader reader = new FileReader(file); textArea.read(reader, null); reader.close(); currentFile = file; } catch (IOException e) { e.printStackTrace(); } } } private void saveFile() { if (currentFile != null) { try { FileWriter writer = new FileWriter(currentFile); textArea.write(writer); writer.close(); } catch (IOException e) { e.printStackTrace(); } } else { saveAsFile(); } } private void saveAsFile() { JFileChooser fileChooser = new JFileChooser("."); int result = fileChooser.showSaveDialog(this); if (result == JFileChooser.APPROVE_OPTION) { File file = fileChooser.getSelectedFile(); try { FileWriter writer = new FileWriter(file); textArea.write(writer); writer.close(); currentFile = file; } catch (IOException e) { e.printStackTrace(); } } } private void exit() { System.exit(0); } } ``` 这个程序的功能包括新建、打开、保存、另存为、撤销、重做、剪切、复制、粘贴、选择全部等功能。注意,这只是一个简单的示例程序,你可以根据实际需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

programlover

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值