JTextArea实现右键复制,粘贴,删除等功能!

package rightMouse;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JSeparator;
import javax.swing.JTextArea;
import javax.swing.undo.UndoManager;


public class TextAreaMenu extends JTextArea implements MouseListener {
 /**
  *
  */
 private static final long serialVersionUID = 1L;
 private JPopupMenu pm=null;
 private JMenuItem copy=null;
 private JMenuItem delete=null;
 private JMenuItem cut=null;
 private JMenuItem undo=null;
 private JMenuItem paste=null;
 private JMenuItem redo=null;
 private JMenuItem selectAll=null;
 //添加撤消管理器
 private UndoManager um=new UndoManager();
 public TextAreaMenu()
 {
  super();
  init();
 }
 public TextAreaMenu(String str)
 {
  super(str);
  init();
 }
 private void init()
 {
  this.addMouseListener(this);
  this.getDocument().addUndoableEditListener(um);
  pm=new JPopupMenu();
  
  //全选
  selectAll=new JMenuItem("全选");
  selectAll.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent e) {
    action(e);
    }
   });
  //粘贴
  paste=new JMenuItem("粘贴");
  paste.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent e) {
    action(e);
    }
   });
  
  //复制
  copy=new JMenuItem("复制");
  copy.addActionListener(new ActionListener(){
  public void actionPerformed(ActionEvent e) {
   action(e);
   }
  });
  
  //删除
  delete=new JMenuItem("删除");
  delete.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent e) {
    action(e);
    }
   });
  //剪切
  cut=new JMenuItem("剪切");
  cut.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent e) {
    action(e);
    }
   });
  
  //撤消
  undo=new JMenuItem("撤消");
  undo.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent e) {
    action(e);
    }
   });
  //返回
  redo=new JMenuItem("返回");
  redo.addActionListener(new ActionListener(){
   public void actionPerformed(ActionEvent e) {
    action(e);
    }
   });
  pm.add(selectAll);
  pm.add(delete);
  pm.add(new JSeparator());
  pm.add(copy);
  pm.add(cut);
  pm.add(paste);
  pm.add(new JSeparator());
  pm.add(undo);
  pm.add(redo);
  this.add(pm);
 }
 //
 public boolean isClipboardString()
 {
  boolean b=false;
  Clipboard clipboard = this.getToolkit().getSystemClipboard();
  Transferable content = clipboard.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;
  }
 @Override
 public void mouseClicked(MouseEvent arg0) {
  // TODO Auto-generated method stub
  
 }

 @Override
 public void mouseEntered(MouseEvent arg0) {
  // TODO Auto-generated method stub
  
 }

 @Override
 public void mouseExited(MouseEvent arg0) {
  // TODO Auto-generated method stub
  
 }

 @Override
 public void mousePressed(MouseEvent e) {
  // TODO Auto-generated method stub
  if(e.getButton() == MouseEvent.BUTTON3)
  {
    delete.setEnabled(isCanCopy());
    copy.setEnabled(isCanCopy());
    paste.setEnabled(isClipboardString());
    cut.setEnabled(isCanCopy());
    undo.setEnabled(um.canUndo());
    redo.setEnabled(um.canRedo());
    pm.show(this, e.getX(), e.getY());
  }
 }

 @Override
 public void mouseReleased(MouseEvent arg0) {
  // TODO Auto-generated method stub
  
 }
 
 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(cut.getText()))
  { // 剪切
    this.cut();
  }
  else if(str.equals(undo.getText()))
  {
   um.undo();
  }
  else if(str.equals(redo.getText()))
  {
   um.redo();
  }
  else if(str.equals(delete.getText()))
  {
   this.replaceSelection("");   
  }
  else if(str.equals(selectAll.getText()))
  {
   this.selectAll();
  }
 }

}


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值