我正在嘗試使用 java.swing 和秒表制作秒表,我已經嘗試過 swing.Timer 和 TimerTask。 你可以幫幫我嗎?
這是 stopwatch.java 類
public class Cronometro {
private int secondi;
private int minuti;
private int ore;
private boolean state=true;
public Cronometro(){
}
public void crono(JLabel s, JLabel m, JLabel h, ActionEvent evt){
state=true;
Thread t = new Thread(){
public void run(){
for(;;){
if(state==true){
try{
sleep(10);
secondi ;
if(secondi>60){
secondi=0;
minuti ;
}
if(minuti>60){
secondi=0;
minuti=0;
ore ;
}
s.setText(" :" secondi);
m.setText(" : " minuti);
h.setText("" ore);
} catch(Exception e){
}
}
else{
break;
}
}
}
};
t.start();
}
public void setState(boolean state){
this.state=state;
}
}
gui/main.java 幾乎都是由 netbeans 生成的
uj5u.com熱心網友回復:
這是您如何使用 Swing Timer 每秒運行update一次的方法:
class Cronometro {
private int secondi;
private int minuti;
private int ore;
private boolean state=true;
private Timer timer;
private final JLabel s, m, h;
public Cronometro(JLabel s, JLabel m, JLabel h) {
this.s = s;
this.m = m;
this.h = h;
}
public void crono(JLabel s, JLabel m, JLabel h){
state=true;
if(timer != null) {
timer.stop();
}
timer = new Timer(1000, e->update());
timer.start();
}
public void update(){
if(! state) return;
secondi ;
if(secondi>60){
secondi=0;
minuti ;
}
if(minuti>60){
secondi=0;
minuti=0;
ore ;
}
s.setText(" :" secondi);
m.setText(" : " minuti);
h.setText("" ore);
}
public void setState(boolean state){
this.state=state;
}
}
旁注:為了改進應用程式結構,引入一個封裝所需資訊(秒、分鐘、小時)的模型類。Cronometro在和 GUI之間共享這個模型。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/429884.html
上一篇:如何手動對齊、更改大小和添加JTable的滾動窗格?
下一篇:防止重復帳戶,無限量的訊息
