我想将我的计时器设置为0并显示已用时间。使用此代码,它会自动从1:00开始。但我想自动从0:00开始。这是我的代码,从1:00开始。如何将此代码设置为从0:00开始的计时器?
class TimeTyping extends JPanel implements Runnable{
private JLabel timelabel;
private int sec=1,min=1,testtime=0;
private String str;
private boolean timefree;
protected Thread t1 ;
TimeTyping(int time){
super();
setLayout(new FlowLayout());
setVisible(true);
setSize(300,300);
if(time<=5){
str=""+time+":00";
timelabel=new JLabel(str);
timefree=false;
}
else{
timelabel=new JLabel("Free Time Test");
timefree=true;
}
add(timelabel);
t1 = new Thread(this);
/*t1.start();
t1.suspend();*/
}
public void run(){
try{
if(timefree){
testtime++;
run();
System.out.println("free");
}
else{
//taking min and sec form label
synchronized(this) {
if(sec==0){
sec=60;
min--;
}
sec++;
testtime++;
if(sec>9){
timelabel.setText(min+":"+sec);
}
else{
timelabel.setText(min+":0"+sec);
}
}
Thread.sleep(1000);
//if test is not over
if(min>0 || sec>0){
run();
}
}
}
catch(Exception e){}
}
//return total test time taken in sec
public int getTestTime(){
return testtime;
}
//return minutes of test time left
public int getMin(){
return min;
}
//return sec of test time left
public int getSec(){
return sec;
}
/*public static void main(String args[]){
TypingTime t= new TypingTime();
}*/
}
答案 0 :(得分:0)
为什么在第4行设置min = 1
和sec = 1
?在我看来,这就是你的计时器在01:00开始的原因。另外:你如何调用构造函数?如果您在没有参数TypingTime t= new TypingTime();
的情况下调用它,它将忽略您的所有设置。
答案 1 :(得分:0)
您设置了min
和sec
= 1
。这是您的问题,但如果您将其值更改为0
,则会从min = -1
开始。
在代码中添加boolean
(例如init
)。因此,如果您的计划刚刚开始,您可以查看if(sec==0){
行。希望你明白我的意思。 : - )
...
private boolean init = false;
...
if (sec == 0 && init) {
sec = 60;
min--;
} else if (!init) {
init = true;
}
...
是的,我认为你应该使用javax.swing.Timer。