A colorful desktop application for cataloging and managing marine life data, built with Java Swing and SQLite.
Fishipedia (Sea Creature Encyclopedia) is an interactive database application that allows users to store, search, and manage information about various sea creatures with a vibrant, ocean-themed interface. Developed as part of the Foundations of Project Design course at the University of San Francisco (Spring 2025).
- Custom Ocean-Themed GUI: Vibrant color scheme with custom styling and intuitive layout
- Real-Time Search: Instantly search creatures by name, scientific name, or family as you type
- Advanced Sorting: Sort by name (A-Z/Z-A), scientific name, family, or conservation status (high-low/low-high)
- CRUD Operations: Add, view, and delete sea creatures with form validation
- Multiple Selection: Select and delete multiple creatures at once
- Conservation Status Tracking: Track IUCN conservation status from Extinct to Least Concern
- Custom Linked List Implementation: Built using a custom
MyLinkedListdata structure - Data Persistence: SQLite database ensures all data is saved between sessions with explicit save functionality
- Input Validation: Robust error handling prevents incomplete entries
- Custom Cell Renderers: Beautiful custom rendering for list items, dropdowns, and separators
- Java - Core application logic and OOP principles
- Java Swing - GUI framework with custom components and renderers
- SQLite - Local database for data persistence via JDBC
- JDBC - Database connectivity
- Custom Data Structures - Implemented custom
MyLinkedListfor creature management - GroupLayout & GridBagLayout - Advanced layout managers for responsive UI
- Java Development Kit (JDK) 8 or higher
- SQLite (included with application)
- Clone the repository
git clone https://github.com/yourusername/sea-creature-encyclopedia.git- Navigate to the project directory
cd sea-creature-encyclopedia- Compile and run the application
javac Main.java
java Main- Adding a Creature: Click "add sea creature!" and fill in:
- Common name
- Scientific name
- Family
- Conservation status (dropdown with categories from Extinct to Least Concern)
- Searching: Type in the search bar to filter creatures in real-time by name, scientific name, or family
- Sorting: Select a sort option from the dropdown and click "sort" to organize your list
- Deleting: Select one or multiple creatures from the list and click "delete" (includes confirmation dialog)
- Clearing: Click "clear" to reset search and deselect all creatures
- Saving: Click "save" to persist all changes to the database
The application uses a SQLite database (marine.db) located in src/main/resources/ with the following structure:
CREATE TABLE SeaCreature (
id INTEGER PRIMARY KEY AUTOINCREMENT,
Name TEXT NOT NULL,
SciName TEXT NOT NULL,
Family TEXT NOT NULL,
Status TEXT NOT NULL
);Conservation status values include: Extinct, Critically Endangered, Endangered, Vulnerable, Near Threatened, Least Concern, and Data Deficient.
sea-creatures/
├── src/
│ └── main/
│ ├── java/
│ │ └── edu/usfca/cs112/project2/sea_creatures/
│ │ ├── App.java # Main entry point
│ │ ├── GUI.java # Main application window and UI components
│ │ ├── SeaCreature.java # Sea creature data model
│ │ ├── SeaCreatureList.java # Database operations and list management
│ │ ├── MyLinkedList.java # Custom linked list implementation
│ │ ├── MyLinkedListIterator.java # Iterator for custom linked list
│ │ ├── Node.java # Node class for linked list
│ │ ├── ConservationStatus.java # Enum for IUCN status categories
│ │ ├── NameComparatorZA.java # Sort by name Z-A
│ │ ├── SciComparatorAZ.java # Sort by scientific name A-Z
│ │ ├── SciComparatorZA.java # Sort by scientific name Z-A
│ │ ├── FamilyComparatorAZ.java # Sort by family A-Z
│ │ ├── FamilyComparatorZA.java # Sort by family Z-A
│ │ ├── HighPriorityComparator.java # Sort by status high-low
│ │ └── LowPriorityComparator.java # Sort by status low-high
│ └── resources/
│ └── marine.db # SQLite database file
└── README.md
- Custom UI Components: Implemented custom
ListCellRendererclasses for sea creatures, sort options, and status dropdowns - Event-Driven Architecture: Utilized ActionListeners, KeyListeners, and ListSelectionListeners for responsive UI
- Data Structure Implementation: Built and utilized a custom
MyLinkedListclass with sorting capabilities - MVC Pattern Elements: Separated data model (SeaCreature), view (GUI), and data management (SeaCreatureList)
- Error Handling: Comprehensive exception handling with user-friendly error messages
- Custom Styling: Cohesive ocean-themed color scheme with custom borders, fonts, and visual elements
Main interface showing the creature list, search bar, sorting options, and ocean-themed UI
Input form for adding new sea creatures with validation
- Image upload capability for each creature
- Export data to CSV/JSON
- Advanced filtering by multiple attributes
- Integration with marine biology APIs for additional data
This is a class project, but feedback and suggestions are welcome!
This project was created for educational purposes as part of coursework at the University of San Francisco.
Valarie Trinh
- LinkedIn: www.linkedin.com/in/valarietrinh
- GitHub: @vrinhae https://github.com/vrinhae
- University of San Francisco - Foundations of Project Design Course
Built with ☕ and 🌊 at USF