2014-10-13 5 views
-1

Я пытался реализовать таймер для своей программы без успеха. Мне нужен таймер, который может рассчитывать в секундах. Моя идея заключалась в создании таймера, который добавлял 1 к переменной каждую секунду, но я действительно не знаю, как это сделать. Таймер должен начинаться при нажатии кнопки 1 или кнопки2 и останавливаться при нажатии кнопки3. Кстати, мне придется использовать таймер Swing, поскольку это касается программы GUI.Как запустить таймер при нажатии кнопки?

Было бы хорошо, если бы кто-нибудь мог указать мне в правильном направлении. Я искал синтаксис для таймеров в Java, но я этого не понимаю (я новичок в кодировании).

Это код (я оставил некоторый несущественный материал):

public class ColoredWordsExperiment { 
    JFrame frame; 
    JButton button1; 
    JButton button2; 
    JButton button3; 
    ButtonHandler buttonHandler; 
    Timer timer; 

ColoredWordsExperiment(){ 
    frame = new JFrame("Colored Words Experiment"); 

    button1 = new JButton("Matching"); 
    button2 = new JButton("Non-matching"); 
    button3 = new JButton("Finished"); 

    buttonHandler = new ButtonHandler(this); 
    button1.addActionListener(buttonHandler); 
    button2.addActionListener(buttonHandler); 
    button3.addActionListener(buttonHandler); 

    timer = new Timer(1000, buttonHandler); 
} 

public static void main(String[] arg) { 
    new ColoredWordsExperiment(); 
} 

} 

-

class ButtonHandler implements ActionListener { 
    ColoredWordsExperiment coloredWords; 
    public ButtonHandler(ColoredWordsExperiment coloredWords) { 
    this.coloredWords = coloredWords; 
    } 

@Override 
public void actionPerformed(ActionEvent e){ 
    //If button "Matching" is clicked 
    if (e.getActionCommand().equals("Matching")) { 
     generateMatching(); 
     timer(); 

    //If button "Non-Matching is clicked 
    } else if (e.getActionCommand().equals("Non-matching")) { 
     generateNonMatching(); 
     timer(); 

    //If button "Finished" is clicked 
    } else if (e.getActionCommand().equals("Finished")) { 
     //stop timer 
    } 

} 

public void timer(){ 
    coloredWords.timer.start(); 
} 

} 
+3

Вы хотите показать нам свою попытку решить эту проблему в первую очередь, и вы захотите задать конкретный вопрос или множество вопросов, рассказывающих нам, где именно вы застряли, и что * конкретно * вы не понимаете. Иначе ваш вопрос переводится нам, «пожалуйста, сделайте мою работу для меня», и я уверен, что это не то, что вы имели в виду. Я бы начал с проверки Swing Timers, в том числе Googling, для основного учебника по этому вопросу, а также для поиска на этом сайте, поскольку об этом обычно спрашивают. –

+1

[Поиск в Google] (http://www.google.com/?q=java+swing+timer+tutorial) - проверьте первый хит. Кроме того, пожалуйста, ознакомьтесь с этим [Поиск в StackOverflow] (https://www.google.com/?q=site:stackoverflow.com+java+swing+stopwatch+timer) –

+1

Почему вы не фиксируете дату, когда пользователь нажимает затем нажмите дату, когда они нажимают вторую кнопку, а затем вычитают первую дату со второй даты, чтобы получить разницу в секундах. Не требуется таймер, если вы этого хотите. – brso05

ответ

1

вы можете создать собственный вы секундомер, как так:

public class Stopwatch { 

    private long start; 

    public Stopwatch() { 
     start = 0; 
    } 

    public void start() { 
     if(start == 0) 
      start = System.currentTimeMillis(); 
    } 

    // return time (in seconds) since this object was created 
    public double elapsedTime() { 
     if(start == 0) { return 0; } //You need to start it first 

     long time = (System.currentTimeMillis() - start)/1000.0; 
     start = 0; // reset start to allow you to start it again later 
     return time; 
    } 

Затем просто создайте секундомер и запустите его, когда кнопка 1 или 2 будет нажата и извлечет ее, когда кнопка 3 нажата

Смежные вопросы