栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么我的ChangeListener仅对JMenu反应,而不对JMenuItem反应?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么我的ChangeListener仅对JMenu反应,而不对JMenuItem反应?

没有任何方向的冒犯,这只是有历史的问题之一

  • 初始要求:鼠标悬停在JMenuItem上时执行的操作
  • 最初的每个人的宠儿:MouseListener
  • 最初的偏离建议(对@mKorbel表示敬意):buttonModel上的ChangeListener,检查过渡属性

  • 改进的要求:当JMenuItem刚刚突出显示时,可以通过键盘和鼠标悬停在doSomething上。

  • 精致的宝贝:buttonModel上的ChangeListener,未指定属性

  • 精确偏差:ActionListener

  • 当前要求:更改JMenu或JMenuItem“选定”属性时的doSomething。

  • 当前的宠儿:无法用监听器完成,请覆盖…

  • 当前偏差:动作,MenuListener …

正确而完整的答案(事后看来,因为尚未提及键盘)在第一轮中就已经存在:某种语义监听器“足够低级”以捕获状态变化(候选者是过渡,武装,选中,在buttonModel级别上按下),使menuItem更改其
突出显示
状态。不幸的是,确切的关系尚不为人所知(至少对我而言),没有文档记录(请阅读:懒惰的我很快就找不到任何内容),甚至由于再次总是错误的(对我来说)而令人困惑(?)用于menuItems

实验人员的反应是尝试..
try:下面是一个代码段,该代码段侦听并记录某些菜单树上的状态更改(只需将其放入任意menuBar中并在鼠标周围移动并通过键盘进行导航)。

获胜者是:-使用ChangeListener并检查源是否已选择或已配置。

    ChangeListener ch = new ChangeListener() {        @Override        public void stateChanged(ChangeEvent e) { if (e.getSource() instanceof JMenuItem) {     JMenuItem item = (JMenuItem) e.getSource();     if (item.isSelected() || item.isArmed()) {         System.out.println("Highlighted: " + item.getActionCommand());     } }        }    };

同时适用于键盘和鼠标,JMenu和JMenuItem

//----------- pre snippet to track property changes in menuItem/buttonModel    // test menu    JMenu menu = new JMenu("Sample menu");    menu.setMnemonic('s');    installListeners(menu);    // first menuitem    JMenuItem other = menu.add("content1");    installListeners(other);    // second menuitem    other = menu.add("again + ");    installListeners(other);    // sub    JMenu sub = new JMenu("subMenu");    installListeners(sub);    menu.add(sub);    // menus in sub    other = sub.add("first in sub");    installListeners(other);    other = sub.add("second in sub");    installListeners(other);    getJMenuBar().add(menu);private void installListeners(JMenuItem menu) {    menu.getModel().addChangeListener(getChangeListener());    menu.addChangeListener(getChangeListener());}private ChangeListener getChangeListener() {    ChangeListener ch = new ChangeListener() {        @Override        public void stateChanged(ChangeEvent e) { if (e.getSource() instanceof ButtonModel) {     ButtonModel model = (ButtonModel) e.getSource();     System.out.println("from model: " + createStateText(model)); } else if (e.getSource() instanceof JMenuItem) {     JMenuItem item = (JMenuItem) e.getSource();     System.out.println("  from item: " + createStateText(item)); }        }        private String createStateText(ButtonModel model) { String text = model.getActionCommand() + " armed: " + model.isArmed(); text += " selected: " + model.isSelected(); text += " rollover " + model.isRollover(); text += " pressed: " + model.isPressed(); return text;        }        private String createStateText(JMenuItem model) { String text = model.getActionCommand() + " armed: " + model.isArmed(); text += " selected: " + model.isSelected(); // not supported on JMenuItem nor on AbstractButton// text += " rollover " + model.isRollover();// text += " pressed: " + model.isPressed(); return text;        }    };    return ch;}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/495073.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号