Java 向对象列表中的每个对象添加mouseListener/mouseEvent
我正在尝试向对象列表中的每个对象添加鼠标侦听器。我使用画布和图形g渲染一个帧和多个对象 这是我的主要类:它渲染帧和对象。这一切都很好,这里没有问题Java 向对象列表中的每个对象添加mouseListener/mouseEvent,java,object,canvas,graphics,mouselistener,Java,Object,Canvas,Graphics,Mouselistener,我正在尝试向对象列表中的每个对象添加鼠标侦听器。我使用画布和图形g渲染一个帧和多个对象 这是我的主要类:它渲染帧和对象。这一切都很好,这里没有问题 import java.awt.Canvas; import java.awt.Color; import java.awt.Graphics; import java.awt.image.BufferStrategy; public class Proj2 extends Canvas implements Runnable{ priv
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));
}
}
为所有的代码道歉。我尽量少发帖子
我尝试为每个对象添加一个mouslistener,这样它们就可以拥有自己的MouseEvent
因此,当单击它时,它会为每个对象返回一个唯一的ID
如果您想知道单击了哪个对象,可以从MouseeEvent获取该信息:
GameObjects temp = (GameObjects)e.getSource();
我试着尽可能少地发帖!!这句话伤害了我,这很有帮助,我终于明白了,并开始工作。再次感谢你!
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
}
}
for(int i = 0; i < handler.gameObjects.size(); i++)
{
GameObjects temp = handler.gameObjects.get(i);
this.addMouseListener(new MouseInput(temp));
}
//this.addMouseListener(new MouseInput(temp));
temp.addMouseListener(new MouseInput(temp));
GameObjects temp = (GameObjects)e.getSource();