JavaFX打卡本地应用

简介

JavaFX是一种用于构建富客户端应用程序的Java框架。它提供了丰富的图形化界面组件和丰富的功能,可以轻松地创建各种类型的应用程序,包括打卡本地应用。在本文中,我们将演示如何使用JavaFX创建一个简单的打卡本地应用,并提供代码示例和说明。

准备工作

在开始之前,我们需要安装Java Development Kit(JDK)和JavaFX SDK。确保已正确安装并配置了这些软件包。

设计

在开始编写代码之前,让我们先设计我们的打卡本地应用。该应用将具有以下功能:

  1. 用户可以创建新的打卡项目。
  2. 用户可以记录每天的打卡记录。
  3. 用户可以查看打卡项目的统计信息。

根据以上需求,我们可以设计以下类图:

classDiagram
    class PunchCardApp{
        -projects: List<Project>
        +addProject(project: Project): void
        +removeProject(project: Project): void
        +getProjects(): List<Project>
        +getOverallStatistics(): Statistics
    }

    class Project{
        -name: String
        -punchCardRecords: List<PunchCardRecord>
        +addPunchCardRecord(date: LocalDate): void
        +getPunchCardRecords(): List<PunchCardRecord>
        +getStatistics(): Statistics
    }

    class PunchCardRecord{
        -date: LocalDate
        -status: Status
        +getDate(): LocalDate
        +setStatus(status: Status): void
        +getStatus(): Status
    }

    class Status{
        -value: String
        +getValue(): String
    }

    class Statistics{
        -totalDays: int
        -completedDays: int
        +getTotalDays(): int
        +getCompletedDays(): int
        +getCompletionPercentage(): double
    }

实现

现在让我们根据设计开始实现我们的打卡本地应用。首先,我们需要创建一个PunchCardApp类,它将管理所有的打卡项目和提供统计信息。

import java.util.ArrayList;
import java.util.List;

public class PunchCardApp {
    private List<Project> projects;

    public PunchCardApp() {
        projects = new ArrayList<>();
    }

    public void addProject(Project project) {
        projects.add(project);
    }

    public void removeProject(Project project) {
        projects.remove(project);
    }

    public List<Project> getProjects() {
        return projects;
    }

    public Statistics getOverallStatistics() {
        int totalDays = 0;
        int completedDays = 0;

        for (Project project : projects) {
            Statistics projectStatistics = project.getStatistics();
            totalDays += projectStatistics.getTotalDays();
            completedDays += projectStatistics.getCompletedDays();
        }

        return new Statistics(totalDays, completedDays);
    }
}

接下来,我们需要创建一个Project类,它将代表用户创建的打卡项目。该类将包含一个名称和一组打卡记录。

import java.util.ArrayList;
import java.util.List;

public class Project {
    private String name;
    private List<PunchCardRecord> punchCardRecords;

    public Project(String name) {
        this.name = name;
        punchCardRecords = new ArrayList<>();
    }

    public void addPunchCardRecord(LocalDate date) {
        punchCardRecords.add(new PunchCardRecord(date));
    }

    public List<PunchCardRecord> getPunchCardRecords() {
        return punchCardRecords;
    }

    public Statistics getStatistics() {
        int totalDays = punchCardRecords.size();
        int completedDays = 0;

        for (PunchCardRecord record : punchCardRecords) {
            if (record.getStatus().getValue().equals("Completed")) {
                completedDays++;
            }
        }

        return new Statistics(totalDays, completedDays);
    }
}

然后,我们需要创建一个PunchCardRecord类,它将代表每一天的打卡记录。该类将包含一个日期和一个状态。

import java.time.LocalDate;

public class PunchCardRecord {
    private LocalDate date;
    private Status status;

    public PunchCardRecord(LocalDate date) {
        this.date = date;
        status = new Status("Pending");
    }

    public LocalDate getDate() {
        return date;
    }

    public void setStatus(Status status) {
        this.status = status;
    }

    public Status getStatus() {
        return status;
    }
}

最后,我们需要创建一个Status类,它将代表打卡记录的状态。该类将包含一个值,表示打卡记录的状态。