在Java中如何开发个人日程安排工具

来源:网络编程作者:小何头衔:草根站长
导读:本期聚焦于小伙伴创作的《在Java中如何开发个人日程安排工具》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《在Java中如何开发个人日程安排工具》有用,将其分享出去将是对创作者最好的鼓励。

开发个人日程安排工具是Java实践项目中非常经典的选择,能够覆盖面向对象编程、图形界面开发、数据存储等多个核心知识点,适合有一定Java基础的学习者用来提升项目开发能力。

在Java中如何开发个人日程安排工具

项目需求与前期准备

首先要明确工具的核心功能,避免开发过程中功能蔓延。个人日程安排工具的基础功能包括日程增删改查、日程分类、提醒设置、数据持久化存储。技术选型上,图形界面可以使用Java自带的Swing框架,不需要额外引入第三方依赖,数据存储可以使用SQLite轻量数据库,方便本地部署和使用。

环境准备

  • JDK版本选择JDK8及以上,兼容性好且功能完善
  • 开发工具可以使用IntelliJ IDEA或者Eclipse,根据个人使用习惯选择即可
  • 需要引入SQLite的JDBC驱动包,用于数据库操作

数据库设计

日程数据需要持久化存储,首先要设计合理的数据库表结构。核心的日程表需要包含日程ID、日程标题、日程内容、开始时间、结束时间、日程分类、是否提醒、提醒时间等字段。

创建日程表的SQL语句如下:

-- 创建日程表
CREATE TABLE IF NOT EXISTS schedule (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    title VARCHAR(100) NOT NULL,
    content TEXT,
    start_time TIMESTAMP NOT NULL,
    end_time TIMESTAMP,
    category VARCHAR(50) DEFAULT '默认分类',
    is_remind INTEGER DEFAULT 0,
    remind_time TIMESTAMP
);

核心功能实现

日程实体类定义

首先定义日程对应的实体类,封装日程相关属性,方便后续数据传递和操作。

import java.sql.Timestamp;

public class Schedule {
    private Integer id;
    private String title;
    private String content;
    private Timestamp startTime;
    private Timestamp endTime;
    private String category;
    private Integer isRemind; // 0表示不提醒,1表示提醒
    private Timestamp remindTime;

    // 构造方法
    public Schedule() {}

    public Schedule(String title, String content, Timestamp startTime, Timestamp endTime, String category, Integer isRemind, Timestamp remindTime) {
        this.title = title;
        this.content = content;
        this.startTime = startTime;
        this.endTime = endTime;
        this.category = category;
        this.isRemind = isRemind;
        this.remindTime = remindTime;
    }

    // getter和setter方法
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public Timestamp getStartTime() {
        return startTime;
    }

    public void setStartTime(Timestamp startTime) {
        this.startTime = startTime;
    }

    public Timestamp getEndTime() {
        return endTime;
    }

    public void setEndTime(Timestamp endTime) {
        this.endTime = endTime;
    }

    public String getCategory() {
        return category;
    }

    public void setCategory(String category) {
        this.category = category;
    }

    public Integer getIsRemind() {
        return isRemind;
    }

    public void setIsRemind(Integer isRemind) {
        this.isRemind = isRemind;
    }

    public Timestamp getRemindTime() {
        return remindTime;
    }

    public void setRemindTime(Timestamp remindTime) {
        this.remindTime = remindTime;
    }
}

数据库操作工具类

封装数据库连接的获取和关闭方法,以及基础的增删改查操作,减少重复代码。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;

public class DBUtil {
    // 数据库连接地址,使用本地SQLite数据库
    private static final String URL = "jdbc:sqlite:schedule.db";

