`

实现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编程 记事本 全部功能都实现.docx

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

    JAVA实现记事本的源代码

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

    java程序设计简易写字板

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

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

    `KeyHandler`可能包含了对特定按键事件的处理逻辑,比如复制、粘贴、剪切等。 8. **JPopupMenu**:用于创建弹出菜单,常与右键点击关联。在代码中,`popupMenu`可能用于实现文本区域的右键上下文菜单。 9. **...

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

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

    NetBeans IDE 6.0 用户界面设计

    NetBeans 6.0集成了对SwingApplicationFramework的支持,并提供了一组标准图标(如复制、粘贴和剪切等),使开发者能够更快地构建出功能丰富的应用程序。 **如何创建SwingApplicationFramework项目** 要利用...

    Java Swing JTextArea文本区域的实现示例

    Java Swing JTextArea 文本区域的实现示例 Java Swing JTextArea 文本区域是 Java Swing 库中的一种基本组件,用于编辑多行文本。JTextArea 组件可以编辑多行文本,并提供了许多有用的方法来处理文本。 概述 ...

    小型简单的记事本程序

    JTextField findtxt,repltxt; //find为查找对话框的输入文本区,replace对话框的输入文本区 Font newfont; JButton findenter,replb; //find为查找对话框,replace对话框的确定按钮 JLabel state=new JLabel(" ...

Global site tag (gtag.js) - Google Analytics