`
My*Love
  • 浏览: 72441 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

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

    博客分类:
  • JAVA
阅读更多
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 www.cnblogs.com/zhm
*/

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

}

}

本文来自:http://blog.163.com/chengyan20070909@126/blog/static/5582102820091112465776/
分享到:
评论

相关推荐

    Java弹出菜单,为JTextArea添加了右键弹出式菜单,实现了复制、粘贴、剪切

    今天,我们将学习如何使用 Java 弹出菜单来为 JTextArea 添加右键弹出式菜单,实现复制、粘贴、剪切功能。 一、Java 弹出菜单概述 Java 弹出菜单是一种 context-sensitive 菜单,即在用户点击右键时出现的菜单。它...

    为netbeans的文本组件添加右键菜单功能的插件

    本篇将详细讲解如何为NetBeans的文本组件添加右键菜单功能的插件。 首先,我们需要了解NetBeans插件体系结构。NetBeans平台基于模块化系统,每个插件都是一个独立的模块,通过Java类和XML文件定义其功能。创建一个...

    java编辑器课程设计报告

    - 剪切、复制、粘贴和删除功能。 - 改变文本颜色、字体大小和形状。 - 关键字和类库名的高亮显示。 2. **设计思想**: - 整合图形界面、线程、流与文件处理技术。 - 使用Swing库来构建图形界面,JTextPane作为...

    Java课程设计之记事本(实现文件、编辑、字体等)

    例如,"剪切"、"复制"和"粘贴"菜单项可以通过Swing的Clipboard系统实现。 快捷键的实现涉及到Key Bindings,这是Swing提供的一种机制,允许我们将特定的键盘组合与动作绑定在一起。例如,Ctrl+C和Ctrl+V可以分别...

    java课程设计记事本

    5. **复制与粘贴功能**:在Java中,可以使用`javax.swing.text`包中的`DefaultEditorKit`类提供的`copyAction`和`pasteAction`来实现文本的复制和粘贴功能。通过注册这些动作到文本组件,可以为用户提供标准的剪贴板...

    简易编辑器

    对于剪切、复制和粘贴的快捷菜单功能,我们可以使用JPopupMenu创建右键快捷菜单。首先,我们需要在快捷菜单上添加相应的菜单项,然后在TextJFrame的构造函数中将快捷菜单关联到文本组件上。接着,我们需要监听文本...

    java做到简单记事本

    - **编辑模块流程设计**:涵盖剪切、复制、粘贴等功能,需要实现文本内容的临时存储和恢复。 - **格式模块流程设计**:支持字体大小、颜色、样式调整,涉及Swing组件属性的修改。 - **查看模块流程设计**:实现...

    java程序设计简易写字板

    《Java程序设计简易写字板》是一款基于Java编程语言开发的简单文本编辑工具,它具备了基本的写字板功能,如编辑、删除、粘贴、复制、剪切、保存、另存、选择字体颜色(前景色)、设置背景色、右键快捷菜单、程序退出...

    java编程 记事本 全部功能都实现.docx

    这个程序通常会包含文件操作(如新建、打开、保存、打印)、文本编辑(如复制、剪切、粘贴、删除)以及格式调整等功能。以下是一个简单的Java记事本程序实现的关键知识点: 1. **主类与窗口类**: - `记事本.java`...

    记事本程序设计与实现-java归纳.pdf

    1.2 功能设计:规划了程序的核心功能,如创建新文件、打开已有文件、保存文件、退出程序、复制文本、粘贴文本、剪切文本、查找文本以及提供帮助信息。 第二章:概要设计 2.1 程序设计思路:采用了模块化设计,将...

    java做的简易记事本含快捷键_查找_替换等

    此外,还可以看到如何通过`JTextArea`实现文本编辑功能,以及如何使用`KeyListener`来处理键盘事件,实现快捷键功能。 #### 五、总结 这个简易记事本项目不仅是一个很好的学习示例,也是理解Java Swing库和事件...

    java编程-记事本-全部功能都实现.doc

    该应用实现了创建、打开、保存、打印文件等功能,并提供了文本编辑操作(如复制、剪切、粘贴等)。 ### 二、关键类与接口 #### 1. `Window` 类 - **描述**:这是整个应用程序的主要窗口类。 - **继承自**:`JFrame...

    java文本编辑器[收集].pdf

    - **右键菜单(JPopupMenu)**:在文本区域上右击时显示的上下文菜单。 - **文本区(JTextArea)**:用于显示和编辑文本,添加`DocumentListener`监听文本变化。 - **容器(Container)**:组合所有组件的容器,...

    java记事本

    这个应用不仅具备基础的文本输入和保存功能,还增加了右键菜单操作,使得复制、粘贴、剪切和清空文本变得更为便捷。此外,用户还可以通过菜单选择不同的字体样式和颜色,以满足个性化需求。 在Java语言中,实现这样...

    java 记事本小程序

    例如,工具栏可能包含“剪切”,“复制”,“粘贴”等编辑操作的按钮。 4. **右键菜单**: 右键上下文菜单是在用户点击鼠标右键时显示的菜单。在Swing中,我们可以使用JPopupMenu类来创建这样的菜单,并将其与特定...

    第17章简易记事本——工具栏与菜单.ppt

    在简易记事本的实现中,工具栏、菜单栏和弹出菜单结合使用,可以提供常见的文本编辑功能,如剪切、复制、粘贴等。通过文件对话框(JFileChooser)和文件读写流(如FileReader和FileWriter)可以实现文件的打开、保存...

    文本编辑器 java课程设计实验报告 完整 预览显示不全 含全部代码.doc

    - **编辑操作**:复制、剪切、粘贴、查找和替换等基本文本编辑功能,这些通常由`Clipboard`类和`TextAction`类支持。 - **插入对象**:虽然在这个简短的描述中没有详细说明,但通常在文本编辑器中可能允许插入图片...

    java实现记事本[参考].pdf

    在Java编程语言中,创建一个简单的记事本应用...这个Java记事本程序通过整合上述技术,提供了一个基本的文本编辑环境,包括文件操作、编辑功能(如剪切、复制、粘贴、删除、全选等)、撤销/重做以及自定义的界面外观。

    java做的简易记事本含快捷键查找替换等收集.pdf

    该程序包含文件操作(如新建、打开、保存、另存为和退出),文本编辑(查找、替换),格式调整(如换行和字体颜色),以及右键菜单支持(撤销、复制、剪切、粘贴和全选)。此外,它还集成了快捷键功能,尽管可能未...

    java课程设计报告-java课程设计.pdf

    - **需求分析**:设计的目标是一个图形用户界面友好的文本编辑器,具备基本的文本编辑功能,如新建、打开、保存、剪切、复制、粘贴、查找和替换等。此外,它还应具有右键快捷方式,能够监控文本内容的变化和光标的...

Global site tag (gtag.js) - Google Analytics