JDateChooser: событие MouseClicked не запускается - PullRequest
1 голос
/ 24 августа 2011

Я хочу дважды щелкнуть 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 - это 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());
            }
        }
    });

1 Ответ

2 голосов
/ 24 августа 2011

Класс 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);
...