public class GamePanel extends JFrame implements MouseListener {
private final int GAMEWIDTH = 500;
private final int GAMEHEIGHT = 500;
// 记录用户点击的坐标
private int x = 0;
private int y = 0;
public GamePanel() {
this.setTitle("我的五子棋游戏");
// 注册监听
this.addMouseListener(this);
int width = Toolkit.getDefaultToolkit().getScreenSize().width;
int height = Toolkit.getDefaultToolkit().getScreenSize().height;
this.setBounds((width - GAMEWIDTH) / 2, (height - GAMEHEIGHT) / 2,
GAMEWIDTH, GAMEHEIGHT);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setResizable(false);
this.setVisible(true);
}
// 重写paint()方法
public void paint(Graphics g) {
// 绘制棋盘
for (int i = 0; i < 19; i++) {
g.drawLine(10, i * 20 + 70, 370, i * 20 + 70);
g.drawLine(i * 20 + 10, 70, i * 20 + 10, 430);
}
// 绘制用户点击的坐标上画圆
g.fillOval(x - 7, y - 7, 14, 14);
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
x = e.getX();
y = e.getY();
// 判断用户点击的点在棋盘内
if (x >= 10 && x <= 370 && y >= 70 && y <= 430) {
// 重画界面
this.repaint();
}
}
(问题:鼠标点在棋盘内。为什么我的棋盘能出现多个圆呢?为什么不是只有一个圆呢?)
------解决方案--------------------------------------------------------
画布没有清空
------解决方案--------------------------------------------------------
repaint();
------解决方案--------------------------------------------------------
重写update方法 。然后调用repaint 。 repaint方法重画都是调用的update方法。
------解决方案--------------------------------------------------------
路过学习一下