⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mytextarea.java

📁 一个有undo
💻 JAVA
字号:
package com.thb.mytool;

/**
 * <p>Title: DBMS</p>
 * <p>Description: This is a database manager system</p>
 * <p>Copyright: Copyright (c) 2004</p>
 * <p>Company: UPC</p>
 * @author THB
 * @version 1.0
 */

import java.io.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.text.*;
import javax.swing.undo.*;
import javax.swing.event.*;
import java.awt.datatransfer.*;

public class MyTextArea extends JTextArea
        implements ClipboardOwner {

  private UndoableEdit edit;
  private Document document;
  private Clipboard clipBoard;
  private UndoManager undoManager;

  /**
   * 当用户在Text Area中有所操作时,就可以用getEdit()方法取得UndoableEdit对象,
   * 此对象纪录着刚刚用户的操作,因此可由些对象的undo()或redo()达到取消或复原的功能.
   */
  public MyTextArea() {

    document = getDocument();
    undoManager = new UndoManager();
    clipBoard = this.getToolkit().getSystemClipboard();

    document.addUndoableEditListener(new UndoableEditListener() {
      public void undoableEditHappened(UndoableEditEvent e) {
        edit = e.getEdit();
        undoManager.addEdit(edit);
      }
    });
  }

  public void addActionMap() {

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

    getActionMap().put("Redo", new AbstractAction("Redo") {
      public void actionPerformed(ActionEvent evt) {
        try {
          if (undoManager.canRedo()) {
             undoManager.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 copy = getSelectedText();

    if (copy != null) {
      StringSelection str = new StringSelection(copy);
      clipBoard.setContents(str, this);
    }
  }

  public void cut() {

    String copy = getSelectedText();

    if (copy != null) {
      StringSelection str = new StringSelection(copy);
      clipBoard.setContents(str, this);
      replaceSelection("");
    }
  }

  public void paste() {

    Transferable transfer = clipBoard.getContents(this);

    if (transfer != null) {
      try {
        String str = (String)transfer.getTransferData(DataFlavor.stringFlavor);
        this.replaceRange(str, getSelectionStart(), getSelectionEnd());
      }
      catch(UnsupportedFlavorException e) {
      }
      catch(IOException e) {
      }
    }
  }

  public void lostOwnership(Clipboard clipboard, Transferable contents) {
  }

  public UndoableEdit getEdit() {
    return edit;
  }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -