1

JLabels の配列を含むゲーム フレームがあり、開始時にそのうちの 2 つ (最後と最初) に既存の (拡張された) 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

I see 2 solutions:

  1. Make PVCMouse inner class of NumberGameFrame. It will allow you to use all non static methods and variables.
  2. Pass array of labels to PVCMouse so it can use it by itself without knowing about NumberGameFrame. In this case you'll have to move left and right variables inside PVCMouse.
于 2013-02-25T09:03:58.717 に答える