Holly's Schedule Maker: The Java GUI (Part 2)

September 15, 2023

A year ago I built Holly a Python script that generated her music lesson schedule. It worked, but it was a terminal program. Every time she needed a schedule, she had to ask me to run it. Not exactly sustainable.

I took Java in Spring 2023 at Queens College. Learned about OOP, inheritance, the whole design pattern thing. By September I was gearing up for Holly's 2023-2024 school year and I knew the Python terminal version wasn't going to cut it long-term. She shouldn't have to depend on me being around to generate a schedule.

So I rebuilt it in Java with a Swing GUI!

Same algorithm underneath, same rotation logic, but wrapped in actual classes with a proper structure. MusicalLessonScheduler for the entry point, ScheduleBuilder for the core logic, ScheduleEntry as a data class. I was genuinely proud of that separation. It felt organized for the first time in a project.

The real win was the UX. Instead of a wall of terminal prompts, Holly gets an actual window with labeled fields. Enter the start date, pick day 1 or 2, set the number of weeks, add days off with a "+" button. Hit Start and you're done.

Java Swing GUI input The Java Swing version. Actual text fields and buttons instead of terminal prompts! Holly can run this herself.

The output shows up right in the app as a clean table. Same data as the Python version (dates, periods, groups A through T) but way easier to read. And there's a "Save to CSV" button at the bottom so she can export it straight to a spreadsheet.

Java Swing GUI output The schedule output in the GUI. Same rotation algorithm, but now it looks like software instead of a homework assignment.

I packaged it as ScheduleMaker.jar and sent it to her. She double-clicked it on her laptop and had the entire year's schedule in about 30 seconds. No terminal, no Python installation, no calling me at 9 PM because she needs a new version. That moment felt like I'd actually built something useful, something real, not just a homework assignment a professor would glance at and give a grade.

The Java version is in the same repo as the original Python code. It's way cleaner, but I can still see the rough edges. I was a year into programming at that point and just starting to understand how much I didn't know.

I figured this was the final version. Holly had her JAR, it worked, we were done. I was wrong about that.