首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JComboBox mouseClicked on cell

JComboBox mouseClicked on cell
EN

Stack Overflow用户
提问于 2016-08-02 18:51:47
回答 3查看 613关注 0票数 0

当用户单击JComboBox中的项目(用鼠标单击)时,我试图调用一个函数;但是,我不希望为任何键盘事件触发此事件--我只希望在单击下拉列表的特定单元格(我知道addActionListener和addItemListener,但这些事件比我想要的事件更多时才触发这些事件)。

编辑:我应该指定mouseClicked也不工作--似乎没有任何事件被触发(然而,它们一度被触发,但当发生时,它们也是为单击文本字段而触发的),但我认为这是从标题中假定的。

我也尝试了这里给出的解决方案(也不起作用):Editable JCombobox mouseclicked event not working

EDIT2:我尝试了以下操作,但单击时仍然没有输出:

代码语言:javascript
复制
try {
    Field popupInBasicComboBoxUI = BasicComboBoxUI.class.getDeclaredField("popup");
    popupInBasicComboBoxUI.setAccessible(true);
    BasicComboPopup popup = (BasicComboPopup)popupInBasicComboBoxUI.get(attachedCB.getUI());

    Field scrollerInBasicComboPopup = BasicComboPopup.class.getDeclaredField("scroller");
    scrollerInBasicComboPopup.setAccessible(true);
    JScrollPane scroller = (JScrollPane)scrollerInBasicComboPopup.get(popup);

    scroller.getViewport().getView().addMouseListener(new MouseAdapter() {
      @Override
      public void mouseClicked(MouseEvent e) {
        super.mouseClicked(e);
        System.out.println("nope");
      }
    });
  }
  catch (IllegalAccessException e) {
    e.printStackTrace();
  }
  catch (NoSuchFieldException e) {
    e.printStackTrace();
  }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-08-02 21:22:50

您没有将它添加到我在评论中发布的链接中的滚动窗格的viewport视图中。

代码语言:javascript
复制
Field scrollerInBasicComboPopup = BasicComboPopup.class.getDeclaredField("scroller");
scrollerInBasicComboPopup.setAccessible(true);
JScrollPane scroller = (JScrollPane) scrollerInBasicComboPopup.get(popup);
scroller.getViewport().getView().addMouseListener(listener);
票数 2
EN

Stack Overflow用户

发布于 2016-08-02 19:01:35

希望这能帮上忙

代码语言:javascript
复制
jComboBox.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jComboBoxMouseClicked(evt);//your logic here
            }            
        });
票数 0
EN

Stack Overflow用户

发布于 2016-08-02 20:53:06

您应该使用java.awt.event.ActionEvent,,它是(引用于javadoc) a

语义事件,它指示发生了组件定义的操作。当组件特定的操作发生时(如按下),此高级事件由组件(例如Button)生成.

就像这样:

代码语言:javascript
复制
        jComboBox.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                javax.swing.JComboBox source = (javax.swing.JComboBox)evt.getSource();
                // use getSelectedIndex to know the item if needed
                labelTextField.setText(source.getSelectedItem().toString());
            }
        }); 

注意getSelectedItemgetSelectedIndexgetSelectedObjects方法:这使您能够知道选择了哪些项,并且只处理所需的项。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38728330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档