    static {
        try {
            // 加载SQLite驱动
            Class.forName("org.sqlite.JDBC");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    // 获取数据库连接
    public static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(URL);
    }

    // 添加日程
    public static boolean addSchedule(Schedule schedule) {
        String sql = "INSERT INTO schedule (title, content, start_time, end_time, category, is_remind, remind_time) VALUES (?, ?, ?, ?, ?, ?, ?)";
        try (Connection conn = getConnection();
             PreparedStatement ps = conn.prepareStatement(sql)) {
            ps.setString(1, schedule.getTitle());
            ps.setString(2, schedule.getContent());
            ps.setTimestamp(3, schedule.getStartTime());
            ps.setTimestamp(4, schedule.getEndTime());
            ps.setString(5, schedule.getCategory());
            ps.setInt(6, schedule.getIsRemind());
            ps.setTimestamp(7, schedule.getRemindTime());
            return ps.executeUpdate() > 0;
        } catch (SQLException e) {
            e.printStackTrace();
            return false;
        }
    }

    // 查询所有日程
    public static List<Schedule> getAllSchedules() {
        List<Schedule> list = new ArrayList<>();
        String sql = "SELECT * FROM schedule ORDER BY start_time ASC";
        try (Connection conn = getConnection();
             PreparedStatement ps = conn.prepareStatement(sql);
             ResultSet rs = ps.executeQuery()) {
            while (rs.next()) {
                Schedule schedule = new Schedule();
                schedule.setId(rs.getInt("id"));
                schedule.setTitle(rs.getString("title"));
                schedule.setContent(rs.getString("content"));
                schedule.setStartTime(rs.getTimestamp("start_time"));
                schedule.setEndTime(rs.getTimestamp("end_time"));
                schedule.setCategory(rs.getString("category"));
                schedule.setIsRemind(rs.getInt("is_remind"));
                schedule.setRemindTime(rs.getTimestamp("remind_time"));
                list.add(schedule);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return list;
    }

    // 根据ID删除日程
    public static boolean deleteScheduleById(Integer id) {
        String sql = "DELETE FROM schedule WHERE id = ?";
        try (Connection conn = getConnection();
             PreparedStatement ps = conn.prepareStatement(sql)) {
            ps.setInt(1, id);
            return ps.executeUpdate() > 0;
        } catch (SQLException e) {
            e.printStackTrace();
            return false;
        }
    }
}

图形界面开发

使用Swing开发主界面,包含日程列表展示区域、添加日程按钮、删除日程按钮等组件。以下是主界面初始化部分的代码示例:

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.util.List;

public class ScheduleFrame extends JFrame {
    private JTable scheduleTable;
    private DefaultTableModel tableModel;

    public ScheduleFrame() {
        initFrame();
        initComponents();
        loadScheduleData();
    }

    // 初始化窗口属性
    private void initFrame() {
        setTitle("个人日程安排工具");
        setSize(800, 600);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BorderLayout());
    }

    // 初始化界面组件
    private void initComponents() {
        // 顶部按钮面板
        JPanel btnPanel = new JPanel();
        JButton addBtn = new JButton("添加日程");
        JButton deleteBtn = new JButton("删除日程");
        btnPanel.add(addBtn);
        btnPanel.add(deleteBtn);
        add(btnPanel, BorderLayout.NORTH);

        // 日程表格
        String[] columnNames = {"ID", "标题", "开始时间", "结束时间", "分类"};
        tableModel = new DefaultTableModel(columnNames, 0) {
            @Override
            public boolean isCellEditable(int row, int column) {
                // 表格内容不可编辑
                return false;
            }
        };
        scheduleTable = new JTable(tableModel);
        JScrollPane scrollPane = new JScrollPane(scheduleTable);
        add(scrollPane, BorderLayout.CENTER);

        // 按钮点击事件
        addBtn.addActionListener(e -> new AddScheduleDialog(this).setVisible(true));
        deleteBtn.addActionListener(e -> {
            int selectedRow = scheduleTable.getSelectedRow();
            if (selectedRow == -1) {
                JOptionPane.showMessageDialog(this, "请选择要删除的日程");
                return;
            }
            int id = (int) tableModel.getValueAt(selectedRow, 0);
            if (DBUtil.deleteScheduleById(id)) {
                JOptionPane.showMessageDialog(this, "删除成功");
                loadScheduleData();
            } else {
                JOptionPane.showMessageDialog(this, "删除失败");
            }
        });
    }

    // 加载日程数据到表格
    public void loadScheduleData() {
        tableModel.setRowCount(0);
        List<Schedule> schedules = DBUtil.getAllSchedules();
        for (Schedule schedule : schedules) {
            Object[] row = {
                schedule.getId(),
                schedule.getTitle(),
                schedule.getStartTime(),
                schedule.getEndTime(),
                schedule.getCategory()
            };
            tableModel.addRow(row);
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new ScheduleFrame().setVisible(true));
    }
}

功能扩展建议

完成基础功能后,可以根据需求扩展更多实用功能:

  • 添加日程搜索功能,支持按标题、分类、时间范围搜索日程
  • 实现提醒功能,使用Timer定时检查需要提醒的日程,弹出提醒窗口
  • 支持日程导出为文本或者Excel文件,方便用户备份和分享
  • 优化界面样式,使用更美观的Swing外观主题,提升使用体验

开发注意事项

开发过程中需要注意几个关键点:

  • SQLite数据库文件路径要正确,避免连接失败
  • 时间格式处理要统一,建议使用Timestamp类型存储时间,避免时区问题
  • Swing组件的操作要在事件调度线程中执行,避免界面卡顿
  • 数据库操作要做好异常处理,避免程序意外崩溃

Java日程安排工具项目实践Swing修改时间:2026-06-29 12:48:44

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。