2013-02-25 38 views
1

我有一個遊戲框架,裏面有一個JLabel數組,我在開始時爲它們中的兩個(最後一個和第一個)添加了現有的(擴展的)MouseListener。現在,每當有一個MouseListener的JLabel被點擊時,我希望它不再具有MouseListener,而是MouseListener進入JLabel數組中的下一個/上一個索引。讓MouseListener本身改變他正在監聽的對象

我找不到可以處理該算法的機制。

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(++離開,..)或(--right,...),但不能MouseListener的處理陣列的JLabel和setPlaybleNumbers方法,因爲它們不是靜態的。

+0

不錯,爲了更好地幫助發佈[SSCCE](http://sscce.org/),短小,可運行,可編譯 – mKorbel 2013-02-25 09:06:14

+0

爲什麼不使用連接到父面板的單個鼠標偵聽器並維護索引活動標籤 – MadProgrammer 2013-02-25 09:07:21

回答

1

我看到2個解決方案:

  1. PVCMouse內部類的NumberGameFrame。它將允許您使用所有非靜態方法和變量。
  2. 將標籤陣列傳遞給PVCMouse,因此它可以在不知道NumberGameFrame的情況下自行使用它。在這種情況下,您需要在PVCMouse內移動leftright變量。