[JAVA-GUI]Swing里JPopMenu中JMenuItem的点击事件
来源:互联网 发布:网络视频格式有哪些 编辑:程序博客网 时间:2024/06/06 04:55
应该注意到,在为JMenuItem绑定MousetListener后,mouseClicked事件并不能被触发。那么:
>如何在JPopMenu中对检测点击事件
private JPopupMenu myPopMenu(){JPopupMenu jPopupMenu = new JPopupMenu();JMenuItem jMenuItem = new JMenuItem();jMenuItem.setText("退出");jMenuItem.addMouseListener(new MouseAdapter() {@Overridepublic void mousePressed(MouseEvent e) {//只能检测到mousePressed事件super.mouseClicked(e);System.exit(0);}});jPopupMenu.add(jMenuItem);return jPopupMenu;}
若要实现右键弹出一个菜单,在Swing容器中加上以下内容即可:
//右键弹出退出菜单JPopupMenu jPopupMenu = myPopMenu();//鼠标监听器jLabel.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent e) {super.mouseClicked(e);if(e.isMetaDown()){if(e.getButton() == MouseEvent.BUTTON3){jPopupMenu.show(me, e.getX(), e.getY());}}}});
>为何无法检测到mouseClicked?
在JMenuItem中有个内部类:
protected class AccessibleJMenuItem extends AccessibleAbstractButton implements ChangeListener { private boolean isArmed = false; private boolean hasFocus = false; private boolean isPressed = false; private boolean isSelected = false; AccessibleJMenuItem() { super(); JMenuItem.this.addChangeListener(this); } /** * Get the role of this object. * * @return an instance of AccessibleRole describing the role of the * object */ public AccessibleRole getAccessibleRole() { return AccessibleRole.MENU_ITEM; } private void fireAccessibilityFocusedEvent(JMenuItem toCheck) { MenuElement [] path = MenuSelectionManager.defaultManager().getSelectedPath(); if (path.length > 0) { Object menuItem = path[path.length - 1]; if (toCheck == menuItem) { firePropertyChange( AccessibleContext.ACCESSIBLE_STATE_PROPERTY, null, AccessibleState.FOCUSED); } } } /** * Supports the change listener interface and fires property changes. */ public void stateChanged(ChangeEvent e) { firePropertyChange(AccessibleContext.ACCESSIBLE_VISIBLE_DATA_PROPERTY, Boolean.valueOf(false), Boolean.valueOf(true)); if (JMenuItem.this.getModel().isArmed()) { if (!isArmed) { isArmed = true; firePropertyChange( AccessibleContext.ACCESSIBLE_STATE_PROPERTY, null, AccessibleState.ARMED); // Fix for 4848220 moved here to avoid major memory leak // Here we will fire the event in case of JMenuItem // See bug 4910323 for details [zav] fireAccessibilityFocusedEvent(JMenuItem.this); } } else { if (isArmed) { isArmed = false; firePropertyChange( AccessibleContext.ACCESSIBLE_STATE_PROPERTY, AccessibleState.ARMED, null); } } if (JMenuItem.this.isFocusOwner()) { if (!hasFocus) { hasFocus = true; firePropertyChange( AccessibleContext.ACCESSIBLE_STATE_PROPERTY, null, AccessibleState.FOCUSED); } } else { if (hasFocus) { hasFocus = false; firePropertyChange( AccessibleContext.ACCESSIBLE_STATE_PROPERTY, AccessibleState.FOCUSED, null); } } if (JMenuItem.this.getModel().isPressed()) { if (!isPressed) { isPressed = true; firePropertyChange( AccessibleContext.ACCESSIBLE_STATE_PROPERTY, null, AccessibleState.PRESSED); } } else { if (isPressed) { isPressed = false; firePropertyChange( AccessibleContext.ACCESSIBLE_STATE_PROPERTY, AccessibleState.PRESSED, null); } } if (JMenuItem.this.getModel().isSelected()) { if (!isSelected) { isSelected = true; firePropertyChange( AccessibleContext.ACCESSIBLE_STATE_PROPERTY, null, AccessibleState.CHECKED); // Fix for 4848220 moved here to avoid major memory leak // Here we will fire the event in case of JMenu // See bug 4910323 for details [zav] fireAccessibilityFocusedEvent(JMenuItem.this); } } else { if (isSelected) { isSelected = false; firePropertyChange( AccessibleContext.ACCESSIBLE_STATE_PROPERTY, AccessibleState.CHECKED, null); } } } } // inner class AccessibleJMenuItem大概是这个原因?
阅读全文
1 0
- [JAVA-GUI]Swing里JPopMenu中JMenuItem的点击事件
- Swing中JMenuItem被挡住的原因
- java swing 菜单栏 JMenuItem 设置快捷键的组合键
- JMenuItem的事件处理:
- Swing绘制带图片的JMenuItem
- Java Swing GUI 事件分发线程
- Java:简单的Swing用户界面和监听按钮点击事件
- java中GUI的awt和Swing的知识点
- Java Swing中GUI代码的线程同步
- [Java GUI] Swing中JList和JRadioButton的联合使用
- Java GUI编程中AWT/swing/SWT的优缺点
- Java GUI编程中AWT/swing/SWT的优缺点
- Java Swing中键盘事件的处理
- Java中GUI的事件处理
- java swing 鼠标自动模拟点击事件
- Repeater里的点击事件
- Repeater里的点击事件
- Java的GUI发展-AWT/SWT/Swing
- Ajax提交与传统表单提交的区别说明
- 八数码广搜代码
- Hbase API使用(一)
- 洛谷 P1440 求m区间内的最小值
- docker常用命令
- [JAVA-GUI]Swing里JPopMenu中JMenuItem的点击事件
- Java并发编程札记-(一)基础-06synchronized详解
- 更重点---Hive的函数+Hive优化
- SVN的学习之路九(Eclipse使用SVN)
- 招银科技2017年笔试题,使用python进行简单的字符串压缩
- [leetcode]#24. Swap Nodes in Pairs
- C语言题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数
- POJ 1852 ants
- 会声会影X8 一打开就提示Corel VideoStudio 已停止工作的解决办法