`
SuperCustomer
  • 浏览: 110819 次
  • 性别: 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) {
	}

}

 

分享到:
评论

相关推荐

    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编写的弹出菜单实现代码,这对于学习网页开发特别是...

    jquery弹出菜单

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

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

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

    右侧弹出菜单

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

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

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

    Android 按Menu弹出菜单

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

    VC动态创建弹出菜单

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

    仿QQ空间底部弹出菜单

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

    qt实现右击鼠标弹出菜单

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

    微信小程序--弹出菜单

    在微信小程序的开发过程中,实现“弹出菜单”是一项常见且实用的功能。弹出菜单的设计理念是为了提供一种高效、简洁的交互方式,用户可以通过点击一个图标或者按钮,来触发一个隐藏的菜单,而这个菜单不会占用屏幕的...

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

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

    仿QQ顶部弹出菜单

    "仿QQ顶部弹出菜单"是一种常见的UI设计手法,它旨在模仿QQ这款流行即时通讯软件的菜单弹出效果,为用户提供便捷的操作方式。这种设计通常用于在用户点击某个按钮或图标时,展示一列相关的功能选项,这些选项通常以...

    cxGrid弹出菜单和TcxCustomGridHitTest

    `TcxCustomGridHitTest`是`cxGrid`组件中的一个重要类,它主要用于确定鼠标点击的位置落在了`cxGrid`的哪个部分,这对于实现自定义行为,如弹出菜单等,具有关键作用。接下来,我们将深入探讨`cxGrid`的弹出菜单功能...

    仿京东商城左侧弹出菜单

    在构建一个类似京东商城的电子商务网站时,左侧弹出菜单是一个关键的设计元素,它能够提供良好的用户体验并方便用户快速导航到他们感兴趣的类别。这个“仿京东商城左侧商品展示的浮动层弹出菜单”是一个实现此类功能...

Global site tag (gtag.js) - Google Analytics