2013-05-08 17 views
-2

我現在正在實現一個托盤遊戲,其中我使用一些JButton來表示托盤。但托盤7x7,所以要實現動作監聽器,它不是很有趣。我現在有這樣的代碼:執行動作監聽器(JAVA)的DRY代碼

public void actionPerformed(ActionEvent ae) 
    { 
     if (ae.getSource() == Bouton11) 
      { 
       this.PosePion(1, 1, Bouton11); 
      } 
      else if (ae.getSource() == Bouton21) 
      { 
       this.PosePion(2, 1, Bouton21); 
      } 
      else if (ae.getSource() == Bouton31) 
      { 
       this.PosePion(3, 1, Bouton31); 
      } 
      ...... 
    } 

我該如何減少這種代碼? :/

謝謝:)

回答

2

製作您自己的偵聽器類型。你的類型應該實現ActionListener(並且因此actionPerformed方法),並且用三個參數構造:按鈕和兩個整數。您需要這三個參數的原因是,您可以將它們傳遞給PosePion方法(順便提一下,它應該大寫posePion)。

例如:

class PoseActionListener implements ActionListener { 

    private JButton button; 
    private int a, b; 

    public PoseActionListener(JButton btn, int a, int b) { 
     this.button = btn; 
     this.a = a; 
     this.b = b; 
    } 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     posePion(a, b, btn); 
    } 
} 

然後:

button11.addActionListener(new PoseActionListener(button11, 1, 1); 
button12.addActionListener(new PoseActionListener(button12, 1, 2); 

,或者甚至更好,一次創建所有的按鈕:

for (int i=1; i<=7; i++) { 
    for (int j=1; j<=7; j++) { 
     JButton btn = new JButton("Button " + i + ", " + j); 
     // store the button in an array if you want 
     btn.addActionListener(new PoseActionListener(btn, i, j); 
    } 
} 
+0

謝謝你,我會試試這個=) – user2057209 2013-05-08 20:27:36

2

將您在2D Jbutton將被創建時,他們7×7陣列。

然後在偵聽器方法中,循環遍歷數組以確定單擊了哪個JButton。循環索引將幫助您確定要傳遞給PosePion的內容。

+0

我明白你的意思,一個知道我可以將它們放入一個數組中,但是如何確定哪個JButton被循環點擊,以及如何將它傳遞給PosePion? – user2057209 2013-05-08 19:42:15

1

我建議您學習Sun Java編碼約定。你的代碼很難閱讀。

我會考慮有一個單獨的ActionListener爲每個實例,而不是爲所有人。

我也推薦一個數據結構和命令實現來減少無意識的重複。

+0

我們不學習如何在課堂上做到這一點,只是知道如何實現一個動作監聽器......這就是爲什麼我有一些問題來實現這個 – user2057209 2013-05-08 19:43:23

+0

你*需要*在課堂學習和使用*你的*腦,以及不要做簡單的拷貝。 – skuntsel 2013-05-08 19:50:58