java实现秒表功能

下面是Java实现秒表功能的完整攻略:

确定界面布局

首先,要确定秒表界面的布局,可以使用Swing包提供的JFrameJLabel等组件。

一个简单的秒表GUI界面可以包含如下控件:

  • 用于显示秒数的JLabel
  • 用于开始、停止、清零等操作的JButton
  • (可选)用于记录计时时间的列表或文本框。

编写计时器逻辑

初始秒表面板布局完成后,需要编写计时器逻辑。在Java中,可以使用javax.swing.Timer类来实现定时器的逻辑。

比如,可以在每次定时器执行时,更新当前的时间,并将其显示在界面上,例如:

// 创建定时器,每1000ms执行一次
Timer timer = new Timer(1000, e -> {
    currentTime += 1; // 当前时间加1秒
    timeLabel.setText(String.valueOf(currentTime)); // 更新时间文本框显示
});

添加按钮事件监听器

下一步是编写按钮事件监听器,负责处理按钮点击事件。例如,当用户点击Start按钮时,启动定时器。

// Start按钮事件监听器
startButton.addActionListener(e -> {
    // 定时器已经启动,不需要重新启动
    if (timer != null && timer.isRunning()) {
        return;
    }

    // 创建新的定时器
    timer = new Timer(1000, event -> {
        currentTime += 1;
        timeLabel.setText(String.valueOf(currentTime));
    });
    timer.start(); // 启动定时器
});

当用户点击Reset按钮时,重置计时器并清空文本框。

// Reset按钮事件监听器
resetButton.addActionListener(e -> {
    currentTime = 0;
    timeLabel.setText("0");
    if (timer != null) {
        timer.stop();
    }
});

示例1:简单的秒表实现

下面是一个简单的秒表实现示例:

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.Timer;
import javax.swing.JButton;
import java.awt.BorderLayout;
import java.awt.Dimension;

public class SimpleStopwatch {

  private final JFrame frame;
  private final JLabel timeLabel;
  private final JButton startButton;
  private final JButton resetButton;
  private Timer timer;
  private int currentTime;

  public SimpleStopwatch() {
    this.frame = new JFrame("Simple Stopwatch");
    this.timeLabel = new JLabel("0", JLabel.CENTER);
    this.startButton = new JButton("Start");
    this.resetButton = new JButton("Reset");
    this.currentTime = 0;
    initUI();
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
  }

  private void initUI() {
    JPanel panel = new JPanel(new BorderLayout());
    panel.setPreferredSize(new Dimension(200, 100));
    panel.add(timeLabel, BorderLayout.CENTER);
    JPanel btnPanel = new JPanel();
    btnPanel.add(startButton);
    btnPanel.add(resetButton);
    panel.add(btnPanel, BorderLayout.SOUTH);
    frame.getContentPane().add(panel);
    startButton.addActionListener(e -> {
      if (timer != null && timer.isRunning()) {
        return;
      }
      timer = new Timer(1000, event -> {
        currentTime += 1;
        timeLabel.setText(String.valueOf(currentTime));
      });
      timer.start();
    });
    resetButton.addActionListener(e -> {
      currentTime = 0;
      timeLabel.setText("0");
      if (timer != null) {
        timer.stop();
      }
    });
  }

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

示例2:添加记录功能的秒表

即使只是一个简单的秒表,也可以提供更多的功能。例如,可以添加记录时间的功能。

下面是一个添加记录时间功能的秒表的示例:

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.Timer;
import javax.swing.JButton;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.util.ArrayList;

public class StopwatchWithRecord {

  private final JFrame frame;
  private final JLabel timeLabel;
  private final JButton startButton;
  private final JButton recordButton;
  private final JButton resetButton;
  private final JList<String> recordList;
  private final JScrollPane scrollPane;
  private Timer timer;
  private int currentTime;
  private final ArrayList<String> records;

  public StopwatchWithRecord() {
    this.frame = new JFrame("Stopwatch with Record");
    this.timeLabel = new JLabel("0", JLabel.CENTER);
    this.startButton = new JButton("Start");
    this.recordButton = new JButton("Record");
    this.resetButton = new JButton("Reset");
    this.recordList = new JList<>();
    this.recordList.setVisibleRowCount(7);
    this.scrollPane = new JScrollPane(this.recordList);
    this.currentTime = 0;
    this.records = new ArrayList<>();
    initUI();
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
  }

