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

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

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

相关文章

  • SpringBoot整合Spring Data Elasticsearch的过程详解

    下面我将为您详细讲解Spring Boot整合Spring Data Elasticsearch的完整攻略,其中包括以下步骤: 引入依赖 配置Elasticsearch 创建数据实体类 创建Elasticsearch Repository 使用Repository进行数据操作 示例1:添加数据到Elasticsearch中 示例2:从Elasticsearc…

    Java 2023年5月20日
    00
  • 双亲委派模型的作用是什么?

    以下是关于双亲委派模型的作用以及使用攻略的详细讲解: 双亲委派模型的作用是什么? 双亲委派模型是一种类加载机制,它的作用是保证的唯一性和安全性,避免重复加载和类的冲突。在双亲委派模型中,当一个类加载器收到类请求时,它首先将请求委派给父类加载器,如果父类加载器无法加载该类,则将请求委派给其子类加载器。这个过程会一直持续到顶层的启动类加载器,如果启动类加载器无法…

    Java 2023年5月12日
    00
  • Maven打包跳过测试的5种方式总结

    下面我将详细讲解“Maven打包跳过测试的5种方式总结”的完整攻略。 1. 前言 在开发中,经常需要使用 Maven 进行项目构建,在进行打包时,可能需要跳过测试,以加快构建速度,本文总结了 5 种 Maven 打包跳过测试的方式。 2. Maven 的默认行为 对于 Maven 而言,在执行项目构建时,默认情况下会进行测试,如果测试不通过,则会导致项目构建…

    Java 2023年5月19日
    00
  • 如何使用Java序列化框架?

    下面是关于如何使用Java序列化框架的详细讲解。本文将介绍Java序列化框架的基本使用方法、序列化与反序列化过程,以及常见问题及解决方法。 什么是Java序列化框架? Java序列化框架是Java语言中的一种序列化工具,用于将Java对象序列化为二进制形式或者反序列化二进制数据为Java对象形式。Java序列化框架可以实现Java对象的持久化存储和网络传输,…

    Java 2023年5月11日
    00
  • 解析Java异常的栈轨迹及其相关方法

    当Java程序出现异常时,JVM会捕获异常并打印出异常信息,其中最重要的部分就是异常的栈轨迹,它可以告诉我们异常发生的具体位置以及异常发生的原因。解析Java异常的栈轨迹及其相关方法对于排查问题而言是非常有帮助的。 1. 异常栈轨迹是什么? 异常栈轨迹是指从异常抛出点到Java虚拟机栈顶的执行路线。每个栈帧表示了方法执行的状态,栈帧之间连接起来形成一条路线,…

    Java 2023年5月27日
    00
  • spring boot开发遇到坑之spring-boot-starter-web配置文件使用教程

    在Spring Boot开发中,使用spring-boot-starter-web依赖可以快速构建Web应用程序。但是,有时候我们在配置文件中使用该依赖时会遇到一些坑。以下是spring-boot-starter-web配置文件使用教程的完整攻略: 添加spring-boot-starter-web依赖 在Maven或Gradle中添加spring-boot…

    Java 2023年5月15日
    00
  • Java后缀数组之求sa数组的实例代码

    Java后缀数组是一种经典的字符串匹配算法,可以实现快速求解字符串的后缀数组(sa数组)。下面我们将介绍如何在Java中编写求解sa数组的实例代码。 步骤一:构造后缀数组 首先我们需要准备一个包含原始字符串所有后缀的数组(称为“后缀数组”)。这个数组的元素类型为Suffix,其中Suffix类的定义如下: class Suffix implements Co…

    Java 2023年5月26日
    00
  • SMBMS超市订单管理系统的网站源码

    “SMBMS超市订单管理系统的网站源码”完整攻略 介绍 SMBMS超市订单管理系统的网站源码是一个基于JSP+Servlet+MySQL的Web开发项目。该项目主要实现了超市的订单管理功能,包括用户登录、商品信息的CRUD操作、订单的增删改查等功能。项目使用了MVC设计模式,分为模型层、控制层和视图层,使得项目的代码结构更加清晰。 环境准备 开发工具:Ecl…

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