📄 clockpanel.java
字号:
package BlackAndWhite;
import BlackAndWhite.*;
import javax.swing.*;
import java.awt.*;
import java.util.*;
import java.lang.*;
public class ClockPanel
extends JPanel implements Observer{
private static final int totalTime=90;
private boolean turned;
private boolean wait;
private ImageIcon digit[]=new ImageIcon[10];
private GregorianCalendar time;
private int oldTime,currentTime;
private int leftTime;
private Object lock=new Object();
private int currentP;
private Chessboard cb;
public ClockPanel(Chessboard cb){
wait=true;
turned=false;
time=new GregorianCalendar();
for(int i=0;i<10;i++){
digit[i]=new ImageIcon("Images/CLOCK"+i+".GIF");
}
synchronized(lock){
oldTime=currentTime=time.get(Calendar.SECOND);
leftTime=totalTime;
}
this.cb=cb;
cb.addObserver(this);
setPreferredSize(new Dimension(200, 60));
}
public synchronized void paint(Graphics g){
super.paint(g);
if(wait){
g.setFont(new Font("Dialog",Font.BOLD,20));
g.drawString("黑白棋",60,40);
}
else if(turned){
time=new GregorianCalendar();
currentTime=time.get(Calendar.SECOND);
synchronized(lock){
if(currentTime!=oldTime)
leftTime--;
if(leftTime<0)leftTime=0;
}
oldTime=currentTime;
g.setFont(new Font("Dialog",Font.BOLD,20));
g.drawString("剩余时间:",20,40);
synchronized(lock){
if(leftTime<0){
g.drawImage(digit[0].getImage(),130,0,25,50,this);
g.drawImage(digit[0].getImage(),160,0,25,50,this);
}
if(leftTime<10){
g.drawImage(digit[0].getImage(),130,0,25,50,this);
g.drawImage(digit[leftTime].getImage(),160,0,25,50,this);
}
else{
g.drawImage(digit[leftTime/10].getImage(),130,0,25,50,this);
g.drawImage(digit[leftTime%10].getImage(),160,0,25,50,this);
}
}
}
else{
time=new GregorianCalendar();
currentTime=time.get(Calendar.SECOND);
synchronized(lock){
if(currentTime!=oldTime)
leftTime--;
}
oldTime=currentTime;
g.setFont(new Font("Dialog",Font.BOLD,20));
String s="";
for(int i=0;i<=((totalTime-leftTime)%6);i++)
s+=".";
g.drawString("等待对方下棋"+s,30,40);
}
}
public synchronized void update(Observable o, Object arg){
synchronized(lock){
leftTime=totalTime;
}
if(currentP==cb.currentP)
turned=true;
else
turned=false;
repaint();
}
public synchronized void setTurned(boolean t){
turned=t;
}
public synchronized void setWait(boolean w){
wait=w;
}
public synchronized void reset(){
wait=true;
turned=false;
synchronized(lock){
leftTime=totalTime;
}
repaint();
}
public void restart(){
reset();
}
public void start(int p){
time=new GregorianCalendar();
oldTime=currentTime=time.get(Calendar.SECOND);
wait=false;
currentP=p;
if(currentP==cb.currentP)
turned=true;
else
turned=false;
repaint();
}
public int getLT(){
synchronized(lock){
return leftTime;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -