小编典典

右键单击效果很好-在Swing中,不要获取您在其他应用中习惯的上下文菜单是很正常的。如果您希望有一个右键单击打开的弹出菜单,例如具有剪切/复制/粘贴操作-

您必须自己实现。我在我的应用程序中使用了以下内容:

public class ContextMenuMouseListener extends MouseAdapter {

private JPopupMenu popup = new JPopupMenu();

private Action cutAction;

private Action copyAction;

private Action pasteAction;

private Action undoAction;

private Action selectAllAction;

private JTextComponent textComponent;

private String savedString = "";

private Actions lastActionSelected;

private enum Actions { UNDO, CUT, COPY, PASTE, SELECT_ALL };

public ContextMenuMouseListener() {

undoAction = new AbstractAction("Undo") {

@Override

public void actionPerformed(ActionEvent ae) {

textComponent.setText("");

textComponent.replaceSelection(savedString);

lastActionSelected = Actions.UNDO;

}

};

popup.add(undoAction);

popup.addSeparator();

cutAction = new AbstractAction("Cut") {

@Override

public void actionPerformed(ActionEvent ae) {

lastActionSelected = Actions.CUT;

savedString = textComponent.getText();

textComponent.cut();

}

};

popup.add(cutAction);

copyAction = new AbstractAction("Copy") {

@Override

public void actionPerformed(ActionEvent ae) {

lastActionSelected = Actions.COPY;

textComponent.copy();

}

};

popup.add(copyAction);

pasteAction = new AbstractAction("Paste") {

@Override

public void actionPerformed(ActionEvent ae) {

lastActionSelected = Actions.PASTE;

savedString = textComponent.getText();

textComponent.paste();

}

};

popup.add(pasteAction);

popup.addSeparator();

selectAllAction = new AbstractAction("Select All") {

@Override

public void actionPerformed(ActionEvent ae) {

lastActionSelected = Actions.SELECT_ALL;

textComponent.selectAll();

}

};

popup.add(selectAllAction);

}

@Override

public void mouseClicked(MouseEvent e) {

if (e.getModifiers() == InputEvent.BUTTON3_MASK) {

if (!(e.getSource() instanceof JTextComponent)) {

return;

}

textComponent = (JTextComponent) e.getSource();

textComponent.requestFocus();

boolean enabled = textComponent.isEnabled();

boolean editable = textComponent.isEditable();

boolean nonempty = !(textComponent.getText() == null || textComponent.getText().equals(""));

boolean marked = textComponent.getSelectedText() != null;

boolean pasteAvailable = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null).isDataFlavorSupported(DataFlavor.stringFlavor);

undoAction.setEnabled(enabled && editable && (lastActionSelected == Actions.CUT || lastActionSelected == Actions.PASTE));

cutAction.setEnabled(enabled && editable && marked);

copyAction.setEnabled(enabled && marked);

pasteAction.setEnabled(enabled && editable && pasteAvailable);

selectAllAction.setEnabled(enabled && nonempty);

int nx = e.getX();

if (nx > 500) {

nx = nx - popup.getSize().width;

}

popup.show(e.getComponent(), nx, e.getY() - popup.getSize().height);

}

}

}

最后,您应该将此侦听器附加到要在右键单击上具有上下文菜单的任何文本组件。

2020-11-13

java 右键卡死_为什么右键单击不适用于Java应用程序?相关推荐

  1. 取消wps右键菜单_让右键菜单变简洁高效!

    软件安装得越来越多 可能会在右键添加许多项目 这就会让右键菜单繁多炫目 比如说下面这个右键菜单: 接下来推荐几款软件,用于优化右键菜单 不仅简洁而且高效,做减法也做加法 一.火绒右键管理 工具分为三大 ...

  2. java 生成瓦片_生成矢量瓦片 | SuperMap iDesktop Java

    SuperMap iDesktop 桌面产品支持将矢量地图生成遵循 MapBox MVT 规范的矢量瓦片(.mvt),瓦片数据包含要素的几何形状与属性信息,而要素的风格样式由 MapBox 标准样式文 ...

  3. java俄罗斯方块视频_[VIP视频]【A0233】java面对对象编程-俄罗斯方块视频教程 高清视频 百度云 百度网...

    Java视频教程名称:java面对对象编程-俄罗斯方块视频教程  俄罗斯方块视频教程 $ X0 X1 Z: W4 P3 T  e. m3 q百度网盘下载链接: . M% x- I- V5 p( J 游 ...

  4. java 底层运行_从表面到底层丨Java和JVM的运行原理,现在带给你

    Java,编程语言,被创造于90年代初,在经历了这么多年的风风雨雨,Java已经成长为世界第一的编程语言,根据往期以及目前的数据来看,Java的使用频率为全球第一,即使偶尔会有第二第三的情况,但是这依 ...

  5. java xslt 数据转换_如何将xslt结果转换为Java对象?

    我有一个 XML文件: Empire Burlesque Bob Dylan USA Columbia 10.90 1985 而这个XSL文件: 现在我想将结果转换为Java类. Java的: @Xm ...

  6. 互联网java常用框架_来,带你鸟瞰 Java 中4款常用的并发框架!

    1. 为什么要写这篇文章 几年前 NoSQL 开始流行的时候,像其他团队一样,我们的团队也热衷于令人兴奋的新东西,并且计划替换一个应用程序的数据库. 但是,当深入实现细节时,我们想起了一位智者曾经说过 ...

  7. eclipse java工程目录_转载:Eclipse下的java工程目录

    对新手来讲,一个Java工程内部的多个文件夹经常会让大家困惑.更可恶的是莫名其妙的路径问题,在Eclipse编写Java程序中,出现频率最高的错误很可能就是路径问题. 这些问题原因其实都是一个,就是关 ...

  8. java string范围_字符串索引超出范围? (Java,子字符串循环...

    我正在为COSC课程制作的该程序编译不正确,但我不断收到错误消息: 线程"主"中的异常java.lang.StringIndexOutOfBoundsException:字符串索引 ...

  9. java自学难点_分享在达内教育培训Java的感受

    刚在达内教育培训完java,给即将来培训以及已经在培的学员分享下我的感受 回想一下在达内教育学习Java时的情景,我仍然兴奋不已,其实在刚接触Java时,自己确实有点晕,但经过一段时间学习,逐渐走出了 ...

最新文章

  1. nginx加密,访问接口认证
  2. 第12章 与Spring集成
  3. DateDiff 函数的用法
  4. CSS垂直居中网页布局实现的5种方法
  5. php symfony urlmatcher-gt;match,symfony路由组件(The Routing Component)
  6. 开个定时器给echarts组件配置定时更新
  7. Linux分区之parted命令
  8. JAVA 设计模式 装饰者模式
  9. nachos 5.0j(java版)学习笔记一:环境搭建
  10. 2022-2028年中国智慧教育行业发展策略分析及投资前景研究报告
  11. 元气骑士如何获得机器人成就皮肤_《元气骑士》听过浮游炮大礼包吗?有利于快速获取机器人的皮肤!...
  12. 29HTML5期末大作业:在线电影网站设计——电影从你的全世界路过(4页) HTML+CSS+JavaScript 大学生电影网页制作教程 学生HTML电影网页设计作业成品网页制作代码 学生影视
  13. Excel VBA 操作键盘(如:移动方向键,上下左右等)
  14. aws认证,aws有哪些认证,有什么用
  15. 12.0_[Java 多态]-多态/子类父类互转/基本引用类型互转/ instanceof 运算符
  16. 在前程无忧实习是怎样一个体验
  17. DSP RS232 RS485通信
  18. -[XXXX encodeWithCoder:]: unrecognized selector sent to instance 0x12d931d10
  19. 什么是基金量化交易?投资者应该怎么玩?
  20. win7 x64 PL/SQL连接Make sure you have the 32 bits Oracle Cient italled.问题解决

热门文章

  1. thread 在 surfaceview 中的使用与删除
  2. .Net 应用程序体系结构—C#高级编程(第10版)学习笔记5
  3. Docker容器内部署Java微服务的内存限制问题
  4. 国产Dhyana禅定x86处理器开始启动生产
  5. ReactNative学习笔记(一)环境搭建
  6. Windows10 使用docker toolbox安装docker
  7. 《Abaqus GUI程序开发指南(Python语言)》——2.5 动态类型简介
  8. linux touch 学习
  9. Rhel7/Centos7 修改运行级别
  10. 用master-worker模型比对团队管理