`

实现JTextfield 的右键 复制、剪切、粘贴功能。

阅读更多
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.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JTextField;
import javax.swing.KeyStroke;

//实现JTextfield 的复制、剪切、粘贴功能。

public class MJTextField extends JTextField implements MouseListener {

	private static final long serialVersionUID = -2308615404205560110L;

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

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

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

}
0
0
分享到:
评论

相关推荐

    计算机专业Java专业课程实验+CRM客户关系管理系统设计学生课程实验.zip

    学生课程实验:大二计算机专业JAVA专业课的课程实验,设计一个CRM的客户关系管理系统,含项目源码、数据库、以及汇报PPT。 内容目录: ├── readme.txt ├── 基于Java的CRM客户关系管理系统的设计和实现数据库 │ └── crm.sql ├── 基于Java的CRM客户关系管理系统的设计和实现项目源代码 │ └── MyCrm.zip ├── 基于Java的CRM客户关系管理系统的设计和实现项目运行截图 │ ├── 主界面.PNG │ ├── 产品信息管理.PNG │ ├── 客户信息添加.PNG │ ├── 登录.PNG │ └── 角色管理.PNG ├── 视频 │ ├── 1CRM客户关系管理系统_项目的配置以及启动.url │ ├── 2CRM客户关系管理系统_工作桌面_信息中心_邮箱功能_客户管理_订单管理.url │ └── 3CRM客户关系管理系统_财务管理_产品管理_部门管理_岗位管理_数据回收站_权限管.url └── 论文 ├── 基于Java的现代数字化CRM客户关系管理系统答辩ppt.pptx

    node-v12.17.0-linux-arm64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    常见移动变现术语(mobile monetization).docx

    常见移动变现术语(mobile monetization).docx

    废物转运站:决策指南 垃圾转运站:决策指南

    废物转运站:决策指南

    冰蓄冷的一些资料.zip

    冰蓄冷的一些资料:包括系统的原理图,设计计算等

    8. Django 表单与模型

    配套资源

    【蓝桥杯嵌入式】第七届省赛 - 模拟液位检测告警系统

    开源 【蓝桥杯嵌入式】第七届省赛 - 模拟液位检测告警系统

    基于matlab-gmm-dtw的说话人识别源码.zip

    本代码是基于DTW(动态时间规则)算法以及GMM(混合高斯模型)进行的说话人识别的程序。 现在大部分的说话人识别模型是基于MFCC的混合高斯模型设计的,但基于此的识别方式会受说话人之间相互模仿的影响,所以增加了一种特征参数,基音周期。 基因周期包含了语音频率结构信息,不易模仿。同时若直接对高斯混合模型进行解混会使识别速度很慢,所以先用DTW再用GMM可以极大地缩减识别时间。 注意:此代码仅为说话人识别代码,如需进行语音文件录制请自行添加面。 为了使使用更加条理清晰,建议后续添加说话人按照freespeech中已经建成的文件夹为模板并分类存放说话人语音文件,将对应说话人的语音文件保存在对应的文件夹中。 此建议仅为使使用者更加条理清晰,语音文件也可直接存放在freespeech文件夹中。 确认电脑安装配置了voicebox后,直接运行test4.m文件,会出现gui界面,接下来的操作,根据界面提示进行即可。 重新训练数据库,可在上述运行界面中删除数据库后重新训练即可,也可只知删除部分人的数据。 程序使用许先建立数据库。录制的语音时间太长会使程序生成数据库和数据比对的时间加长,请耐

    Honeywell BR-310 条形码扫描器手册

    Honeywell BR-310 条形码扫描器手册

    QT6实现的附带文件传输协议的串口终端

    QT6实现的附带文件传输协议的串口终端 QT6实现的附带文件传输协议的串口终端

    unity开发入门教程.zip

    Unity是一个流行的跨平台游戏开发引擎,它允许开发者使用C#等语言创建2D和3D游戏。以下是一个Unity开发的基本入门教程: 1. 安装Unity 首先,你需要从Unity的官方网站下载并安装Unity Hub和Unity编辑器。Unity Hub是一个用于管理Unity版本和项目的工具。 2. 创建新项目 打开Unity Hub,点击“New”来创建一个新项目。选择你需要的Unity版本、模板(例如2D或3D)和其他设置。 3. 熟悉Unity界面 Unity的界面主要由以下几个部分组成: Hierarchy:显示场景中的所有游戏对象。 Project:显示项目的所有资源,如场景、模型、材质、脚本等。 Inspector:显示当前选中游戏对象的详细信息和属性。 Scene:显示当前场景的3D视图,你可以在这里编辑游戏对象。 Game:显示游戏运行时的视图。

    基于MobileFaceNet的静默活体检测系统的设计与实现python源码+项目说明+模型.zip

    基于MobileFaceNet的静默活体检测系统的设计与实现python源码+项目说明+模型.zip 1、代码 2、实验环境 Windows 10(64位) CPU:AMD Ryzen 7 5800H RAM:16G GPU:NVIDIA RTX3060 开发工具:IntelliJ IDEA以及PyCharm 相关配置及版本: Chrome 90.0.4430.212 SpringBoot 2.2.6 Java JDK8 MyBatis 2.1.1 Mysql 8.0.25 Python 3.8 pytorch 1.7.1 torchvision 0.8.2 numpy 1.18.5 tensorboard 2.4.1 pandas 1.2.3 cuda 11.0.2 cudnn 11.2 torch 1.8.1 torchvision 0.9.1 3、模型训练命令 python train.py 4、模型测试命令 python test.py 5、运行检测模块命令 python detect.py --source 0

    金融产品营销方案设计33.docx

    金融产品营销方案设计33.docx

    识别说话人的性别和估计说话人的年龄 Matlab+MatlabGUI+SVM源码.zip

    识别说话人的性别和估计说话人的年龄 Matlab+MatlabGUI+SVM源码.zip识别说话人的性别和估计说话人的年龄 Matlab+MatlabGUI+SVM源码.zip识别说话人的性别和估计说话人的年龄 Matlab+MatlabGUI+SVM源码.zip识别说话人的性别和估计说话人的年龄 Matlab+MatlabGUI+SVM源码.zip识别说话人的性别和估计说话人的年龄 Matlab+MatlabGUI+SVM源码.zip识别说话人的性别和估计说话人的年龄 Matlab+MatlabGUI+SVM源码.zip识别说话人的性别和估计说话人的年龄 Matlab+MatlabGUI+SVM源码.zip

    Mysql数据库实战教程&案例&相关项目

    MySQL数据库作为一个广泛使用的开源关系型数据库管理系统,它在Web开发、数据管理和企业级应用中扮演着重要角色。以下是对MySQL数据库实战教程、案例及相关项目的描述: MySQL数据库实战教程: 教程目的:教程旨在教授学习者如何高效地使用MySQL进行数据存储、查询、更新和管理。通过实战案例,学习者将掌握数据库设计、SQL语言的高级应用、性能优化等关键技能。 核心内容: 数据库设计:学习关系型数据库的设计原则,包括实体关系模型、规范化理论等。 SQL语言:深入理解SQL语句的编写,包括数据的增删改查(CRUD)操作。 数据类型与索引:掌握MySQL支持的数据类型以及如何设计索引以提高查询效率。 存储引擎:了解不同的存储引擎如InnoDB、MyISAM的特性及其适用场景。 性能优化:学习如何分析查询性能并进行优化,包括查询重写和数据库调优。 实战案例: 案例一:电商数据库管理:设计一个电商网站的数据库,实现商品展示、用户登录、购物车管理等功能。 案例二:金融交易系统:构建一个金融交易数据库,模拟交易记录的存储和查询,包括实时数据分析。 案例三:社交网络平台:开发一个社交网络

    b0900febba0972d39e8ab81732d7a34c.mp3

    b0900febba0972d39e8ab81732d7a34c.mp3

    Vision Transformer 网络对7种小麦叶片病害分类,包含训练权重和数据集、迁移学习

    1.网络使用的是Transformer 网络中的 ViT 模型 2.数据集是7分类的小麦叶片病害(水泡,褐色斑点) 3.网络训练的过程中,会对数据集的训练集图像求取灰度值的均值和方差,预处理处理包括随机裁剪、中心裁剪等等。网络初始化会自动载入ViT 官方的预训练权重(transformer网络收敛很慢,不经过预训练效果会很差,因此本篇代码自动载入) 4.train.py 会自动生成数据集类别的 json 文件,所以不需要自己定义。train.py 训练完成会生成训练集的loss、测试集的loss,训练集的accuracy、测试集的accuracy,并生成对应的曲线保存至run_results文件内。训练完成会计算训练集和测试集的混淆矩阵,计算召回率、特异度啥的 5.预测代码是predict.py,只需要将待预测的图像放在inference文件夹下,代码会自动将该文件下所有的图像进行预测,并在原图像左上角写入最大的前三个类别和概率 【如果想要训练自己的数据集,参考README文件】 【本项目测试了30个epoch,准确率为0.88,网络未收敛,加大轮次可以增加精度】

    惠普服务器安装说明

    惠普服务器安装说明

    python学习导航.txt

    python烟花代码

    node-v12.10.0-linux-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

Global site tag (gtag.js) - Google Analytics