Заставить MouseListener изменить объект, который он слушает

У меня есть игровой кадр с массивом JLabels, в который я добавил существующий (расширенный) MouseListener для двух из них (последний и первый) при запуске. Теперь, каждый раз, когда был нажат JLabel с MouseListener, я хочу, чтобы у него больше не было этого MouseListener, и вместо этого MouseListener переходит к следующему/предыдущему индексу в массиве JLabel.

Я не могу найти механизм, который может обрабатывать этот алгоритм.

public class NumberGameFrame extends javax.swing.JFrame {
    ...
    JLabels[] numbers;
    int left, right;
    public void playPVC() {
        ...
        left = 0; right = numbers.legth - 1;
        PVCMouse pvc_mouse = new PVCMouse(); // MouseListener
        setPlaybleNumbers(left,right,pvc_mouse);
        ...
    }

    public void setPlaybleNumbers(int left, int right, MouseListener mouse){
        for(int i = 0; i < numbers.length; i++){ // "kill" other numbers first
            if (i != left && i != right){
                if (numbers[i].getMouseListeners() != null){
                    numbers[i].removeMouseListener(mouse);
                }
               ...
            }
        }
        numbers[left].addMouseListener(mouse);
        ...
        numbers[right].addMouseListener(mouse);
        ...
    }
    ...
}

Я подумал, что каким-то образом pvc_mouse.mouseClicked() может вызвать this.setPlaybleNumbers(++left,..) или (--right,...), но MouseListener не может обработать массив JLabel и метод setPlaybleNumbers, потому что они не статично.


person squeezy    schedule 25.02.2013    source источник
comment
ну, для лучшей помощи, скорее опубликуйте SSCCE, короткий, исполняемый, компилируемый   -  person mKorbel    schedule 25.02.2013
comment
Почему бы не использовать один прослушиватель мыши, прикрепленный к родительской панели, и не поддерживать индекс активных меток?   -  person MadProgrammer    schedule 25.02.2013


Ответы (1)


Я вижу 2 решения:

  1. Сделайте PVCMouse внутренним классом NumberGameFrame. Это позволит вам использовать все нестатические методы и переменные.
  2. Передайте массив меток PVCMouse, чтобы он мог использовать его сам, не зная о NumberGameFrame. В этом случае вам придется переместить переменные left и right внутрь PVCMouse.
person Mikita Belahlazau    schedule 25.02.2013