2016-03-21 22 views
0

Satranç tahtasının her bir döşemesi olarak JButtons kullanarak küçük bir satranç oyunu oluşturuyorum. Sonra aşağıdaki kodu kullanarak her karo (toplamda 64) bir eylem dinleyicisi vermek:Java - Kendiliğinden ActionListeners'e geçiş

for (int y = 0; y < chessBoardColumns; y++) { 
    for (int x = 0; x < chessBoardRows; x++) { 
     JButton square = new JButton(); 
     ActionListener squareListener = new ChessSquareListener(this); 
     chessBoardSquares[x][y] = square; 
     chessBoardSquares[x][y].addActionListener(squareListener); 
    } 
} 

eylem dinleyici ayrı pakette ve aşağıdaki gibidir: Size şöyle

public class ChessSquareListener implements ActionListener { 
    private ChessGame game; 

    public ChessSquareListener(ChessGame game) { 
     this.game = game; 
    } 

    public void actionPerformed(ActionEvent e) { 
     game.doSomething(); 
    } 
} 

görebiliyorum, tüm oyunun örneğini her kareye dinleyiciye aktarıyorum. Bu, her bir dinleyici için oyunun 64 kopyası oluşturuyor mu yoksa oyun örneğine bir referans mı veriyor?

Sen kullanışlı bu yanıt bulabilirsiniz
+0

jsut oyun örneğinin referansını değil, oyunun 64 kopyasını aktarır. – prasad

cevap

1

çünkü: Bir sınıfın her örneği aslında Java bir işaretçi olduğunun, Is Java "pass-by-reference" or "pass-by-value"?

Neyse, senin sorunun cevabı bu sadece bir referans geçer olmasıdır (işaretçi) oyun örneğine (prasad'ın yorumunda belirtildiği gibi). Bu nedenle, Java bir kopya oluşturmaz, diğer bir deyişle, dinleyicilerin geçirilen "örnek" i (bu) manipüle etmesi durumunda, manipülasyon, 64 dinleyicinin tamamı tarafından kullanılan bir örneği etkileyecektir.

Daha fazla bilgiye ihtiyacınız varsa, bana bildirin :).

İlgili konular