我有一个游戏框架,里面有一个JLabel数组,我在开始时为其中两个(最后一个和第一个(添加了现有的(扩展的(MouseListener。现在,每次单击带有MouseListener的JLabel时,我都希望它不再"拥有"该MouseListener,相反,MouseLister会转到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((可以调用这个.setPlaybleNumbers(++left,..(或(--right,…(,但MouseListener无法处理JLabel数组和setPlaybleNumberes方法,因为它们不是静态的。
我看到两个解决方案:
- 使
PVCMouse
成为NumberGameFrame
的内部类。它将允许您使用所有非静态方法和变量 - 将标签数组传递给
PVCMouse
,这样它就可以在不知道NumberGameFrame
的情况下自行使用它。在这种情况下,您必须在PVCMouse
中移动left
和right
变量