2010-05-20 2 views
1

У меня есть общественный класс, который имеет метод и экземпляра следующую переменную:JPanel.addComponentListener не работает, когда слушатель является переменная класса

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; 

Каждый из указанных выше способов не соответствуют закодировать непосредственно ниже до тех пор, next // комментарий метода. Я не понимаю, почему я не могу использовать переменную экземпляра класса и добавить ее в JPanel в качестве компонента-слушателя.

Что происходит в вышеприведенных случаях, где я говорю, что метод не работает, так это то, что я не получаю сообщения журнала "RESIZE 3". Во всех случаях, когда я указываю, что он работает, я получаю сообщения "RESIZE 3".

Внешний класс является общедоступным без каких-либо изменений, кроме того, что он реализует интерфейс, который я создал (который не имеет методов или переменных, общих с перечисленными выше методами и переменными).

Если кто-нибудь может мне помочь, я бы очень признателен. Эта проблема не имеет для меня никакого смысла, код должен быть идентичным.

+1

Вы можете использовать переменную класса. Что-то не так с вашим кодом. Опубликуйте свой SSCCE: http://sscce.org – camickr

+0

Извините, я не понимаю, я использую переменную класса, и она находится в коде, который я написал выше. Что вы имеете в виду, что что-то еще не так с моим кодом? Я также пробовал следующее ResizeListener listener = new ResizeListener(); panelResizeListener = прослушиватель; // ИМЕЮ ЭТУ ЛИНИЮ В РАЗРЕШЕНИЯХ Я не понимаю, почему imagePanel.addComponentListener (слушатель); Также вопрос на стороне, я не знаю, как отформатировать мои сообщения как код, я попытался посмотреть на изменения других людей, и похоже, что они просто добавляют пробелы впереди, но это не работает для меня , спасибо. – Coder

+0

Вы не опубликовали сообщение SSCCE (я дал вам ссылку, которая объясняет, что это такое), я не могу сказать вам, что не так с вашим кодом. – camickr

ответ

2

Человек camickr, вы были правы. Человек, это было странно, чтобы решить. В моем коде было что-то не так. Порядок вызова методов в мой класс привел к тому, что я добавил слушателя, а затем другой метод завершил бы удаление слушателя, на который ссылается эта переменная, поэтому, конечно, я никогда не получу события. Большое спасибо за всю помощь ppl.

1

Я думаю, ваша проблема в том, что вы объявляете panelResizeListener после того, как используете его. Обычно это убивает.

+0

Спасибо за предложение, я понял, в чем проблема. – Coder

Смежные вопросы