日期:2014-05-20  浏览次数:20682 次

这个程序为什么只能显示一个棋子?
我想画个五子棋盘,用鼠标点击显示棋子,结果只能显示一颗棋子。第二次点击上一颗棋子又没了。
不明白错在哪里。该如何修改代码呢?!


import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;

public class Qipan extends JFrame {
 private int X, Y;             // x,y坐标
 final int WIDTH = 900, HEIGHT = 800;       //定义全局变量
 int x=50,y=50,L=40,N=15;     //i和j表示坐标,L表示长度,N表示规格 
 boolean isVisible = false;    //控制显示
 
 public Qipan() {
  super("超神锐");          //请叫我超神锐
  addHandler();
  setSize(WIDTH, HEIGHT);                   //设置大小
  setVisible(true);
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

 }


 private void addHandler() {
  addMouseListener(new MouseAdapter() {
   public void mouseClicked(MouseEvent e) {
    // 左键
    if (e.getButton() == MouseEvent.BUTTON1) {
     X = e.getX();        //取得鼠标的位置坐标
     Y = e.getY();
     isVisible = true;
     repaint();
    } 
      else if (e.getButton() == MouseEvent.BUTTON3) {  // 右键取消圆圈
        isVisible = false;
        repaint();
       }
  }

  });            //内部类。
 }
 
 public void paint(Graphics g) {
  super.paint(g);
  g.setColor(Color.BLUE);
  for(int j=50;j<=y+L*(N-1);j=j+L)  
   g.drawLine(x, j, x+L*(N-1), j);      //画横线
 for(int i=50;i<=x+L*(N-1);i=i+L)   
      g.drawLine(i, y, i, y+L*(N-1));   //画竖线
 for(int i=x,k=1;i<=x+L*(N-1);i=i+L,k++) {
  String k2=k+ " 囧";                 //数字转化为字符串以便显示在棋盘正下方
  g.drawString(k2, i-5,y+L*N+5 );         //调整好位置。
 }
 for(int j=y,k=1;j<=y+L*(N-1);j=j+L,k++) {
  String k2=k+"  杀";                 //棋盘右方的数字
  g.drawString(k2, x+L*N-5, j);
   } 
  if(isVisible){                         //检验鼠标是否点击!
   g.setColor(Color.BLACK);
   g.drawOval(X-15, Y-15, 30, 30);         //画圆。为什么鼠标的坐标和圆心坐标不一致呢??坐标原点不同?
   g.fillOval(X-15,Y-15,30,30);            //填充颜色
  }
 }

 public static void main(String[] args) {
  new Qipan();            //主程序。
 }
 
}

------解决方案--------------------
    if (e.getButton() == MouseEvent.BUTTON1) {
     X = e.getX();        //取得鼠标的位置坐标
     Y = e.getY();
     isVisible = true;
     repaint();
    } 

单机了只不过是 棋子位移变化了,又重新绘图了一遍
------解决方案--------------------
LIst<Circle> lst = new ArrayList<Circle>();
想每次画的园都存在,每次点击的园位置存起来不就好了。
Circle c = new Circle(x,y);
lst.add(c);
画园时
if(lst.size() > 0){
  for(Circle c : lst){
    g.drawOval(c.getX() - 15, c.getX() - 15, 30, 30);
    g.fillOval(Xc.getX()- 15,c.getY() - 15, 30, 30);
  }
}
其他再改改就好了
右键取消...
园的位置重复性....
...