您的位置:首页 > 编程语言 > Java开发

Java右键菜单实现文本组件内容的的复制、粘贴、剪切功能

2016-06-24 00:17 711 查看
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.InputEvent;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

 

import javax.swing.JFrame;

import javax.swing.JMenuItem;

import javax.swing.JPopupMenu;

import javax.swing.JScrollPane;

import javax.swing.JTextArea;

import javax.swing.KeyStroke;

import javax.swing.UIManager;

 

/**

Java右键菜单实现文本组件内容的的复制、粘贴、剪切功能

*

* @author

* @blog www.cnblogs.com/zhm

*/

 

public class Right extends JFrame {

 

private static final long serialVersionUID = -5942087991012920147L;

 

private JScrollPane pane = null;

 

private TextAreaMenu text = null;

 

public Right() {

  super("右键菜单");

  try { // 使用Windows的界面风格

   UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");

  } catch (Exception e) {

   e.printStackTrace();

  }

  text = new TextAreaMenu();

  pane = new JScrollPane(text);

  this.getContentPane().add(pane);

  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  this.setSize(300, 200);

  this.setVisible(true);

}

 

public static void main(String args[]) {

  new Right();

}

 

/**

  * 带有功能菜单的JTextArea

  *

  * @author

  * @blog www.cnblogs.com/zhm

  */

class TextAreaMenu extends JTextArea implements MouseListener {

 

  private static final long serialVersionUID = -2308615404205560110L;

 

  private JPopupMenu pop = null; // 弹出菜单

 

  private JMenuItem copy = null, paste = null, cut = null; // 三个功能菜单

 

  public TextAreaMenu() {

   super();

   init();

  }

 

  private void init() {

   this.addMouseListener(this);

   pop = new JPopupMenu();

   pop.add(copy = new JMenuItem("复制"));

   pop.add(paste = new JMenuItem("粘贴"));

   pop.add(cut = new JMenuItem("剪切"));

   copy.setAccelerator(KeyStroke.getKeyStroke('C', InputEvent.CTRL_MASK));

   paste.setAccelerator(KeyStroke.getKeyStroke('V', InputEvent.CTRL_MASK));

   cut.setAccelerator(KeyStroke.getKeyStroke('X', InputEvent.CTRL_MASK));

   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);

  }

 

  /**

   * 菜单动作

   * @param e

   */

  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();

   }

  }

 

  public JPopupMenu getPop() {

   return pop;

  }

 

  public void setPop(JPopupMenu pop) {

   this.pop = pop;

  }

 

  /**

   * 剪切板中是否有文本数据可供粘贴

   *

   * @return true为有文本数据

   */

  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;

  }

 

  /**

   * 文本组件中是否具备复制的条件

   *

   * @return true为具备

   */

  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) {

  }

 

}

 

}

 

 

 

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: