java实现秒表功能

yizhihongxing

下面是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实现秒表功能的完整攻略。

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

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

相关文章

  • Spring MVC 简单的hello world的实现

    Spring MVC是一种基于Java的Web框架,它可以帮助我们快速地开发Web应用程序。在本文中,我们将详细介绍如何使用Spring MVC实现一个简单的“Hello, world!”应用程序。 环境准备 在开始之前,我们需要准备好以下环境: JDK 1.8或更高版本 Maven 3.0或更高版本 IntelliJ IDEA或Eclipse等Java I…

    Java 2023年5月17日
    00
  • 详解Quartz 与 Spring框架集成的三种方式

    详解Quartz 与 Spring框架集成的三种方式如下: 一、通过Spring的配置方式 1. 引入Quartz依赖 在pom.xml文件中引入Quartz的依赖,示例代码如下: <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>…

    Java 2023年5月19日
    00
  • Android下拉阻尼效果实现原理及简单实例

    下面我将详细讲解“Android下拉阻尼效果实现原理及简单实例”的完整攻略。 Android下拉阻尼效果实现原理 原理介绍 下拉阻尼效果是指在下拉列表或者下拉刷新等场景中,当用户下拉视图时,视图能够随手指的滑动而进行拉伸或缩放,形成一种类似于弹簧效果的体验。 实现该效果的原理是利用滑动事件监听,根据手指滑动时的位移量以及速度,计算出视图需要滑动的距离,然后对…

    Java 2023年5月23日
    00
  • 如何用Java Stream写出既高雅又装*的代码

    如何用Java Stream写出既高雅又装*的代码? Java Stream可以被用来解决很多问题,从简单的过滤到复杂的组合操作。它极大地减少了编写的代码量,提高了代码的可读性、可维护性和可重用性。 下面是一些使用Java Stream的技巧,可以让你写出高雅又装*的代码。 1. 使用Lambda表达式写过滤器 传统的Java代码需要明确指定每一步操作的细节…

    Java 2023年5月26日
    00
  • 学习 WSH 的理由小结

    学习 WSH(Windows Script Host)的理由有很多,我在这里总结了一些重要的理由,帮助大家更好地了解 WSH 并开始学习。 学习 WSH 的理由小结 1. WSH 是 Windows 操作系统自带的脚本处理引擎 WSH 是和 Windows 操作系统一起安装的,它提供了一种可以运行脚本程序的环境,使得我们可以使用脚本语言来处理各种操作系统的任…

    Java 2023年5月26日
    00
  • jsp 常用标签的使用

    下面是关于“JSP 常用标签的使用”的完整攻略: 1. JSP 常用标签简介 JSP 常用标签可以分为以下几类: 基本标签:以下标签是使用最为频繁的 JSP 标签,它们能够帮助实现基本的输出、判断、循环等功能。 <%@ page %>:用于页面的指令,可以设置页面的属性等。 <%= %>:输出表达式,可以输出 JSP 中的表达式的值。…

    Java 2023年6月15日
    00
  • 详解Java反射创建对象

    下面是详解Java反射创建对象的完整攻略。 什么是Java反射? Java反射指的是在程序运行时动态获取类的信息以及使用类的方法和属性。使用Java反射,可以在运行时动态创建对象、调用方法和访问属性,而不需要在编译期进行硬编码。 Java反射创建对象的步骤 Java反射创建对象的主要步骤如下: 获取Class对象:首先需要通过类的全限定名或对象实例的getC…

    Java 2023年5月26日
    00
  • Spring Boot统一异常处理详解

    下面将以“Spring Boot统一异常处理详解”为主题,为大家详细讲解该主题的完整攻略。 一、什么是 Spring Boot 统一异常处理 Spring Boot 统一异常处理指在 Spring Boot 应用程序中,通过设置全局异常处理器,来捕获和处理抛出的异常信息。通过统一异常处理,我们可以将系统中可能出现的各种异常信息进行分类、归纳和统一处理,并返回…

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