JDateChooser:MouseClicked事件不会被触发

时间:2011-08-24 16:37:28

标签: java swing events jcalendar jdatechooser

我想双击JDateChooser以启用它。所以我使用MouseListener:

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是一个Panel,我必须从面板中的组件上听一个鼠标事件。 JDateChooser有一个getDateEditor(),女巫是文本域。

以下是解决方案:

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());
            }
        }
    });

1 个答案:

答案 0 :(得分:2)

JDateChooser类扩展了JPanel。我猜你点击的区域是在另一个添加到根JPanel的Container里找到的。您应该尝试识别哪个Container是触发事件的Container并将侦听器添加到它。

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

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");
        }
    });

}

并在您的选择器上调用该方法

addMouseListenerRecrusively(jDateChooser1);