У меня есть открытый класс, который имеет следующий метод и переменную экземпляра:
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"
.
Внешний класс является общедоступным без каких-либо других изменений, за исключением того, что он реализует созданный мной интерфейс (который не имеет методов или переменных, общих с методами и переменными, перечисленными выше).
Если кто-нибудь может мне помочь, я был бы очень признателен. Эта проблема не имеет смысла для меня, код должен быть идентичным.