我想双击一个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是一个面板,我必须从面板中的组件上监听鼠标事件。 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());
            }
        }
    });

最佳答案

JDateChooser类扩展了JPanel。我猜您正在单击的区域位于添加到根JPanel的另一个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);

10-06 07:10