0

表示されている2つのボタンでタイマーをリセット/一時停止するにはどうすればよいですか? タイマーは機能しますが、ボタンのコードを変更して、コンソールに出力する代わりにタイマーを変更したいと考えています。ありがとうございました。

コード:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class createWindow extends JFrame implements ActionListener
{
public static void main(String[] args)
{
    new createWindow();
}//end main

createWindow()
{
    super("Frame");
    setSize(400,70);
    setResizable(false);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setLayout(new FlowLayout());
    show();

        final JLabel time = new JLabel("Timer");
        JButton reset = new JButton("Reset timer");
        JButton pause = new JButton("Pause timer");
        reset.setActionCommand("resetClicked");
        pause.setActionCommand("pauseClicked");
        reset.addActionListener(this);
        pause.addActionListener(this);
        add(pause);
        add(time);
        add(reset);

    long start = System.currentTimeMillis();

    while (true)
        {
            long  timer = System.currentTimeMillis() - start;
            final int seconds = (int) (timer / 1000);
            String display = Integer.toString(seconds);
            time.setText(display);
        }//end while loop
    }//end constructor

@Override
public void actionPerformed(ActionEvent e) 
{
    String buttonClicked = e.getActionCommand();
    if(buttonClicked.equals("resetClicked"))
    {
        System.out.println("The reset button was clicked"); //Change to reset timer
    }
    else if(buttonClicked.equals("pauseClicked"))
    {
        System.out.println("The pause button was clicked"); //Change to pause timer
    }
}//end listener
}
4

1 に答える 1

3

while無限ループは使用しないでください。これにより、がブロックされEDTます。代わりに、スイングタイマーを使用してください。これにより、を開始および停止するための制御が可能になりますTimer

ストップウォッチの例


サイドノート:

  • JFrame.showそのメソッドは非推奨であるため、使用しないでください。JFrame.setVisible代わりに使用してください。また、すべてのコンポーネントがフレームに追加されたときにこの呼び出しを行います。
  • の機能は、ボタンごとにJButtons個別のインスタンスを使用することを保証するために十分に異なります。ActionListener
  • 推奨されるアプローチは、JFrameインスタンスを拡張するのではなく、インスタンスを直接使用することです。
  • Javaのクラス名は大文字で始まるため、createWindowになりCreateWindowます。
于 2013-01-31T16:27:48.183 に答える