我想双击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());
}
}
});
答案 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);