我想双击某个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());
}
}
});发布于 2011-08-25 02:52:09
类JDateChooser扩展了JPanel。我猜您所单击的区域位于添加到根JPanel的另一个容器中。您应该尝试识别哪个容器是触发事件的容器,并将侦听器添加到其中。
要测试这是否正确,请尝试以递归方式将侦听器添加到所有容器,如果您看到它被触发,则可以删除侦听器的征募设置,并尝试找到需要将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);https://stackoverflow.com/questions/7179100
复制相似问题