1

我有一个游戏框架,其中包含一组 JLabels,我在开始时为其中两个(最后一个和第一个)添加了现有的(扩展的)MouseListener。现在,每次单击带有 MouseListener 的 JLabel 时,我都希望它不再“拥有”该 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 方法,因为它们是不是静态的。

4

1 回答 1

1

我看到了 2 个解决方案:

  1. 制作. PVCMouse_ NumberGameFrame它将允许您使用所有非静态方法和变量。
  2. 将标签数组传递给它,PVCMouse以便它可以在不知道NumberGameFrame. left在这种情况下,您必须rightPVCMouse.
于 2013-02-25T09:03:58.717 回答