我想为鼠标进入/退出时发光并且可以对其执行鼠标点击的游戏制作元素。我知道abaut MoseAdapter和Listener,但是当我实现MouseListener时,元素没有做任何事情。从我应该扩展或实现它?我使用2 for循环来检查鼠标点击的位置 - 在所有元素定位和绘制的面板中 - 但这会浪费内存/时间。
public class GElement {
private int size=30;
private int x=0;
private int y=0;
private int width=size;
private int height=size;
private int minesNear=0;
private boolean visible=false;
private boolean flagged=false;
private boolean mined=false;
public GElement() {}
public GElement(int x, int y) {
this.x=x;
this.y=y;
this.width=size;
this.height=size;
}
public void paintIt(Graphics2D g2) {
if(flagged) {
g2.setColor(new Color(0,150,0));
} else if(!visible) {
g2.setColor(new Color(0,0,250));
} else if(mined) {
g2.setColor(new Color(150,0,0));
} else {
g2.setColor(new Color(0,0,50));
}
g2.fillRect(x,y,width,height);
}
}
这个元素是在一个面板中绘制的,它是paintComponent。
public GamePane(int r, int c, int m) {
this.rows=r;
this.cols=c;
this.mines=m;
// Mine field setter
posX=offset;
posY=offset;
eArray=new GElement[rows][cols];
GElement e=new GElement();
for(int i=0;i<rows;i++) {
for(int j=0;j<cols;j++) {
e=new GElement(posX,posY);
posX+=e.getWidth()+offset;
eArray[i][j]=e;
}
width=posX-10;
posX=offset;
posY+=e.getWidth()+offset;
}
height=posY-10;
// Standard properties
this.bgColor=new Color(0,0,150);
this.setOpaque(true);
this.setPreferredSize(new Dimension(width,height));
}
@Override
public void paintComponent(Graphics g) {
Graphics2D g2=(Graphics2D)g;
// Background
g2.setColor(bgColor);
g2.fillRect(0, 0, width+10, height+10);
// Rest
// TODO
for(int i=0;i<rows;i++) {
for(int j=0;j<cols;j++) {
eArray[i][j].paintIt(g2);
}
}
}
}
将GamePane设置为主框架的contentPane。谢谢!