  private void initUI() {
    JPanel panel = new JPanel(new BorderLayout());
    panel.setPreferredSize(new Dimension(250, 200));
    panel.add(timeLabel, BorderLayout.CENTER);

    JPanel btnPanel = new JPanel();
    btnPanel.add(startButton);
    btnPanel.add(recordButton);
    btnPanel.add(resetButton);
    panel.add(btnPanel, BorderLayout.SOUTH);

    JPanel recordPanel = new JPanel(new BorderLayout());
    recordPanel.setPreferredSize(new Dimension(200, 150));
    recordPanel.add(scrollPane, BorderLayout.CENTER);
    panel.add(recordPanel, BorderLayout.EAST);

    frame.getContentPane().add(panel);

    startButton.addActionListener(e -> {
      if (timer != null && timer.isRunning()) {
        return;
      }
      timer = new Timer(1000, event -> {
        currentTime += 1;
        timeLabel.setText(String.valueOf(currentTime));
      });
      timer.start();
    });

    resetButton.addActionListener(e -> {
      currentTime = 0;
      timeLabel.setText("0");
      if (timer != null) {
        timer.stop();
      }
      records.clear();
      recordList.setListData(new String[]{});
    });

    recordButton.addActionListener(e -> {
      records.add(timeLabel.getText());
      recordList.setListData(records.toArray(new String[0]));
    });
  }

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

以上就是Java实现秒表功能的完整攻略。

阅读剩余 79%

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java实现秒表功能 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Struts2.5版本struts.xml与web.xml配置的更改方法

    Struts2.5是一个非常流行的Java web框架,其中struts.xml与web.xml是两个重要的配置文件。如果你需要修改它们,以下是详细的操作步骤: 编辑struts.xml Struts2.5默认使用的是struts.xml配置文件,你可以根据自己的需要修改它。下面是修改struts.xml的步骤: 打开struts.xml文件 “` “`…

    Java 2023年5月20日
    00
  • JSON,AJAX,Maven入门基础

    让我来详细讲解一下JSON、AJAX和Maven入门基础以及相关的示例演示。 JSON 入门基础 什么是 JSON? JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于JavaScript的一个子集,采用易于人类阅读和编写的文本格式。JSON格式可以在不同的编程语言和平台之间传输和使用。 JSON 格式 JSO…

    Java 2023年5月26日
    00
  • 通过Session案例分析一次性验证码登录

    下面我将为您详细讲解如何通过Session实现一次性验证码登录的完整攻略。 什么是一次性验证码登录 一次性验证码登录是指用户在输入正确的账号密码后,需要再次输入一次性验证码才能成功登录的方式,以增加登录的安全性。该方式常用于网上银行、支付等需要较高安全性的场景中。 实现方式 一次性验证码登录的实现方式比较简单,主要通过Session来完成。具体步骤如下: 用…

    Java 2023年6月15日
    00
  • 详解spring面向切面aop拦截器

    下面是我准备的详解Spring面向切面AOP拦截器的攻略。 什么是AOP AOP(Aspect Oriented Programming)是一种编程思想,通过在不影响主业务逻辑的情况下,往程序中添加一些辅助功能和处理逻辑。AOP思想的核心是“切面”(Aspect),切面可以看作是一个包含了若干通用处理逻辑的类,这些通用处理逻辑可以在不同的拦截点上进行重复利用…

    Java 2023年5月31日
    00
  • BeanUtils.copyProperties在拷贝属性时忽略空值的操作

    BeanUtils.copyProperties方法是Apache Commons BeanUtils库中非常常用的方法之一,它用于将一个JavaBean的属性值拷贝到另一个JavaBean中。 默认情况下,当源JavaBean的某个属性值为null时,调用BeanUtils.copyProperties方法会将目标JavaBean相应属性的值也设置为nul…

    Java 2023年6月15日
    00
  • Java Apache Commons报错“DateParseException”的原因与解决方法

    当使用Java的Apache Commons类库时,可能会遇到“DateParseException”错误。这个错误通常由以下原因之一起: 日期格式错误:如果日期格式错误,则可能会出现此错误。在这种情况下,需要检查日期格式以解决此问题。 日期解析错误:如果日期解析错误,则可能会出现此错误。在这种情况下,需要检查日期解析以解决此问题。 以下是两个实例: 例1 …

    Java 2023年5月5日
    00
  • Java面试题冲刺第十八天–Spring框架3

    Java面试题冲刺第十八天–Spring框架3 简介 本文是Java面试题冲刺系列的第十八篇,主要介绍Spring框架的知识点,包括Spring框架的特点、Spring框架中常用组件、Spring的优点等。 Spring框架的特点 Spring框架是一个轻量级的开源JavaEE框架,由于其具有以下特点而备受开发者欢迎: 依赖注入(DI)和控制反转(IoC)…

    Java 2023年5月19日
    00
  • Java编程常见内存溢出异常与代码示例

    Java编程常见内存溢出异常与代码示例攻略 1. 定义 内存溢出(OOM)是指程序在申请内存空间时,没有足够的内存空间供程序使用,导致程序出现未知异常甚至直接崩溃。 2. 常见内存溢出异常 以下是几种Java编程常见的内存溢出异常类型: java.lang.OutOfMemoryError: Java heap space 表示堆内存不够用,一般是我们分配了…

    Java 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部