package com.swing1;import javax.swing.*;
import java.awt.*;
import java.awt.event.*;class ChessPanel extends JPanel { //棋盘; private int space = 20; //网格间的距离;
private int grids = 30; //棋盘的网格数;
private int radius = space / 2; //棋的半径; //当chesses[i][j]=0时,表示网格节点(i,j)上无棋;
//当chesses[i][j]=1时,表示网格节点(i,j)上放白棋;
//当chesses[i][j]=2时,表示网格节点(i,j)上放黑棋;
private int[][] chesses = new int[grids + 1][grids + 1];
private int currColor = 1; //当前棋盘的颜色; private JMenuBar chessMenuBar = new JMenuBar(); //import javax.swing.JMenuBar;
private JMenu optMenu = new JMenu("操作"); //import javax.swing.JMenu;
private JMenuItem startMenItem = new JMenuItem("开始");
private JMenuItem exitMenuItem = new JMenuItem("退出"); private ActionListener startHandler = new ActionListener() {//开始菜单;
public void actionPerformed(ActionEvent e) {
clearGrids(); //清空棋盘;
currColor = 1;
repaint(); //刷新图形;
}
}; private ActionListener exitHandler = new ActionListener() {//退出;
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}; private MouseListener playChessHandler = new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
int x = e.getX();
int y = e.getY();
//放一棵棋子;
if (x <= grids * space && x >= 0 && y <= grids * space && y >= 0) {
if (chesses[round(x)][round(y)] == 0) {
chesses[round(x)][round(y)] = currColor;
currColor = currColor == 1 ? 2 : 1; //切换棋子的颜色;
repaint(); //刷新图形;
}
}
}
}; public int round(float a) { //获得接近a的网格节点坐标;
float f = a / space;
return Math.round(f);
} public ChessPanel(int space, int grids) {
this.space = space;
this.grids = grids;
this.radius = space / 2;
setBackground(Color.YELLOW);
setSize(space * grids, space * grids);
startMenItem.addActionListener(startHandler);
exitMenuItem.addActionListener(exitHandler);
addMouseListener(playChessHandler); chessMenuBar.add(optMenu);
optMenu.add(startMenItem);
optMenu.add(exitMenuItem);
} public JMenuBar getMenuBar() {
return chessMenuBar;
} /**画一个棋子 */
private void drawChess(Graphics g, int x, int y, int color) {
g.setColor(color == 1 ? Color.WHITE : Color.BLACK);
g.fillOval(x * space - radius, y * space - radius, radius * 2,
radius * 2);
} /**画网格 */
private void drawGrids(Graphics g) {
g.setColor(Color.DARK_GRAY);
for (int i = 0; i <= grids; i++) {
g.drawLine(0, i * space, grids * space, i * space);
g.drawLine(i * space, 0, i * space, grids * space);
}
} /**清空棋盘 */
private void clearGrids() {
for (int i = 0; i <= grids; i++) {
for (int j = 0; j <= grids; j++) {
chesses[i][j] = 0;
}
}
} public void paintComponet(Graphics g) { //覆盖(重写)paintComponet方法;(绘制网格及棋子)
super.paintComponent(g); //必须先调用父类的方法; this.drawGrids(g); //画网格;
for (int i = 0; i <= grids; i++) {
for (int j = 0; j <= grids; j++) {
if (chesses[i][j] != 0) {
drawChess(g, i, j, chesses[i][j]); //画棋子;
}
}
}
}}
public class ChessPlayer extends JFrame {
private ChessPanel chessPanel = new ChessPanel(20, 30); public ChessPlayer(String title) {
super(title); Container contentPane = getContentPane();
contentPane.add(chessPanel);
setJMenuBar(chessPanel.getMenuBar());
setSize(600, 600);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
} public static void main(String[] args) {
new ChessPlayer("五子棋/围棋"); }
}
import java.awt.*;
import java.awt.event.*;class ChessPanel extends JPanel { //棋盘; private int space = 20; //网格间的距离;
private int grids = 30; //棋盘的网格数;
private int radius = space / 2; //棋的半径; //当chesses[i][j]=0时,表示网格节点(i,j)上无棋;
//当chesses[i][j]=1时,表示网格节点(i,j)上放白棋;
//当chesses[i][j]=2时,表示网格节点(i,j)上放黑棋;
private int[][] chesses = new int[grids + 1][grids + 1];
private int currColor = 1; //当前棋盘的颜色; private JMenuBar chessMenuBar = new JMenuBar(); //import javax.swing.JMenuBar;
private JMenu optMenu = new JMenu("操作"); //import javax.swing.JMenu;
private JMenuItem startMenItem = new JMenuItem("开始");
private JMenuItem exitMenuItem = new JMenuItem("退出"); private ActionListener startHandler = new ActionListener() {//开始菜单;
public void actionPerformed(ActionEvent e) {
clearGrids(); //清空棋盘;
currColor = 1;
repaint(); //刷新图形;
}
}; private ActionListener exitHandler = new ActionListener() {//退出;
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}; private MouseListener playChessHandler = new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
int x = e.getX();
int y = e.getY();
//放一棵棋子;
if (x <= grids * space && x >= 0 && y <= grids * space && y >= 0) {
if (chesses[round(x)][round(y)] == 0) {
chesses[round(x)][round(y)] = currColor;
currColor = currColor == 1 ? 2 : 1; //切换棋子的颜色;
repaint(); //刷新图形;
}
}
}
}; public int round(float a) { //获得接近a的网格节点坐标;
float f = a / space;
return Math.round(f);
} public ChessPanel(int space, int grids) {
this.space = space;
this.grids = grids;
this.radius = space / 2;
setBackground(Color.YELLOW);
setSize(space * grids, space * grids);
startMenItem.addActionListener(startHandler);
exitMenuItem.addActionListener(exitHandler);
addMouseListener(playChessHandler); chessMenuBar.add(optMenu);
optMenu.add(startMenItem);
optMenu.add(exitMenuItem);
} public JMenuBar getMenuBar() {
return chessMenuBar;
} /**画一个棋子 */
private void drawChess(Graphics g, int x, int y, int color) {
g.setColor(color == 1 ? Color.WHITE : Color.BLACK);
g.fillOval(x * space - radius, y * space - radius, radius * 2,
radius * 2);
} /**画网格 */
private void drawGrids(Graphics g) {
g.setColor(Color.DARK_GRAY);
for (int i = 0; i <= grids; i++) {
g.drawLine(0, i * space, grids * space, i * space);
g.drawLine(i * space, 0, i * space, grids * space);
}
} /**清空棋盘 */
private void clearGrids() {
for (int i = 0; i <= grids; i++) {
for (int j = 0; j <= grids; j++) {
chesses[i][j] = 0;
}
}
} public void paintComponet(Graphics g) { //覆盖(重写)paintComponet方法;(绘制网格及棋子)
super.paintComponent(g); //必须先调用父类的方法; this.drawGrids(g); //画网格;
for (int i = 0; i <= grids; i++) {
for (int j = 0; j <= grids; j++) {
if (chesses[i][j] != 0) {
drawChess(g, i, j, chesses[i][j]); //画棋子;
}
}
}
}}
public class ChessPlayer extends JFrame {
private ChessPanel chessPanel = new ChessPanel(20, 30); public ChessPlayer(String title) {
super(title); Container contentPane = getContentPane();
contentPane.add(chessPanel);
setJMenuBar(chessPanel.getMenuBar());
setSize(600, 600);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
} public static void main(String[] args) {
new ChessPlayer("五子棋/围棋"); }
}
换成
@Override
public void paint(Graphics g){
就应该可以了。