1

したがって、次のように複数のオブジェクトにアタッチされたマウスリスナーがあります。

for (int i = 0; i < Grids.size(); i++) {
     Grids.get(i).addMouseListener(new GameMouseListener()); 
   }

今私が抱えている問題は、どのオブジェクトがハンドラーをアクティブにしたかを知る必要があることです

var "i" はクラス内で定義されておらず、前の for ループでのみ使用されていたため、明らかにこれは機能しません。どの特定のオブジェクトがクリックされたかをハンドラーを使用して知る方法。

 public class GameMouseListener implements MouseListener {

    @Override
    public void mouseClicked(MouseEvent e) {
        if (Grid.get(i).isSelected()) {

            Grid.get(i).unselected();
        } else {

            Grid.get(i).selected();
        }
    }

    @Override
    public void mousePressed(MouseEvent e) {
    }

    @Override
    public void mouseReleased(MouseEvent e) {
    }

    @Override
    public void mouseEntered(MouseEvent e) {
    }

    @Override
    public void mouseExited(MouseEvent e) {
    }
4

2 に答える 2

1

e.getSource()イベントのソースを取得するために使用できます。

また、ActionListener可能であれば使用することを検討してください (ユーザーがキーボードで選択する可能性がある場合)。

もう 1 つ - リスナーがジェネリックである場合、各コンポーネントの新しいインスタンスではなく、そのインスタンスを 1 つだけ作成することができます。

GameMouseListener listener = new GameMouseListener();
for (int i = 0; i < Grids.size(); i++) {
     Grids.get(i).addMouseListener(listener); 
}
于 2011-05-22T17:46:11.383 に答える
0

とにかくオブジェクトごとに新しいオブジェクトを作成しているので、コンストラクターでオブジェクトを渡すことができます(または、e.getSource()リスナーを1つだけ作成するときに使用します)

for (int i = 0; i < Grids.size(); i++) {
   Grids.get(i).addMouseListener(new GameMouseListener( Grids.get(i))); 
}
于 2011-05-22T17:49:50.360 に答える