下面是我编写的示例代码中的示例,其中用户获得了带有2个按钮的界面。当用户单击开始按钮时,计时器启动;单击结束按钮,计时器停止,并显示时间差。
但是没有输出时间差:(
有人可以帮我吗
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);
}
}
最佳答案
您在大写字母中输入了按钮文本,但随后在事件处理程序中寻找小写字母。
您还可以在s_time
方法中将e_time
和0
都设置为actionPerformed()
,这意味着每次单击时它们都被设置为0
。这两个都必须是ButtonHandler
类中的字段。
此外,按照您的书写方式,单击任一按钮都会触发JOptionPane.showMessageDialog()
。
编辑:要解决最后一个问题,请将diff
计算和JOptionPane.showMessageDialog()
调用移至随后的else
块内;您仅在按下“结束”按钮时才需要它。