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) {
}
}
分享到:
相关推荐
在Java编程环境中,有时我们需要对用户的输入事件进行特定的控制,比如在开发特定的应用程序时,可能希望禁用鼠标右键菜单或者键盘某些特定按键的功能。这个任务涉及到Java的事件处理机制,主要涵盖AWT(Abstract ...
在本文中,我们将探讨如何在不使用继承的情况下,通过组合`JTextField`和`JComboBox`来实现这一功能。 首先,我们需要理解自动完成的核心要求:保持`JTextField`的外观,但利用`JComboBox`的下拉列表特性。为了达到...
在标准的`JTextField`中,虽然没有内置的自动联想或提示功能,但开发者可以通过自定义和扩展`JTextField`的功能来实现类似Google输入框的效果。 这篇原创文章描述的是如何在Java中封装`JTextField`,以实现输入时的...
通过以上分析,我们可以看到如何通过自定义`Document`类来实现对`JTextField`的输入限制,以及如何通过扩展`JTextField`来添加额外的功能,如鼠标滚轮控制。这种方法不仅可以应用于限制数字输入的情况,还可以根据...
上述代码实现了一种基本的关键字高亮显示功能,能够实现在文本区域 (`jTextArea1`) 中对特定关键字 (`jTextField1` 中输入的文本) 进行颜色高亮。此方法的核心在于关键字的搜索与匹配以及使用 `Highlighter` 接口...
通过这种方式,我们可以在`JTextField`中实现输入位数的实时监听和限制。这种机制不仅可以防止用户输入过长的文本,还可以用于实现各种输入验证,例如只允许数字输入、字母输入或者特定格式的文本等。 在实际项目中...
"支持右键菜单复制粘贴"意味着控件提供了上下文菜单操作,用户可以通过右键点击来复制和粘贴IP地址,这是对标准JTextField功能的一个扩展。 "支持局部/全部选中粘贴"意味着用户可以选择性地复制IP地址的一部分或者...
标题中的“带水印(背景)的JTextField”指的是在Java Swing编程中,为JTextField组件添加水印或背景图像的功能。在Java图形用户界面设计中,JTextField是用于接收单行文本输入的基本组件。而水印效果通常是指在...
实现圆角矩形边框,hint文字,主要代码: Graphics2D g2d=(Graphics2D) g; g2d.setStroke(new BasicStroke(2,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND)); g2d.setComposite(AlphaComposite.getInstance...
此外,记事本的其他功能如查找替换、复制粘贴等,可以通过JTextArea提供的方法实现。例如,使用select()和copy()方法实现选中文本的复制,paste()方法进行粘贴,find()或replaceAll()方法处理查找和替换。 此Demo的...
这个话题主要集中在如何利用Java实现一个具有基础功能的写字板应用,比如复制、粘贴、剪切、查找和替换等。下面我们将详细探讨这些功能的实现方法。 首先,我们需要创建一个基本的文本编辑界面。在Java中,我们可以...
JTextField_Example.java
本知识点将深入探讨如何扩展JTextField实现这样的弹窗辅助输入功能,并结合JTable进行使用。 首先,`PopWindowTextFiled.java`是关键类,它扩展了JTextField,增加了弹窗显示功能。这个类需要实现一个监听机制,...
本文将详细介绍JTextField的使用方法、功能特性以及如何在实际编程中应用。 1. **JTextField简介** JTextField是javax.swing.text包下的一个类,它提供了单行文本输入的功能。用户可以在文本框内输入、修改或查看...
这个程序通常会包含文件操作(如新建、打开、保存、打印)、文本编辑(如复制、剪切、粘贴、删除)以及格式调整等功能。以下是一个简单的Java记事本程序实现的关键知识点: 1. **主类与窗口类**: - `记事本.java`...
这篇博客“控制JTextField的输入”主要探讨了如何实现这些功能。 首先,我们可以使用`DocumentFilter`来过滤`JTextField`中的输入。`DocumentFilter`是`javax.swing.text.Document`接口的一个子类,它可以拦截并...
当用户在文本区域内右击时,会弹出一个包含复制、剪切、粘贴和删除选项的菜单。 - **上下文菜单的实现**: - 通过 `JPopupMenu qjmenu` 对象来创建上下文菜单。 - 菜单项通过 `JMenuItem` 类创建,并添加至 `...
JTextField 还提供了多种复制粘贴相关方法,例如: * `setSelectionStart(int selectionStart)`: 设置光标开始位置。 * `setSelectionEnd(int selectionEnd)`: 设置光标结束位置。 * `copy()`: 复制选中部分文本。 ...
2. **编辑操作**:利用剪贴板API实现剪切、复制和粘贴功能,结合文本选择和查找/替换方法提供编辑功能。 3. **格式设置**:通过JTextField或JTextArea组件结合颜色选择器实现字体、字号和颜色的改变。 4. **对象插入...
"复制"、"剪切"和"粘贴"功能可以借助于`Clipboard`类实现,这是Java提供的剪贴板功能,允许程序与系统剪贴板进行数据交换。 在设计这个记事本时,开发者还考虑到了界面美观性。Swing提供了丰富的组件样式和布局管理...