hacker5077 2009-03-29 00:19 采纳率: 100%
浏览 491
已采纳

java中JTextPane 组件,里面如何加鼠标右键 复制,剪切监听呢

java中JTextPane 组件,里面如何加鼠标右键 复制,剪切监听呢

谁能给我个例子啊,或者提示一下

  • 写回答

1条回答 默认 最新

  • ncradovi 2009-03-29 08:01
    关注

    google一下,约有900多项符合要求的,呵呵,很多啊。
    [code="java"]
    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 http://blog.csdn.net/mq612 */

    public class Test extends JFrame {

    private static final long serialVersionUID = -5942087991012920147L;

    private JScrollPane pane = null;

    private TextAreaMenu text = null;

    public Test() {
    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 Test();
    }

    /**

    • 带有功能菜单的JTextArea
    • @author 五斗米 <如转载请保留作者和出处>
    • @blog http://blog.csdn.net/mq612
      */
      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) {
      }

    }

    }

    [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 flink cdc无法实时同步mysql数据
  • ¥100 有人会搭建GPT-J-6B框架吗?有偿
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名