Jpanel.admponentListener не работает, когда слушатель является переменной класса

StackOverflow https://stackoverflow.com/questions/2878517

Вопрос

У меня есть публичный класс, который имеет следующий метод и переменную экземпляра:

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 после его использования. Это нормально убивает почти ничего.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top