Я знаю, что вы уже выбрали ответ, но переопределение метода рисования определенно не правильно, и, хотя вы можете взломать что-то на месте, оно не будет идеальным.
Глядя на источник для JXTaskPane и, в частности, обращаясь к setExpanded () (строка 387), вы можете видеть, что он вызывает JXCollapsiblePane.setCollapsed (...), а затем запускает событие изменения свойства для расширенного. Слушатель этого свойства не будет корректным, потому что он сработает до завершения анимации. Итак, если вы зайдете в JXCollapsiblePane и посмотрите на setCollapsed (...) (строка 470), вы увидите, что если он анимирован, он устанавливает параметры и запускает таймер. Мы хотим знать, когда заканчивается анимация, поэтому в этом файле посмотрите на аниматор (строка 620 и, в частности, 652-667), который показывает, что когда анимация заканчивается, она запускает изменение свойства для ANIMATION_STATE_KEY со значением «свернуто» "или" расширенный ". Это событие, которое вы на самом деле хотите. Однако у вас нет доступа к JXCollapsiblePane, поэтому вернитесь к JXTaskPane и найдите ANIMATION_STATE_KEY, и вы найдете строку 208, которая показывает, что JXTaskPane создает прослушиватель для JXCollapsiblePane.ANIMATION_STATE_KEY и обновляет его как собственное событие.
Поскольку у вас есть доступ к JXTaskPane, вы можете прослушивать это событие, выполняя ...
taskPane.addPropertyChangeListener(JXCollapsiblePane.ANIMATION_STATE_KEY, new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent e) {
if(e.getNewValue().equals("expanded") {
...
}
else if(e.getNewValue().equals("collapsed") {
...
}
}
}
должен получить ваше событие именно тогда, когда вы этого хотите.
Правильный способ прослушивания событий в Swing - через прослушиватели свойств. К сожалению, единственный способ выяснить, какие правильные свойства и значения, это просмотреть исходный код.