当前位置: 首页 > 知识库问答 >
问题:

向对象列表中的每个对象添加MouseListener/mouseEvent

沈运恒
2023-03-14
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferStrategy;

public class Proj2 extends Canvas implements Runnable{

    private final int[][] Init_board = 
          {{1,0,1,0,1,0,1,0},
           {0,1,0,1,0,1,0,1},
           {1,0,1,0,1,0,1,0},
           {0,1,0,1,0,1,0,1},
           {1,0,1,0,1,0,1,0},
           {0,1,0,1,0,1,0,1},
           {1,0,1,0,1,0,1,0},
           {0,1,0,1,0,1,0,1}};

    private final int[][] new_Game = 
          {{5,5,5,5,5,5,5,5},
          {5,5,5,5,5,5,5,5},
          {0,0,0,0,0,0,0,0},
          {0,0,0,0,0,0,0,0},
          {0,0,0,0,0,0,0,0},
          {0,0,0,0,0,0,0,0},
          {4,4,4,4,4,4,4,4},
          {4,4,4,4,4,4,4,4}};

    public static final int WIDTH = 640;
    public static final int HEIGHT = 640;
    private final int initPieces = 8;

   private Thread thread;
  private boolean running = false;

    private Board board;
    private GameHandler handler;    

    public Proj2(){

        handler = new GameHandler();
        new Window(WIDTH,HEIGHT,"Checkers",this);
        board = new Board(WIDTH,HEIGHT,Init_board);

         for(int i = 0; i < 8; i++){
            for(int j = 0; j < 8; j++){

              handler.newObject(new Player(j * (640 / initPieces),i * (640 /
              initPieces),initPieces,ID.playerOne,new_Game[i][j],handler));

             }
         }
for(int i = 0; i < handler.gameObjects.size(); i++){

    GameObjects temp = handler.gameObjects.get(i);

    this.addMouseListener(new MouseInput(temp));

   }

}
import java.awt.Graphics;
import java.util.LinkedList;

public class GameHandler {

    LinkedList<GameObjects> gameObjects = new LinkedList<GameObjects>();

    public void tick(){
        for(int i = 0; i < gameObjects.size(); i++){
            GameObjects temp = gameObjects.get(i);
            temp.tick();
        }
    }

    public void render(Graphics g){
        for(int i = 0; i < gameObjects.size(); i++){
            GameObjects temp = gameObjects.get(i);
            temp.render(g);
        }
    }

    public void newObject(GameObjects object){

        this.gameObjects.add(object);

    }

    public void deleteObject(GameObjects object){

        this.gameObjects.remove(object);
    }
}
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.util.LinkedList;


    public class MouseInput implements MouseListener {

            private GameHandler handler;
            private GameObjects object;

            public MouseInput(GameObjects Object){

            this.object = Object;


            }



            @Override
            public void mouseClicked(MouseEvent arg0) {

            }

            @Override
            public void mouseEntered(MouseEvent e) {

            }

            @Override
            public void mouseExited(MouseEvent arg0) {

            }

            @Override
            public void mousePressed(MouseEvent e) {



                int x = e.getX();
                int y = e.getY();
                int b = e.getClickCount();

                int c = e.getID();

                /*NOT SURE WHAT TO DO HERE*/


                /*THIS JUST MOVES THE OBJECT WHERE I CLICK, BUT WHEN I HAVE MULTIPLE OBJECTS AND I CLICK, ONLY ONE OBJECT MOVES AND THE REST DISAPEAR*/
                    if(b == 2){
                        if(object.getID() == ID.playerOne ){

                            object.setX(x);
                            object.setY(y);
                        }
                    }



            }





            @Override
            public void mouseReleased(MouseEvent arg0) {
                // TODO Auto-generated method stub

            }

        }

为所有的代码道歉。我尽量少发帖。

共有1个答案

卢翔宇
2023-03-14

我尝试向每个对象添加一个mouslistener,这样它们就可以各自拥有自己的MousEvent。

for(int i = 0; i < handler.gameObjects.size(); i++)
{
    GameObjects temp = handler.gameObjects.get(i);
    this.addMouseListener(new MouseInput(temp));
}

该代码将MouseListener添加到同一个对象,而不是不同的对象。相反,我猜代码应该是:

//this.addMouseListener(new MouseInput(temp));
temp.addMouseListener(new MouseInput(temp));

因此,当它被单击时,它将为每个对象返回唯一的ID。

GameObjects temp = (GameObjects)e.getSource();
 类似资料:
  • 如何以另一种方式从流中添加两个不同列表中的对象? 这里有一个例子

  • 我正在尝试为我的列表模式中的每个对象创建一个包含该对象数据的表单。 所以我的控制器中有: 在我的ThymeLeaf模板中: 控制器: ThymeLeaf模板: 这种情况不会引发任何异常,但为空

  • 在其中声明列表后 并在类PlayListStuff中添加字段

  • 我正在使用Java8开发Spring Boot Version2,当我试图在“createTopic”方法中将一个新的列表对象添加到预定义的列表对象(即topicList)中时,我得到了一个错误。 ** TopicService.java ** ** 2020-04-15 19:52:27.172错误15312---[nio-8080-exec-2]O.A.C.C.C.[.[.[/].[dispa

  • 我需要填充一个json文件,现在我有如下内容: 我需要添加另一个“元素”。我的第一步是使用,现在我需要添加新元素。我想我必须使用添加另一个元素,我尝试了以下方法: 但是当我尝试做时,我得到了错误"对象没有方法推送",我认为我做了一些非常错误的事情,因为我没有告诉任何地方的"元素"。 我该怎么做? 编辑:对不起,我脑子里有很多困惑。 我认为从,但我首先得到了我在JSON中输入的内容。 用数组代替对象

  • 从实体映射时,我想向DTO/model对象添加一个派生列表。例如,我有一个名为Company的实体类,它有一个员工列表。我希望公司模型对象包含员工列表和经理员工列表。(这不是我真正的类名,但这是我正在尝试做的事情)。所以,我希望公司数据有一个员工列表和一个经理列表,其中经理是通过过滤员工列表而得到的员工子集。 我尝试使用映射表达式和默认方法。然而,我需要使用EmployeeMapper,而我似乎没