有个作业做五子棋  我用jpanel作画布 棋盘都画好了 也能下子
问题来了:
paintComponent(Graphics)负责绘制棋盘 和 落的子
通过监听鼠标点击事件 调用 repaint()方法来落子 
但每次下子都只有最新放下的一个棋子显示出来 以前画的棋子被清空了
能有什么办法把原来画好的内容保留下来 下次repaint()在这基础上接着画??

解决方案 »

  1.   

    个人认为直接在JPanel上用paintComponent来画棋子不是特别好。从OO的角度来考虑,应该在JPanel上只画棋盘,而棋子用单独的一个JComponent来实现,这样任务的强度和复杂度就分散了,鼠标点击的时候只需要放一个棋子的类到棋盘上,而棋盘总是一如既往的画同样的东西,这样不但简单,而且可以实现悔棋的功能。
      

  2.   

    忘记回答你的问题。如果你在棋盘上直接话棋子的话,你需要用List记录下每一个棋子的坐标和属性(白或黑)在paintComponent里画完棋盘后用循环把这些棋子挨个画出来,每下一个棋子都要重画所有的。如果在你的paintComponent里没有循环只有一个drawOval之类的东西,那你必然得到的是一枚棋子。
      

  3.   

    没太明白 是指把棋子单独做个类 然后用arraylist 存储所有落子 再在paintComponent()里画出arraylist里的内容???
      

  4.   


    做出单独的棋子后,在棋盘上就不用paintComponent来画棋子了。比如说你的棋盘是JPanel,设置jpanel.setLayout(null),直接用jpanel.add(JComponent)就可以了。棋子的坐标用 棋子.setBounds(x, y, w, h)来设置。所以你只要遍历List<棋子>把所有的棋子添加到棋盘上即可。
      

  5.   

    把棋子想象成JButton,你把JButton放到JPanel上的时候不用paintComponent吧?一样的道理
      

  6.   

    哦 是不是下了多少个子 就有多少个相应的棋子jcomponent?