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

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 に答える
1

定型回答:

を使用して文字列を比較しないでください==。代わりにequals(...)またはメソッドを使用してください。equalsIgnoreCase(...)== は、2 つのオブジェクトが同じであるかどうかをチェックすることを理解してください。だから代わりに

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 メソッド内から時間を取得する必要があります。つまり、nowJOptionPane を呼び出す前に 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 に答える