2013-11-03 80 views
0

我正在使用java swing和JButton。當我按下按鈕時,我想要一個定時器啓動並計算在三秒鐘內按下按鈕的次數。我正在嘗試使用java.util.timer計時器。這是正確的路嗎?如何啓動計時器並在三秒後停止計時?如何在java上以一定間隔停止計時器

import javax.*; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import java.util.Timer; 
import java.awt.*; 
import java.awt.event.*; 

public class button{ 
    public static void main(String[] args){ 
     JFrame frame = new JFrame("Test"); 
     frame.setVisible(true); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    //frame.setSize(100, 75); 
    JPanel panel = new JPanel(); 
    frame.add(panel); 
    JButton button = new JButton ("       "); 
    button.setSize(300, 150); 
    panel.add(button); 
    button.addActionListener(new Action()); 
    frame.setAlwaysOnTop(true); 
    frame.setBounds(1225, 675, 100, 75);   
    } 
static class Action implements ActionListener{ 
    public void actionPerformed (ActionEvent e){ 

    } 
} 
public static int timer(){ 
    Timer timer = new Timer();  
    return 7; 
} 
} 
+0

歡迎來到StackOverflow!你可以分享到目前爲止的代碼並解釋具體問題嗎?我們希望首先看到您的具體嘗試,以便我們能夠充分幫助您。 –

+0

請問我的問題1.爲什麼util.Timer爲Swing,Swing有自己的Timer,2.某些interal約爲a)個數,b)時間 – mKorbel

+0

1.我不知道swing有它自己的計時器。 2.我不明白你的第二個想法 – user2947797

回答

0

不需要計時器在這裏,我猜。

剛開始的時候,只要有人點擊檢查你的ActionListener實施,如果它是從初始3秒,並增加點擊數,如果是這樣。

如果你不需要跟蹤任何進一步的點擊,你甚至可以註銷動作監聽器,一旦你跟蹤你不再感興趣的點擊。

UPDATE

你聲稱要使用Timer,但在此基礎上一個:http://www-mips.unice.fr/Doc/Java/Tutorial/uiswing/misc/timer.htmlTimer是用於觸發延遲(或重複的)任務。我認爲它不適合你的用例。

+0

不,我想要計時器開始,當我按下按鈕 – user2947797

+0

看到我更新的答案 –

0

你可以簡單的做到這一點沒有計時器:

// Time button being pressed 
long milliseconds = 0; 

JButton myButton = new JButton(); 

// Listener to click, press, release etc 
myButton.addMouseListener(new MouseAdapter(){ 
    @Override 
    public void mousePressed(MouseEvent e){ 
     milliseconds = System.currentTimeMillis(); 
    } 
    @Override 
    public void mouseReleased(MouseEvent e){ 
     long end = (milliseconds - System.currentTimeMillis()); // to seconds 
     System.out.println(String.format("You have pressed the button for %ld milliseconds", end)); 
    } 
}); 

對於「3秒的時間間隔內,」我不明白你的意思,但你可避免打印時間,如果milliseconds > 3000與我碼。

0

我會猜測你想在3秒後發生其他事情;即用戶第一次按下按鈕,定時器啓動,用戶多次按下按鈕,並且在3秒鐘後,你彈出一條消息說明他按了多少次按鈕,或者在3秒後做了其他事情。這些是在你的問題描述中有用的事情,否則人們會說你不需要計時器。

而且,這樣描述,它指出計時器並不僅僅用於計算點擊次數。如果是我,我會列出一個列表並存儲每個按鈕單擊的時間戳,然後,在定時器之後觸發的偵聽器中,我將計算適合窗口的時間戳數量,而不是數量用戶按下按鈕。問題是如果在最後一個或兩個按鈕單擊監聽器執行之前,定時器觸發器偵聽器沒有被調度,您可能會關閉一到兩個。

要使用它,請根據需要創建時間,添加一個動作偵聽器,然後在動作偵聽器中選擇按鈕單擊列表,分析窗口內發生的次數,然後執行任何操作別的你想要的。

0
static class Action implements ActionListener { 
    int count; 
    Long startTime; 

    public void actionPerformed(ActionEvent e) { 
     if (startTime != null && System.currentTimeMillis() - startTime <= 3000) { 
      if (count == 2) { 
       System.out.println("Bingo"); 
       count = 0; 
       startTime = null; 
      } else { 
       count++; 
      } 
     } else { 
      startTime = System.currentTimeMillis(); 
      count = 1; 
     } 
    } 
} 
相關問題