`

实现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屏蔽鼠标右键和键盘相关事件

    在Java编程环境中,有时我们需要对用户的输入事件进行特定的控制,比如在开发特定的应用程序时,可能希望禁用鼠标右键菜单或者键盘某些特定按键的功能。这个任务涉及到Java的事件处理机制,主要涵盖AWT(Abstract ...

    JTextField添加“自动完成”

    在本文中,我们将探讨如何在不使用继承的情况下,通过组合`JTextField`和`JComboBox`来实现这一功能。 首先,我们需要理解自动完成的核心要求:保持`JTextField`的外观,但利用`JComboBox`的下拉列表特性。为了达到...

    原创:java封装了的JTextField,可以达到google输入框的效果

    在标准的`JTextField`中,虽然没有内置的自动联想或提示功能,但开发者可以通过自定义和扩展`JTextField`的功能来实现类似Google输入框的效果。 这篇原创文章描述的是如何在Java中封装`JTextField`,以实现输入时的...

    JTextField限制最大数字.txt

    通过以上分析,我们可以看到如何通过自定义`Document`类来实现对`JTextField`的输入限制,以及如何通过扩展`JTextField`来添加额外的功能,如鼠标滚轮控制。这种方法不仅可以应用于限制数字输入的情况,还可以根据...

    jTextField中关键字加颜色

    上述代码实现了一种基本的关键字高亮显示功能,能够实现在文本区域 (`jTextArea1`) 中对特定关键字 (`jTextField1` 中输入的文本) 进行颜色高亮。此方法的核心在于关键字的搜索与匹配以及使用 `Highlighter` 接口...

    JTextField输入时实现位数监听

    通过这种方式,我们可以在`JTextField`中实现输入位数的实时监听和限制。这种机制不仅可以防止用户输入过长的文本,还可以用于实现各种输入验证,例如只允许数字输入、字母输入或者特定格式的文本等。 在实际项目中...

    基于Swing的IP地址输入控件

    "支持右键菜单复制粘贴"意味着控件提供了上下文菜单操作,用户可以通过右键点击来复制和粘贴IP地址,这是对标准JTextField功能的一个扩展。 "支持局部/全部选中粘贴"意味着用户可以选择性地复制IP地址的一部分或者...

    带水印(背景)的JTextField

    标题中的“带水印(背景)的JTextField”指的是在Java Swing编程中,为JTextField组件添加水印或背景图像的功能。在Java图形用户界面设计中,JTextField是用于接收单行文本输入的基本组件。而水印效果通常是指在...

    java JTextField美化Demo

    实现圆角矩形边框,hint文字,主要代码: Graphics2D g2d=(Graphics2D) g; g2d.setStroke(new BasicStroke(2,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND)); g2d.setComposite(AlphaComposite.getInstance...

    用java编写的记事本所有功能都实现demo

    此外,记事本的其他功能如查找替换、复制粘贴等,可以通过JTextArea提供的方法实现。例如,使用select()和copy()方法实现选中文本的复制,paste()方法进行粘贴,find()或replaceAll()方法处理查找和替换。 此Demo的...

    关于JAVA写字板(粘贴,查找,替换。。。)

    这个话题主要集中在如何利用Java实现一个具有基础功能的写字板应用,比如复制、粘贴、剪切、查找和替换等。下面我们将详细探讨这些功能的实现方法。 首先,我们需要创建一个基本的文本编辑界面。在Java中,我们可以...

    JTextField_Example.java

    JTextField_Example.java

    弹窗辅助输入JTextField

    本知识点将深入探讨如何扩展JTextField实现这样的弹窗辅助输入功能,并结合JTable进行使用。 首先,`PopWindowTextFiled.java`是关键类,它扩展了JTextField,增加了弹窗显示功能。这个类需要实现一个监听机制,...

    java JTextField组件的使用

    本文将详细介绍JTextField的使用方法、功能特性以及如何在实际编程中应用。 1. **JTextField简介** JTextField是javax.swing.text包下的一个类,它提供了单行文本输入的功能。用户可以在文本框内输入、修改或查看...

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

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

    控制JTextField的输入

    这篇博客“控制JTextField的输入”主要探讨了如何实现这些功能。 首先,我们可以使用`DocumentFilter`来过滤`JTextField`中的输入。`DocumentFilter`是`javax.swing.text.Document`接口的一个子类,它可以拦截并...

    JAVA实现记事本的源代码

    当用户在文本区域内右击时,会弹出一个包含复制、剪切、粘贴和删除选项的菜单。 - **上下文菜单的实现**: - 通过 `JPopupMenu qjmenu` 对象来创建上下文菜单。 - 菜单项通过 `JMenuItem` 类创建,并添加至 `...

    Java Swing JTextField文本框的代码示例

    JTextField 还提供了多种复制粘贴相关方法,例如: * `setSelectionStart(int selectionStart)`: 设置光标开始位置。 * `setSelectionEnd(int selectionEnd)`: 设置光标结束位置。 * `copy()`: 复制选中部分文本。 ...

    java文本编辑器.

    2. **编辑操作**:利用剪贴板API实现剪切、复制和粘贴功能,结合文本选择和查找/替换方法提供编辑功能。 3. **格式设置**:通过JTextField或JTextArea组件结合颜色选择器实现字体、字号和颜色的改变。 4. **对象插入...

    Java实现的记事本程序

    "复制"、"剪切"和"粘贴"功能可以借助于`Clipboard`类实现,这是Java提供的剪贴板功能,允许程序与系统剪贴板进行数据交换。 在设计这个记事本时,开发者还考虑到了界面美观性。Swing提供了丰富的组件样式和布局管理...

Global site tag (gtag.js) - Google Analytics