java swing 添加定时器

package vocation1;


import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RadialGradientPaint;
import java.awt.RenderingHints;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;
import java.util.Timer;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class ChessBoard extends JPanel {
/*
 * 基本数据定义
 */
int span = 40;//网格大小
int margin = 200;//边距
static final int DIAMETER = 40;//棋子直径
int rows = 15;//行
int cols = 15;//列
List<Chess> chessBoard = new ArrayList<>();//保存棋盘
boolean isBlack = true;//是否黑棋落子
//添加一个计时器
public  ChessBoard() {
//当前窗口添加事件监听
//this.setBackground(new Color(255,130,71));//设置背景色
this.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
//转换成真实的棋盘坐标
int xpos = ((e.getX() - margin + span /2)/span);
int ypos = ((e.getY() - margin + span /2)/span);
//判断落子方的颜色
Color color = isBlack? Color.black : Color.white;
//判断落子是否越界
if(xpos < 0 || ypos < 0 ||xpos >= rows ||ypos >= cols) {
//JOptionPane.showMessageDialog(null, "你下的位置已越界");
return ;
}
//判断落子的位置是否有棋子
for(Chess ch : chessBoard) {
if(xpos == ch.getX() && ypos == ch.getY()) {
JOptionPane.showMessageDialog(null, "你下的位置已经有棋子了");
return ;
}
}
chessBoard.add(new Chess(xpos,ypos,color));//添加落子位置
repaint();//重新刷新棋盘
//判断是否胜利
if(CheckWin.isWin(chessBoard,xpos,ypos,isBlack)) {
String str = isBlack ? "黑棋" : "白棋";
JOptionPane.showMessageDialog(null, "恭喜,"+str+"获得胜利");
return ;
}
isBlack =! isBlack;//转换棋子颜色
}
});
}
public void paint(Graphics g) {
super.paint(g);
//将画笔转换成2d画笔
Graphics2D g2 = (Graphics2D) g;
g.setColor(Color.black);
for(int i = 0;i < rows;i++){//画横线 
  g.drawLine(margin, margin+span*i, margin+span*(cols-1), margin+span*i); 
 } 
 for(int j = 0;j < cols;j++){//画直线 
  g.drawLine(margin+span*j, margin, margin+span*j,margin+span*(rows-1)); 
 }
//给棋盘添加边框
 g.drawLine(180,180,180,780);
 g.drawLine(180,180,780,180);
 g.drawLine(780,180,780,780);
 g.drawLine(180,780,780,780);
//遍历整个棋盘
for(int i = 0;i < chessBoard.size();++i) {
Chess ch = chessBoard.get(i);
   //还原成网格
int xpos = ch.getX() * span + margin;
int ypos = ch.getY() * span + margin;
g2.setColor(ch.getColor());
RadialGradientPaint rap = null;
if(ch.getColor() == Color.black) {
rap = new RadialGradientPaint(xpos - DIAMETER / 2 + 26,ypos - DIAMETER / 2 + 12,20,new float[] {0.0f,1.0f},new Color[] {Color.WHITE,Color.BLACK});
g2.setPaint(rap);
}else {
//x,y,直径,渐变度,渐变色
rap = new RadialGradientPaint(xpos - DIAMETER / 2 + 25,ypos - DIAMETER / 2 - 30,60,new float[] {0f,1f},new Color[] {Color.BLACK,Color.WHITE});
g2.setPaint(rap);
}
//去锯齿
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_DEFAULT);
g2.fillOval(xpos - DIAMETER / 2,ypos - DIAMETER / 2,span - 1,span );
//判断棋盘的最后位置
//画红色矩形
g2.setColor(Color.RED);
if(i == chessBoard.size() - 1) {
g2.draw3DRect(xpos - DIAMETER / 2 - 1, ypos - DIAMETER / 2 -1, span, span + 1, true);
}
}
//绘制 下棋提示信息
g.setFont(new Font("微软雅黑", Font.PLAIN, 40));//绘制需要的字体
g.setColor(Color.black);
if(isBlack) {
g.drawString("现在轮到黑棋下", 80, 100);
}else {
g.drawString("现在轮到白棋下", 80, 100);
}
//给下棋提示信息添加边框
g.setColor(Color.black);
g.drawLine(50, 50, 50, 120);
g.drawLine(50,50,380,50);
g.drawLine(50,120,380,120);
g.drawLine(380,50,380,120);
//绘制 计时器
g.setFont(new Font("微软雅黑", Font.BOLD, 40));
g.setColor(Color.black);
}
}

能说的具体点吗  我只学了用户界面就开始写了 不知道线程啊lrc

你去看下thread和runnable,你的需求就是一个倒计时,倒计时结束有个什么操作,还有一个重置倒计时

发布了7 篇原创文章 · 获赞 1 · 访问量 116

猜你喜欢

转载自blog.csdn.net/liuji0517/article/details/104292564