首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JDateChooser :未激发MouseClicked事件

JDateChooser :未激发MouseClicked事件
EN

Stack Overflow用户
提问于 2011-08-25 00:37:28
回答 1查看 7.1K关注 0票数 1

我想双击某个JDateChooser使其处于启用状态。所以我使用MouseListener:

代码语言:javascript
复制
jDateChooser1.addMouseListener(new java.awt.event.MouseAdapter() {
        public void mouseClicked(java.awt.event.MouseEvent evt) {
            System.out.println("mouse clicked");
        }
    });

但是这个事件不会被解雇,什么都不会发生。

日期选择器是com.toedter.calendar one :

有什么建议吗?

解决方案

JDateChooser是一个面板,我必须从面板中的组件监听鼠标事件。JDateChooser有一个getDateEditor(),它是文本字段。

以下是解决方案:

代码语言:javascript
复制
this.jDateChooser1.getDateEditor().getUiComponent().addMouseListener(new java.awt.event.MouseAdapter() {
        public void mouseClicked(java.awt.event.MouseEvent evt) {
            if(evt.getClickCount()==2){               
                Component c = ((Component)evt.getSource()).getParent();
                c.setEnabled(!c.isEnabled());
            }
        }
    });
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-25 02:52:09

类JDateChooser扩展了JPanel。我猜您所单击的区域位于添加到根JPanel的另一个容器中。您应该尝试识别哪个容器是触发事件的容器,并将侦听器添加到其中。

要测试这是否正确,请尝试以递归方式将侦听器添加到所有容器,如果您看到它被触发,则可以删除侦听器的征募设置,并尝试找到需要将MouseListener添加到其中的哪一个。(请注意,我不需要测试就直接编写代码,所以请纠正任何错误)

代码语言:javascript
复制
private void addMouseListenerRecrusively(Container container){

   for (Component component:container.getComponents()){
     if (component instanceof Container)
        addMouseListenerRecrusively(component); 
   }

   container.addMouseListener(new java.awt.event.MouseAdapter() {
        public void mouseClicked(java.awt.event.MouseEvent evt) {
            System.out.println("mouse clicked");
        }
    });

}

并在选择器上调用该方法

代码语言:javascript
复制
addMouseListenerRecrusively(jDateChooser1);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7179100

复制
相关文章

相似问题

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