Java 定时器类 Timer 使用方法

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

/**
 * シンプルなタイマー
 */
public class SimpleTimer extends JWindow {

	/**
	 * メイン関数
	 */
	public static void main(String[] args) {

		SimpleTimer simpleTimer = new SimpleTimer();
		simpleTimer.pack();
		simpleTimer.setAlwaysOnTop(true);
		simpleTimer.setVisible(true);
	}

	private Long startTimeMillis;

	private JLabel label;

	private SimpleDateFormat dateFormat;

	private Timer timer;

	/**
	 * コンストラクタ
	 */
	public SimpleTimer() {

		initDateFormat();
		initConponents();
		resetTime();
		updateLabelText();
		startTimer();
	}

	/**
	 * DateFormatの初期化
	 */
	private void initDateFormat() {

		dateFormat = new SimpleDateFormat("HH:mm:ss");
		dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
	}

	/**
	 * GUIコンポーネントの初期化
	 */
	private void initConponents() {

		label = new JLabel();
		label.setFont(new Font(label.getFont().getName(), Font.BOLD, 14));
		label.setOpaque(true);
		label.setBackground(Color.black);
		label.setForeground(Color.white);
		label.setBorder(BorderFactory.createEmptyBorder(0, 2, 0, 2));
		getContentPane().add(label);

		final JPopupMenu popup = new JPopupMenu();
		JMenuItem menuItem1 = new JMenuItem("Reset");
		menuItem1.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {

				resetTime();
			}
		});
		popup.add(menuItem1);
		JMenuItem menuItem2 = new JMenuItem("Exit");
		menuItem2.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {

				System.exit(0);
			}
		});
		popup.add(menuItem2);
		label.setComponentPopupMenu(popup);

		label.addMouseListener(new MouseAdapter() {

			@Override
			public void mouseClicked(MouseEvent e) {

				if (e.getButton() == MouseEvent.BUTTON2
						&& e.getClickCount() == 1) {
					popup.setVisible(true);
				}
			}
		});
	}

	/**
	 * リセット
	 */
	private void resetTime() {

		startTimeMillis = Calendar.getInstance().getTimeInMillis();
	}

	/**
	 * ラベル更新
	 */
	private void updateLabelText() {

		SwingUtilities.invokeLater(new Runnable() {

			public void run() {

				long elapsedTime = Calendar.getInstance().getTimeInMillis()
						- startTimeMillis;

				Date date = new Date(elapsedTime);

				label.setText(dateFormat.format(date));
			}
		});
	}

	/**
	 * タイマー開始
	 */
	private void startTimer() {

		timer = new Timer();
		timer.schedule(new TimerTask() {

			@Override
			public void run() {

				updateLabelText();

			}
		}, 0, 1000);
	}
}

你可能感兴趣的:(java,swing)