有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使MouseListener本身改变了他正在听的对象

我有一个游戏框架,里面有一组jlabel,我在开始时为其中两个(最后一个和第一个)添加了现有的(扩展的)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!。mouseClicked()可以调用此函数。设置播放号码(++左,…)或(--对,…),但是MouseListener无法处理JLabel数组和setPlaybleNumber方法,因为它们不是静态的


共 (1) 个答案

  1. # 1 楼答案

    我看到两种解决方案:

    1. 使PVCMouse成为NumberGameFrame的内部类。它将允许您使用所有非静态方法和变量
    2. 将标签数组传递给PVCMouse,这样它就可以自己使用它,而不需要知道NumberGameFrame。在这种情况下,您必须将leftright变量移动到PVCMouse