1

我想创建一个具有超时/超时功能的系统。

在将该功能包含到我的系统之前,我尝试了此代码作为试用版:

import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class Time extends JFrame implements ActionListener {

     Date now = new Date();
     private JLabel time;
     private JButton getTime;
     private SimpleDateFormat dateFormatter = new SimpleDateFormat("hh:mm:ss");

public Time()
{

  setLayout(null);
  setSize(500,300);


  JLabel time = new JLabel("00:00:00");
  time.setSize(100,100);
  time.setLocation(40,40);

  JButton getTime = new JButton("GET TIME");
  getTime.addActionListener(this);
  getTime.setSize(90,30);
  getTime.setLocation(90,70);

  Container pane = getContentPane();

  pane.add(time);
  pane.add(getTime);

  setVisible(true);

}

public void actionPerformed(ActionEvent e)
{
    if (e.getActionCommand() == "GET TIME")
    {
        JOptionPane.showMessageDialog(null, "Time "+dateFormatter.format(now),       
"Time.",JOptionPane.INFORMATION_MESSAGE);
}
}

public static void main(String[] args) {
  new Time();
}
}

它获取当前时间,但是当我再次单击按钮时它仍然给出相同的时间。只有当我关闭 UI 时它才会改变。

4

2 回答 2

1

罐头答案:

不要使用==. 请改用equals(...)orequalsIgnoreCase(...)方法。了解 == 检查两个对象是否相同,这不是您感兴趣的。另一方面,这些方法检查两个字符串是否具有相同顺序的相同字符,这在这里很重要。所以而不是

if (fu == "bar") {
  // do something
}

做,

if ("bar".equals(fu)) {
  // do something
}

或者,

if ("bar".equalsIgnoreCase(fu)) {
  // do something
}

无法回答的答案:

换句话说,改变这个:

if (e.getActionCommand() == "GET TIME")

对此:

if ("GET TIME".equals(e.getActionCommand())

或者更好的是,使用字符串常量。

此外,您需要避免在 Swing GUI 中使用空布局,因为您会发现这是一种很难布局的方式。使用布局管理器更容易、更健壮。

编辑
您需要从您的 actionPerformed 方法中获取时间。也就是说,now应该在调用JOptionPane之前在actionPerformed方法中创建。

public void actionPerformed(ActionEvent e)
{
    if (e.getActionCommand() == "GET TIME")
    {
        now = new Date();
        JOptionPane.showMessageDialog(null, "Time "+dateFormatter.format(now),       
于 2012-10-07T17:30:33.250 回答
1

您得到了相同的时间,因为您已将 Date 变量声明为全局变量并在全局范围内对其进行了初始化。你应该改变你的实现actionPerformed如下:

public void actionPerformed(ActionEvent e) {
    Date now = new Date(); //Create a new instance of date
    if ("GET TIME".equalsIgnoreCase(e.getActionCommand())) {
        JOptionPane.showMessageDialog(null,
                "Time " + dateFormatter.format(now), "Time.",
                JOptionPane.INFORMATION_MESSAGE);
    }           
}
于 2012-10-07T17:42:32.167 回答