`
SuperCustomer
  • 浏览: 110947 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

弹出菜单

阅读更多
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) {
	}

}

 

分享到:
评论

相关推荐

    js固定区块右键弹出菜单代码.zip

    在JavaScript编程领域中,右键弹出菜单是一种常见的交互效果,用于提供用户自定义的操作选项。这个"js固定区块右键弹出菜单代码.zip"压缩包包含了一个实现此类功能的代码示例。在这个项目中,开发者可以学习如何利用...

    vc++个性化的弹出菜单

    在VC++编程中,创建个性化的弹出菜单是一项常见的任务,尤其在用户界面(UI)设计中,这样的功能能够显著提升用户体验。"vc++个性化的弹出菜单"这一主题主要涉及以下知识点: 1. **菜单资源**:在VC++中,菜单通常...

    实例9 鼠标右键弹出菜单

    在PowerBuilder中,鼠标右键弹出菜单是一种常见的交互设计,它允许用户通过单击鼠标右键触发一个快捷菜单,从而执行相应的操作。这个实例9就是针对这一功能的详细教学,非常适合初学者来学习和实践。 PowerBuilder...

    Java弹出菜单,为JTextArea添加了右键弹出式菜单,实现了复制、粘贴、剪切

    Java 弹出菜单详解 Java 弹出菜单是 Java 图形用户界面编程中的一种常用控件,用于提供给用户更多的交互方式。在 Java 中,弹出菜单通常是通过 JPopupMenu 类来实现的。今天,我们将学习如何使用 Java 弹出菜单来为...

    MFC编写高级弹出菜单

    "高级弹出菜单"是MFC中一个重要的概念,用于创建功能丰富的用户界面。在Windows应用中,菜单通常用于提供用户与程序交互的各种选项。高级弹出菜单不仅包括基本的菜单项,还可能包含子菜单、图像、自定义绘制等特性,...

    微信小程序实现弹出菜单功能

    点击标签栏弹出菜单,并且出现透明遮罩; 遮罩优先级在弹出框之下; 弹出框内标签的设置; 滚动栏滚动条的隐藏 如何解决? 弹性布局,横向,三者平分整栏; 状态监听点击事件,数据控制hide或者show,通过rgba...

    Qt pushbutton按钮弹出菜单

    以下是关于“Qt pushbutton按钮弹出菜单”的详细知识点: 1. **QPushButton类**: QPushButton是Qt GUI库中的一个类,用于创建具有文本或图标的标准按钮。它继承自QAbstractButton,提供了单击、双击等多种事件...

    Qt实现鼠标右击弹出菜单

    在Qt框架中,实现鼠标右键点击弹出菜单是一项常见的需求,这主要涉及到信号与槽机制、QMenu类以及QAction类的使用。下面将详细解释如何在Qt5中实现这一功能。 首先,QMenu是Qt中用于创建下拉菜单或弹出菜单的类,而...

    Flutter高阶技术:如何实现自定义弹出菜单框

    在Flutter开发中,自定义弹出菜单框是提高应用交互性和用户体验的重要手段。Flutter作为一个跨平台的移动开发框架,提供了丰富的API和工具,使得开发者能够轻松实现这样的功能。本篇文章将深入探讨如何在Flutter中...

    android自定义popupwindow仿微信右上角弹出菜单效果

    本文将详细介绍如何使用`PopupWindow`在Android应用中模仿微信右上角的弹出菜单效果。 首先,我们需要理解`PopupWindow`的基本用法。`PopupWindow` 是一个可以在屏幕任意位置显示的窗口,它不依附于任何Activity,...

    弹出菜单代码文件

    在网页设计中,弹出菜单是一种常见的交互元素,它能够以非侵入式的方式展示附加信息或提供操作选项。这个“弹出菜单代码文件”显然包含了一段使用JavaScript编写的弹出菜单实现代码,这对于学习网页开发特别是...

    当当网鼠标经过弹出菜单.rar

    在IT行业中,网页交互设计是用户体验的关键因素之一,而“鼠标经过弹出菜单”就是这种交互设计中的常见手法。这个例子以"当当网鼠标经过弹出菜单.rar"为标题,意味着我们将探讨当当网网站上的一种特定的交互功能,即...

    jquery弹出菜单

    而"jQuery弹出菜单"是jQuery库在用户界面交互中常见的应用之一,用于创建交互性强、用户体验良好的下拉或浮动菜单。 在jQuery中,实现弹出菜单通常涉及到以下几个核心知识点: 1. **选择器(Selectors)**:jQuery...

    android 底部弹出菜单(带透明背景)

    在Android开发中,底部弹出菜单(通常称为Bottom Sheet或者PopupWindow)是一种常见的交互元素,用于展示临时性的操作选项或信息。本篇文章将详细讲解如何创建一个带有透明背景的底部弹出菜单,以及相关的实现技术和...

    qt实现右击鼠标弹出菜单

    总结,通过以上步骤,我们可以成功地在Qt应用中实现右键单击弹出菜单的功能。这个小例子对初学者来说是非常有帮助的,它涵盖了Qt界面编程的基础知识,包括事件处理、菜单操作以及字符串的国际化处理。在实际开发中,...

    右侧弹出菜单

    "右侧弹出菜单"是一种常见的UI设计模式,尤其适用于有限的空间展示更多选项。这种设计常见于网页、移动应用以及桌面软件中,它能有效地节省屏幕空间,同时提供方便的操作。 标题 "右侧弹出菜单" 指的是在用户点击...

    ios实现点击button弹出菜单效果

    在实际项目中,为了使弹出菜单看起来更美观,你还可以考虑自定义UITableViewCell的样式,或者使用第三方库如PopupMenuController或SwiftPMMenu等,它们提供了更高级的功能和定制选项。 最后,别忘了在不需要菜单时...

    Android 按Menu弹出菜单

    在Android应用开发中,"按Menu弹出菜单"是一个常见的功能,它允许用户访问应用程序的主要操作选项。在Android系统中,Menu通常是通过按下设备屏幕右上角的菜单按钮或者长按Home键来触发的。这种九宫格样式的菜单设计...

    VC动态创建弹出菜单

    在VC++编程环境中,动态创建弹出菜单是一项重要的技能,特别是在开发用户界面丰富的应用程序时。动态菜单能够根据用户的操作或程序的状态实时改变,提供更灵活的交互体验。下面将详细介绍如何在VC++中实现这一功能。...

    仿QQ空间底部弹出菜单

    在Android应用开发中,设计和实现用户界面是至关重要的,其中一种常见的交互方式就是底部弹出菜单。"仿QQ空间底部弹出菜单"是借鉴了QQ空间应用中的一个功能,它能够提供一种优雅的方式来展示多个操作选项,通常用于...

Global site tag (gtag.js) - Google Analytics