1

我想双击 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 之一:

有什么建议吗?

解决方案

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

1 回答 1

2

JDateChooser 类扩展了 JPanel。我猜您单击的区域位于添加到根 JPanel 的另一个 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);
于 2011-08-24T18:52:08.807 回答