我想双击一个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);