import java.awt.Container;
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;
public class TestPopup extends JFrame implements ActionListener, MouseListener {
private static final long serialVersionUID = 1L;
Container container;
JPopupMenu jpm;
JMenuItem copy;
JMenuItem paste;
JMenuItem cut;
JMenuItem select;
JMenuItem delete;
JScrollPane jsp;
JTextArea jta;
public static void main(String[] args) {
new TestPopup();
}
public TestPopup() {
super("PopupMenu");
initUI();
}
public void initUI() {
container = getContentPane();
setBounds(300, 300, 500, 390);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jta = new JTextArea();
jta.setLineWrap(true);
jsp = new JScrollPane(jta);
jpm = new JPopupMenu();
copy = new JMenuItem("copy");
paste = new JMenuItem("paste");
cut = new JMenuItem("cut");
delete=new JMenuItem("delete");
select=new JMenuItem("select");
copy.setAccelerator(KeyStroke.getKeyStroke('C', InputEvent.CTRL_MASK));
paste.setAccelerator(KeyStroke.getKeyStroke('V', InputEvent.CTRL_MASK));
cut.setAccelerator(KeyStroke.getKeyStroke('X', InputEvent.CTRL_MASK));
delete.setAccelerator(KeyStroke.getKeyStroke('D',InputEvent.CTRL_MASK));
select.setAccelerator(KeyStroke.getKeyStroke('A',InputEvent.CTRL_MASK));
jpm.add(copy);
jpm.add(paste);
jpm.add(cut);
jpm.add(delete);
jpm.add(select);
jta.add(jpm);
container.add(jsp);
jta.addMouseListener(this);
copy.addActionListener(this);
paste.addActionListener(this);
cut.addActionListener(this);
delete.addActionListener(this);
select.addActionListener(this);
setVisible(true);
}
/**
* 剪切板上是否有文本数据
* @return
*/
public boolean hasSelected() {
boolean result = false;
Clipboard clipboard = getToolkit().getSystemClipboard();
Transferable content = clipboard.getContents(this);
try {
if (content.getTransferData(DataFlavor.stringFlavor) instanceof String) {
result = true;
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 是否有文本被选中
* @return
*/
public boolean hasSelect() {
boolean result = false;
int start = jta.getSelectionStart();
int end = jta.getSelectionEnd();
if (start != end) {
result = true;
}
return result;
}
public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand();
if (cmd.equals(copy.getText())) {
jta.copy();
} else if (cmd.equals(paste.getText())) {
jta.paste();
} else if (cmd.equals(cut.getText())) {
jta.cut();
}else if(cmd.equals(delete.getText())){
StringBuffer sb=new StringBuffer(jta.getText());
int start=jta.getSelectionStart();
int end=jta.getSelectionEnd();
sb.delete(start,end);
jta.setText(sb.toString());
}else if(cmd.equals(select.getText())){
jta.selectAll();
}
}
public void mouseClicked(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
if (e.getButton() == MouseEvent.BUTTON3) {
copy.setEnabled(hasSelect());
paste.setEnabled(hasSelected());
cut.setEnabled(hasSelect());
delete.setEnabled(hasSelect());
jpm.show(this, e.getX(), e.getY());
}
}
public void mouseReleased(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
}
分享到:
相关推荐
在JavaScript编程领域中,右键弹出菜单是一种常见的交互效果,用于提供用户自定义的操作选项。这个"js固定区块右键弹出菜单代码.zip"压缩包包含了一个实现此类功能的代码示例。在这个项目中,开发者可以学习如何利用...
在VC++编程中,创建个性化的弹出菜单是一项常见的任务,尤其在用户界面(UI)设计中,这样的功能能够显著提升用户体验。"vc++个性化的弹出菜单"这一主题主要涉及以下知识点: 1. **菜单资源**:在VC++中,菜单通常...
在PowerBuilder中,鼠标右键弹出菜单是一种常见的交互设计,它允许用户通过单击鼠标右键触发一个快捷菜单,从而执行相应的操作。这个实例9就是针对这一功能的详细教学,非常适合初学者来学习和实践。 PowerBuilder...
Java 弹出菜单详解 Java 弹出菜单是 Java 图形用户界面编程中的一种常用控件,用于提供给用户更多的交互方式。在 Java 中,弹出菜单通常是通过 JPopupMenu 类来实现的。今天,我们将学习如何使用 Java 弹出菜单来为...
"高级弹出菜单"是MFC中一个重要的概念,用于创建功能丰富的用户界面。在Windows应用中,菜单通常用于提供用户与程序交互的各种选项。高级弹出菜单不仅包括基本的菜单项,还可能包含子菜单、图像、自定义绘制等特性,...
点击标签栏弹出菜单,并且出现透明遮罩; 遮罩优先级在弹出框之下; 弹出框内标签的设置; 滚动栏滚动条的隐藏 如何解决? 弹性布局,横向,三者平分整栏; 状态监听点击事件,数据控制hide或者show,通过rgba...
以下是关于“Qt pushbutton按钮弹出菜单”的详细知识点: 1. **QPushButton类**: QPushButton是Qt GUI库中的一个类,用于创建具有文本或图标的标准按钮。它继承自QAbstractButton,提供了单击、双击等多种事件...
在Qt框架中,实现鼠标右键点击弹出菜单是一项常见的需求,这主要涉及到信号与槽机制、QMenu类以及QAction类的使用。下面将详细解释如何在Qt5中实现这一功能。 首先,QMenu是Qt中用于创建下拉菜单或弹出菜单的类,而...
在Flutter开发中,自定义弹出菜单框是提高应用交互性和用户体验的重要手段。Flutter作为一个跨平台的移动开发框架,提供了丰富的API和工具,使得开发者能够轻松实现这样的功能。本篇文章将深入探讨如何在Flutter中...
本文将详细介绍如何使用`PopupWindow`在Android应用中模仿微信右上角的弹出菜单效果。 首先,我们需要理解`PopupWindow`的基本用法。`PopupWindow` 是一个可以在屏幕任意位置显示的窗口,它不依附于任何Activity,...
在网页设计中,弹出菜单是一种常见的交互元素,它能够以非侵入式的方式展示附加信息或提供操作选项。这个“弹出菜单代码文件”显然包含了一段使用JavaScript编写的弹出菜单实现代码,这对于学习网页开发特别是...
在IT行业中,网页交互设计是用户体验的关键因素之一,而“鼠标经过弹出菜单”就是这种交互设计中的常见手法。这个例子以"当当网鼠标经过弹出菜单.rar"为标题,意味着我们将探讨当当网网站上的一种特定的交互功能,即...
而"jQuery弹出菜单"是jQuery库在用户界面交互中常见的应用之一,用于创建交互性强、用户体验良好的下拉或浮动菜单。 在jQuery中,实现弹出菜单通常涉及到以下几个核心知识点: 1. **选择器(Selectors)**:jQuery...
在Android开发中,底部弹出菜单(通常称为Bottom Sheet或者PopupWindow)是一种常见的交互元素,用于展示临时性的操作选项或信息。本篇文章将详细讲解如何创建一个带有透明背景的底部弹出菜单,以及相关的实现技术和...
总结,通过以上步骤,我们可以成功地在Qt应用中实现右键单击弹出菜单的功能。这个小例子对初学者来说是非常有帮助的,它涵盖了Qt界面编程的基础知识,包括事件处理、菜单操作以及字符串的国际化处理。在实际开发中,...
"右侧弹出菜单"是一种常见的UI设计模式,尤其适用于有限的空间展示更多选项。这种设计常见于网页、移动应用以及桌面软件中,它能有效地节省屏幕空间,同时提供方便的操作。 标题 "右侧弹出菜单" 指的是在用户点击...
在实际项目中,为了使弹出菜单看起来更美观,你还可以考虑自定义UITableViewCell的样式,或者使用第三方库如PopupMenuController或SwiftPMMenu等,它们提供了更高级的功能和定制选项。 最后,别忘了在不需要菜单时...
在Android应用开发中,"按Menu弹出菜单"是一个常见的功能,它允许用户访问应用程序的主要操作选项。在Android系统中,Menu通常是通过按下设备屏幕右上角的菜单按钮或者长按Home键来触发的。这种九宫格样式的菜单设计...
在VC++编程环境中,动态创建弹出菜单是一项重要的技能,特别是在开发用户界面丰富的应用程序时。动态菜单能够根据用户的操作或程序的状态实时改变,提供更灵活的交互体验。下面将详细介绍如何在VC++中实现这一功能。...
在Android应用开发中,设计和实现用户界面是至关重要的,其中一种常见的交互方式就是底部弹出菜单。"仿QQ空间底部弹出菜单"是借鉴了QQ空间应用中的一个功能,它能够提供一种优雅的方式来展示多个操作选项,通常用于...