Jpanel.admponentListener не работает, когда слушатель является переменной класса
-
04-10-2019 - |
Вопрос
У меня есть публичный класс, который имеет следующий метод и переменную экземпляра:
public void setImagePanel(JPanel value) {
imagePanel = value;
if (imagePanel != null) {
//method 1 : works
imagePanel.addComponentListener(new ComponentAdapter() {
public void componentResized(ComponentEvent evt) {
System.out.println("Here 1");
}
});
//method 2 : does not work
panelResizeListener = new ResizeListener();
imagePanel.addComponentListener(panelResizeListener);
//method 3 : works
//ResizeListener listener = new ResizeListener();
//imagePanel.addComponentListener(listener);
//method 4 : works
//imagePanel.addComponentListener(new ResizeListener());
//method 5 : does not work -- THIS IS THE DESIRED CODE I WANT TO USE
imagePanel.addComponentListener(panelResizeListener);
}
}
public class ResizeListener extends ComponentAdapter {
@Override
public void componentResized(ComponentEvent evt) {
System.out.println("RESIZE 3");
}
}
private ResizeListener panelResizeListener = new ResizeListener();
private static JPanel imagePanel;
Каждый из способов выше соответствует коду сразу ниже до следующего // Метод комментария. Что я не понимаю, почему я не могу использовать переменную экземпляра класса и добавить это в JPanel
в качестве компонента слушателя.
Что происходит в случаях выше, где я говорю, что метод не работает, это то, что я не получаю "RESIZE 3"
журнал сообщений. Во всех случаях, когда я перечисляю, что он работает, то я получаю "RESIZE 3"
Сообщения.
Внешний класс является общественным без другой модификации, за исключением того, что он реализует, который я создал, который я не имеет методов, ни переменных, общих с методами и переменными, перечисленными выше).
Если кто-то может помочь мне, я бы очень признателен. Эта проблема не имеет смысла для меня, код должен быть идентичным.
Решение
Человек Камикр, ты был прав. Человек это был странный, чтобы решить. С моим кодом было что-то еще не так. Заказ методов звонков в мой класс, привел к тому, что у меня добавляют слушатель, то другой метод будет снимать слушателя, на который ссылается эта переменная, поэтому, конечно, я бы никогда не получил события. Большое спасибо за всю помощь PPL.
Другие советы
Я думаю, что ваша проблема заключается в том, что вы объявляете PanelResizelistener после его использования. Это нормально убивает почти ничего.