井字游戏程序为什么组件显示有重复的,如图
程序代码:
import java.awt.Color; import java.awt.Graphics; import java.awt.GridLayout; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.BorderLayout; import javax.swing.CellEditor; import javax.swing.JApplet; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.border.LineBorder; public class TicTacToe extends JApplet { private char whoseTurn = 'X'; private Cell[][] cells = new Cell[3][3]; private JLabel jlblStatus = new JLabel("X's turn to play"); public TicTacToe(){ JPanel p = new JPanel(new GridLayout(3, 3,0,0)); for(int i=0;i<3;i++) for(int j=0;j<3;j++) p.add(cells[i][j] = new Cell()); p.setBorder(new LineBorder(Color.red, 1)); jlblStatus.setBorder(new LineBorder(Color.yellow, 1)); add(p,BorderLayout.CENTER); add(jlblStatus,BorderLayout.NORTH); } public boolean isFull(){ for(int i=0;i<3;i++) for(int j=0;j<3;j++) if(cells[i][i].getToken()==' ') return false; return true; } public boolean isWon(char token){ for(int i=0;i<3;i++) if((cells[i][0].getToken()==token) &&(cells[i][1].getToken()==token) &&(cells[i][2].getToken()==token)){ return true; } for(int j=0;j<3;j++) if((cells[0][j].getToken()==token) &&(cells[1][j].getToken()==token) &&(cells[2][j].getToken()==token)){ return true; } if((cells[0][0].getToken()==token) &&(cells[1][1].getToken()==token) &&(cells[2][2].getToken()==token)){ return true; } if((cells[0][2].getToken()==token) &&(cells[1][1].getToken()==token) &&(cells[2][0].getToken()==token)){ return true; } return false; } public class Cell extends JPanel{ private char token = ' '; public Cell(){ setBorder(new LineBorder(Color.black, 1)); addMouseListener(new MyMouseListener()); } public char getToken(){ return token; } public void setToken(char c){ token = c; repaint(); } protected void paintComponent(Graphics g){ super.paintChildren(g); if(token == 'X'){ g.drawLine(10, 10, getWidth()-10, getHeight()-10); g.drawLine(getWidth()-10, 10, 10, getHeight()-10); } else if(token == 'O'){ g.drawOval(10, 10, getWidth()-20, getHeight()-20); } } private class MyMouseListener extends MouseAdapter{ public void mouseClicked(MouseEvent e){ if(token == ' '&&whoseTurn != ' '){ setToken(whoseTurn); if(isWon(whoseTurn)){ jlblStatus.setText(whoseTurn+" Won! The game is over!"); whoseTurn = ' '; } else if(isFull()){ jlblStatus.setText("Draw! The game is over!"); whoseTurn = ' '; } else{ whoseTurn = (whoseTurn=='X')?'O':'X'; jlblStatus.setText(whoseTurn+"'s turn"); } } } } } }
每个方块只会出现圈或叉为什么两个都出现了,把最大化一下又会恢复正常。。怎么一回事儿?