2012-01-12 60 views
1

下面的示例代码,我写的地方用户得到一个界面与2个按钮。当用户点击开始按钮时,定时器启动,当点击结束按钮时,定时器停止并显示时间差。 但在时间上的差异是不是被输出:(java在时间上的差异

可以有人帮忙英里。

import java.awt.FlowLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JOptionPane; 
import javax.swing.JTextField; 

public class Timer2 extends JFrame { 

    private JButton start; 
    private JButton end; 

    public Timer2() { 
     super("Test Timer"); 
     setLayout(new FlowLayout()); 
     start = new JButton("START"); 
     add(start); 
     end = new JButton("END"); 
     add(end); 

     ButtonHandler handler = new ButtonHandler(); 
     start.addActionListener(handler); 
     end.addActionListener(handler); 
    } 

    private class ButtonHandler implements ActionListener { 

     public void actionPerformed(ActionEvent event) { 
      long s_time = 0; 
      long e_time = 0; 
      long diff = 0; 
      String name = ((JButton) event.getSource()).getText(); 
      if (name.equals("start")) { 
       s_time = System.currentTimeMillis(); 
      } else { 
       e_time = System.currentTimeMillis(); 
      } 
      diff = (e_time - s_time)/1000; 
      JOptionPane.showMessageDialog(null, diff); 
     } 
    } 

    public static void main(String[] args) { 
     Timer2 timer2 = new Timer2(); 
     timer2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     timer2.setSize(200, 200); 
     timer2.setVisible(true); 
    } 
} 
+0

另请参见['JTimeLabel'](http://stackoverflow.com/a/2576909/230513)。 – trashgod 2012-01-12 15:42:19

回答

4

你给以大写字母你的按钮的文本,但随后都在寻找在事件处理小写。

也被同时设置s_timee_time0actionPerformed()方法,这意味着他们单击每次设置为0内。这些都必须在ButtonHandler类字段。

另外,你写它的方式,当你点击或者按钮时,JOptionPane.showMessageDialog()会被触发。

编辑:为解决最后一个问题,您的移动计算diffJOptionPane.showMessageDialog()调用它遵循else块内;你只需要当“结束”按钮被按下时。

2

我假设你只想在用户点击“End”时显示结果。您编写它的方式,对话框将以任何方式显示。要解决此问题,请在else块内移动JOptionPane.showMessageDialog(null, diff)。另一件事情,就像@Brian Roach如此有用地解释的那样,计算机是非常区分大小写的(例如“THUS”并不等于“因此”)。所以,确保你指的是正确的项目。

+0

很确定自动拳击已经照顾到了这一点,但我不得不测试它。如果它不是呕吐,它肯定会将'long'转换为* some *'Object' – 2012-01-12 15:52:39

+0

@BrianRoach不确定,但是没有任何损害进行转换。 – fireshadow52 2012-01-12 15:58:03

+0

@Brian Roach和@ fireshadow52 非常感谢您的帮助。我已经改变了,它的工作:) 但有一个小问题。当我点击开始按钮,我得到一个消息框..如何纠正它。 – Ravi77 2012-01-12 15:59:35