Java Project Ideas

Java Project Ideas For Beginners and Advanced

March 30th, 2026
972
20:00 Minutes

Working on Java projects is one of the best ways to strengthen your programming skills. It includes writing and organizing Java code to build something functional that can perform specific tasks. It might be a simple calculator or large scale enterprise systems with complicated source code and related files organized within a project structure. But the question is where to start from.

Well, all you need is project information and an Integrated Development Environment like Eclipse, IntelliJ IDEA or VS Code. The further process will be easy for you. I have also been working on Java development for the past 3 years and believe me it is really easy to get started. I am going to introduce some of the best Java Projects, their source code, and process to build them in this article.

Why Practice with Java Projects?

It might be the first question among various individuals, who are new to the development field. Java projects are important for the following reasons:

  • Help you apply theoretical knowledge in practical scenarios.
  • Improve problem solving and logical thinking skills.
  • Strengthen your understanding of real world application development.
  • Enhance resume and increase job opportunities.
  • Prepare for technical interviews and professional challenges.

Prerequisites for Java Projects

Before starting any Java project, it is important to consider some prerequisites. Whether you are building simple console applications or complex enterprise systems, the following prerequisites will definitely help you:

1. Basic Programming Knowledge

Before diving into Java projects, you should understand:

  • Operators (Arithmetic, Logical, Relational)
  • Conditional Statements (if-else, switch)
  • Loops (for, while, do-while)
  • Basic Input/Output

If you are new to programming, then I would suggest you start with simple programs like calculators, number guessing games or pattern printing.

2. Core Java Fundamentals

You should be comfortable with:

  • Access Modifiers (public, private, protected)

3. Object Oriented Programming Concepts

Java is built on OOP principles, without strong OOP understanding, managing larger projects becomes difficult. For that you should understand:

  • Polymorphism

4. Exception Handling

Projects often deal with user input, files, databases and networks. You must know:

  • try-catch blocks
  • finally block
  • throw and throws
  • Custom exceptions

As this helps in building robust and error free applications.

5. Collections Framework

There are so many projects that require handling data efficiently. You should know:

  • ArrayList
  • LinkedList
  • HashSet
  • HashMap
  • Iterator

6. File Handling

Real world projects store and read data, such as:

  • File class
  • FileReader and FileWriter
  • BufferedReader and BufferedWriter
  • Serialization

7. Basic Database Knowledge

If you are building backend or enterprise projects:

  • SQL basics (SELECT, INSERT, UPDATE, DELETE)
  • JDBC connectivity
  • PreparedStatement
  • ResultSet

8. Development Tools

You should be comfortable with:

  • JDK installation
  • IDE (IntelliJ IDEA, Eclipse, VS Code)
  • Command line compilation (javac, java)
  • Git basics

9. Build Tools (Optional but Recommended)

The following tools will help you manage dependencies and large projects efficiently:

  • Maven
  • Gradle

10. Basic Understanding of Frameworks (For Advanced Projects)

If you plan to build web or enterprise apps:

  • Hibernate
  • Servlets and JSP

Explore Our Java Tutorial of Deep Understanding in Java Programming

Java Projects Ideas for Beginners and Experienced Professionals

Once you are done with theoretical knowledge, start working on Java Projects. Here are some of the common ones to get started with:

I. Console-Based Java Projects

A. Simple Calculator

A Simple Calculator is a basic Java console application that performs arithmetic operations like:

  • Addition
  • Subtraction
  • Multiplication
  • Division

It takes input from the user, performs the selected operation and displays the result.

Technologies Used:

  • Java
  • Scanner class (java.util.Scanner)
  • Conditional statements

Source Code:
import java.util.Scanner;

public class SimpleCalculator {

    public static void main(String[] args) {
        
        Scanner scanner = new Scanner(System.in);
        
        System.out.println("===== Simple Calculator =====");
        
        // Taking first number input
        System.out.print("Enter first number: ");
        double num1 = scanner.nextDouble();
        
        // Taking second number input
        System.out.print("Enter second number: ");
        double num2 = scanner.nextDouble();
        
        // Choosing operation
        System.out.println("Choose operation:");
        System.out.println("1. Addition (+)");
        System.out.println("2. Subtraction (-)");
        System.out.println("3. Multiplication (*)");
        System.out.println("4. Division (/)");
        System.out.print("Enter your choice (1-4): ");
        
        int choice = scanner.nextInt();
        
        double result;
        
        switch(choice) {
            
            case 1:
                result = num1 + num2;
                System.out.println("Result: " + result);
                break;
                
            case 2:
                result = num1 - num2;
                System.out.println("Result: " + result);
                break;
                
            case 3:
                result = num1 * num2;
                System.out.println("Result: " + result);
                break;
                
            case 4:
                if(num2 != 0) {
                    result = num1 / num2;
                    System.out.println("Result: " + result);
                } else {
                    System.out.println("Error! Division by zero is not allowed.");
                }
                break;
                
            default:
                System.out.println("Invalid choice!");
        }
        
        scanner.close();
    }
}
Source code explanation:

1. Importing Scanner Class

import java.util.Scanner;
  • This allows us to take input from the user.

2. Class Declaration

public class SimpleCalculator
  • Defines the main class of the program.

3. Main Method

public static void main(String[] args)

  • Entry point of the Java program.
  • JVM starts execution from here.

4. Creating Scanner Object

Scanner scanner = new Scanner(System.in);
  • Used to read input from the keyboard.

5. Taking User Input

double num1 = scanner.nextDouble();
double num2 = scanner.nextDouble();

  • nextDouble() reads decimal numbers.
  • We use double to allow decimal calculations

6. Using Switch Statement

switch(choice)
  • Based on user choice (1–4), it executes the respective case.

7. Division Safety Check

if(num2 != 0)

  • Prevents division by zero.
  • Displays error message if divisor is zero.

8. Closing Scanner

scanner.close();

  • Closes the Scanner object.
  • Good practice to avoid memory leaks.

Sample Output:
===== Simple Calculator =====
Enter first number: 10
Enter second number: 5
Choose operation:
1. Addition (+)
2. Subtraction (-)
3. Multiplication (*)
4. Division (/)
Enter your choice (1-4): 1
Result: 15.0

simple calculator java

B. Number Guessing Game

The Number Guessing Game is a beginner-friendly Java console application where:

  • The computer generates a random number
  • The user tries to guess it
  • The program gives hints like:

a. "Too Low"

b. "Too High"

c. "Correct!"

Source Code:
import java.util.Random;
import java.util.Scanner;

public class NumberGuessingGame {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        Random random = new Random();

        int numberToGuess = random.nextInt(100) + 1; // 1 to 100
        int userGuess = 0;
        int attempts = 0;

        System.out.println("===== Number Guessing Game =====");
        System.out.println("Guess a number between 1 and 100");

        while (userGuess != numberToGuess) {

            System.out.print("Enter your guess: ");
            userGuess = scanner.nextInt();
            attempts++;

            if (userGuess < numberToGuess) {
                System.out.println("Too Low! Try again.");
            } 
            else if (userGuess > numberToGuess) {
                System.out.println("Too High! Try again.");
            } 
            else {
                System.out.println(" Congratulations! You guessed the number!");
                System.out.println("Total attempts: " + attempts);
            }
        }

        scanner.close();
    }
}
Source code explanation:

1. Importing Required Classes

import java.util.Random;
import java.util.Scanner;

  • Random: Generates random numbers
  • Scanner: Takes input from user

2. Creating Objects

Scanner scanner = new Scanner(System.in);
Random random = new Random();

  • scanner reads user input
  • random generates a random number

3. Generating Random Numbers

int numberToGuess = random.nextInt(100) + 1;

  • nextInt(100) generates numbers from 0–99
  • +1 makes range 1–100

4. Using While Loo

while (userGuess != numberToGuess)
  • Loop continues until user guesses correctly

5. Counting Attempts

attempts++;
  • Increases attempt count after every guess

6. Hint Logic

if (userGuess < numberToGuess)

  • If guess is smaller:"Too Low"
  • If guess is larger; "Too High"
  • If equal: Win message

Sample Output:
===== Number Guessing Game =====
Guess a number between 1 and 100
Enter your guess: 50
Too High! Try again.
Enter your guess: 75
Too High! Try again.
Enter your guess: 63
Too High! Try again.
Enter your guess: 58
Too High! Try again.
Enter your guess: 25
Too High! Try again.
Enter your guess: 3
Too High! Try again.

number guessing game java

C. To-Do List Application

A To-Do List Application is a simple task management system where users can:

  • Add tasks
  • View tasks
  • Remove tasks
  • Exit the application

Source code:
import java.util.ArrayList;
import java.util.Scanner;

public class ToDoListApp {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        ArrayList tasks = new ArrayList<>();
        int choice;

        do {
            System.out.println("\n===== To-Do List Menu =====");
            System.out.println("1. Add Task");
            System.out.println("2. View Tasks");
            System.out.println("3. Remove Task");
            System.out.println("4. Exit");
            System.out.print("Enter your choice: ");

            choice = scanner.nextInt();
            scanner.nextLine(); // Clear buffer

            switch (choice) {

                case 1:
                    System.out.print("Enter task: ");
                    String task = scanner.nextLine();
                    tasks.add(task);
                    System.out.println("Task added successfully!");
                    break;

                case 2:
                    if (tasks.isEmpty()) {
                        System.out.println("No tasks available.");
                    } else {
                        System.out.println("\nYour Tasks:");
                        for (int i = 0; i < tasks.size(); i++) {
                            System.out.println((i + 1) + ". " + tasks.get(i));
                        }
                    }
                    break;

                case 3:
                    if (tasks.isEmpty()) {
                        System.out.println("No tasks to remove.");
                    } else {
                        System.out.print("Enter task number to remove: ");
                        int taskNumber = scanner.nextInt();

                        if (taskNumber > 0 && taskNumber <= tasks.size()) {
                            tasks.remove(taskNumber - 1);
                            System.out.println("Task removed successfully!");
                        } else {
                            System.out.println("Invalid task number.");
                        }
                    }
                    break;

                case 4:
                    System.out.println("Exiting application...");
                    break;

                default:
                    System.out.println("Invalid choice. Try again.");
            }

        } while (choice != 4);

        scanner.close();
    }
}
Source code explanation:

1. Importing Required Classes

import java.util.ArrayList;
import java.util.Scanner;

  • ArrayList: Stores tasks dynamically
  • Scanner: Takes input from user

2. Creating Data Structure

ArrayList tasks = new ArrayList<>();

  • Stores tasks as strings
  • Automatically resizes when new tasks are added

3. Using do-while Loop

do {
   ...
} while (choice != 4);

  • Keeps program running until user selects Exit
  • Ensures menu appears at least once

4. Adding Task

tasks.add(task);
  • Add new task to the list.

5. Viewing Task

for (int i = 0; i < tasks.size(); i++)

  • Loops through list
  • Displays tasks with numbering

6. Removing Task

tasks.remove(taskNumber - 1);

  • Removes task by index
  • We subtract 1 because list index starts from 0

Sample output:
===== To-Do List Menu =====
1. Add Task
2. View Tasks
3. Remove Task
4. Exit
Enter your choice: 1
Enter task: Complete Java project
Task added successfully!

Enter your choice: 2
Your Tasks:
1. Complete Java project

to do list application java

II. Beginner OOP-Based Projects

A. Student Management System

A Student Management System is a console-based or GUI-based application that helps manage student records:

  • Add new students
  • View all students
  • Search student by ID
  • Update student details
  • Delete student records

How This Project Uses OOP Concepts

Concept Where Used
Encapsulation Private variables in Student class.
Abstraction Business logic hidden inside SMS class.
Object Creation Student objects.
Polymorphism toString() method override.
Project Structure:

  • Student: Model class (stores student data)
  • StudentManagementSystem: Contains business logic
  • Main: Runs the program (menu-driven)

Class 1: Student.java
public class Student {
    private int id;
    private String name;
    private int age;
    private String course;

    // Constructor
    public Student(int id, String name, int age, String course) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.course = course;
    }

    // Getters
    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public String getCourse() {
        return course;
    }

    // Setters
    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setCourse(String course) {
        this.course = course;
    }

    // Display method
    public void displayStudent() {
        System.out.println("ID: " + id + 
                           ", Name: " + name + 
                           ", Age: " + age + 
                           ", Course: " + course);
    }
}
Code Explanation (Student Class)

  • private variables: Encapsulation (data hiding)
  • Constructor: Initializes student object
  • Getters & Setters: Access and modify data safely
  • displayStudent(): Prints student details

Class 2: StudentManagementSystem.java (Main Class)
import java.util.ArrayList;
import java.util.Scanner;

public class StudentManagementSystem {

    private static ArrayList students = new ArrayList<>();
    private static Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) {

        while (true) {
            System.out.println("\n===== Student Management System =====");
            System.out.println("1. Add Student");
            System.out.println("2. View All Students");
            System.out.println("3. Search Student by ID");
            System.out.println("4. Update Student");
            System.out.println("5. Delete Student");
            System.out.println("6. Exit");
            System.out.print("Enter your choice: ");

            int choice = scanner.nextInt();

            switch (choice) {
                case 1:
                    addStudent();
                    break;
                case 2:
                    viewStudents();
                    break;
                case 3:
                    searchStudent();
                    break;
                case 4:
                    updateStudent();
                    break;
                case 5:
                    deleteStudent();
                    break;
                case 6:
                    System.out.println("Exiting... Thank you!");
                    System.exit(0);
                default:
                    System.out.println("Invalid choice! Try again.");
            }
        }
    }

    // Add Student
    private static void addStudent() {
        System.out.print("Enter ID: ");
        int id = scanner.nextInt();
        scanner.nextLine();

        System.out.print("Enter Name: ");
        String name = scanner.nextLine();

        System.out.print("Enter Age: ");
        int age = scanner.nextInt();
        scanner.nextLine();

        System.out.print("Enter Course: ");
        String course = scanner.nextLine();

        students.add(new Student(id, name, age, course));
        System.out.println("Student added successfully!");
    }

    // View All Students
    private static void viewStudents() {
        if (students.isEmpty()) {
            System.out.println("No students found.");
            return;
        }

        for (Student student : students) {
            student.displayStudent();
        }
    }

    // Search Student
    private static void searchStudent() {
        System.out.print("Enter Student ID to search: ");
        int id = scanner.nextInt();

        for (Student student : students) {
            if (student.getId() == id) {
                student.displayStudent();
                return;
            }
        }

        System.out.println("Student not found.");
    }

    // Update Student
    private static void updateStudent() {
        System.out.print("Enter Student ID to update: ");
        int id = scanner.nextInt();
        scanner.nextLine();

        for (Student student : students) {
            if (student.getId() == id) {

                System.out.print("Enter New Name: ");
                student.setName(scanner.nextLine());

                System.out.print("Enter New Age: ");
                student.setAge(scanner.nextInt());
                scanner.nextLine();

                System.out.print("Enter New Course: ");
                student.setCourse(scanner.nextLine());

                System.out.println("Student updated successfully!");
                return;
            }
        }

        System.out.println("Student not found.");
    }

    // Delete Student
    private static void deleteStudent() {
        System.out.print("Enter Student ID to delete: ");
        int id = scanner.nextInt();

        for (Student student : students) {
            if (student.getId() == id) {
                students.remove(student);
                System.out.println("Student deleted successfully!");
                return;
            }
        }

        System.out.println("Student not found.");
    }
}
Code Explanation (Main Class)

  • ArrayList students: Stores all student objects dynamically in memory.
  • Scanner scanner: Takes input from the user.
  • main() method: Runs an infinite loop (while(true)) to display the menu until the user selects Exit.
  • switch(choice): Calls different methods based on user selection.

CRUD Methods (Core Logic)

  • addStudent(): Creates a new Student object and adds it to the list.
  • viewStudents(): Loops through the list and displays all students.
  • searchStudent(): Finds a student by matching ID.
  • updateStudent(): Updates student details using setters.
  • deleteStudent(): Removes student from the list.

How to Run

1. Create two files:

  • Student.java
  • StudentManagementSystem.java

2. Compile:

javac Student.java
javac StudentManagementSystem.java

3. Run:

java StudentManagementSystem

java student management system

B. Library Management System

A Library Management System is a simple Java console application used to:

  • Add books
  • View all books
  • Search book by ID
  • Issue a book
  • Return a book

Project Structure

We will create 2 classes:

  • Book.java: Model class
  • LibraryManagementSystem.java: Main logic class

Book.java
public class Book {
    private int id;
    private String title;
    private String author;
    private boolean isIssued;

    // Constructor
    public Book(int id, String title, String author) {
        this.id = id;
        this.title = title;
        this.author = author;
        this.isIssued = false;
    }

    // Getters
    public int getId() {
        return id;
    }

    public boolean isIssued() {
        return isIssued;
    }

    // Issue Book
    public void issueBook() {
        if (!isIssued) {
            isIssued = true;
            System.out.println("Book issued successfully.");
        } else {
            System.out.println("Book is already issued.");
        }
    }

    // Return Book
    public void returnBook() {
        if (isIssued) {
            isIssued = false;
            System.out.println("Book returned successfully.");
        } else {
            System.out.println("Book was not issued.");
        }
    }

    // Display Book
    public void displayBook() {
        System.out.println("ID: " + id +
                ", Title: " + title +
                ", Author: " + author +
                ", Status: " + (isIssued ? "Issued" : "Available"));
    }
}
Book Class Explanation

  • private variables: Encapsulation (data hiding)
  • boolean isIssued: Tracks book availability
  • issueBook():Changes status to issued
  • returnBook(): Changes status to available
  • displayBook(): Prints book details

LibraryManagementSystem.java
import java.util.ArrayList;
import java.util.Scanner;

public class LibraryManagementSystem {

    private static ArrayList books = new ArrayList<>();
    private static Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) {

        while (true) {
            System.out.println("\n===== Library Management System =====");
            System.out.println("1. Add Book");
            System.out.println("2. View All Books");
            System.out.println("3. Search Book by ID");
            System.out.println("4. Issue Book");
            System.out.println("5. Return Book");
            System.out.println("6. Exit");
            System.out.print("Enter your choice: ");

            int choice = scanner.nextInt();

            switch (choice) {
                case 1:
                    addBook();
                    break;
                case 2:
                    viewBooks();
                    break;
                case 3:
                    searchBook();
                    break;
                case 4:
                    issueBook();
                    break;
                case 5:
                    returnBook();
                    break;
                case 6:
                    System.out.println("Exiting... Thank you!");
                    System.exit(0);
                default:
                    System.out.println("Invalid choice! Try again.");
            }
        }
    }

    // Add Book
    private static void addBook() {
        System.out.print("Enter Book ID: ");
        int id = scanner.nextInt();
        scanner.nextLine();

        System.out.print("Enter Title: ");
        String title = scanner.nextLine();

        System.out.print("Enter Author: ");
        String author = scanner.nextLine();

        books.add(new Book(id, title, author));
        System.out.println("Book added successfully!");
    }

    // View All Books
    private static void viewBooks() {
        if (books.isEmpty()) {
            System.out.println("No books available.");
            return;
        }

        for (Book book : books) {
            book.displayBook();
        }
    }

    // Search Book
    private static void searchBook() {
        System.out.print("Enter Book ID to search: ");
        int id = scanner.nextInt();

        for (Book book : books) {
            if (book.getId() == id) {
                book.displayBook();
                return;
            }
        }

        System.out.println("Book not found.");
    }

    // Issue Book
    private static void issueBook() {
        System.out.print("Enter Book ID to issue: ");
        int id = scanner.nextInt();

        for (Book book : books) {
            if (book.getId() == id) {
                book.issueBook();
                return;
            }
        }

        System.out.println("Book not found.");
    }

    // Return Book
    private static void returnBook() {
        System.out.print("Enter Book ID to return: ");
        int id = scanner.nextInt();

        for (Book book : books) {
            if (book.getId() == id) {
                book.returnBook();
                return;
            }
        }

        System.out.println("Book not found.");
    }
}
Sample Output:
===== Library Management System =====
1. Add Book
2. View All Books
3. Search Book by ID
4. Issue Book
5. Return Book
6. Exit
Enter your choice: 1

Enter Book ID: 101
Enter Title: Java Programming
Enter Author: James Gosling
Book added successfully!

Enter your choice: 2
ID: 101, Title: Java Programming, Author: James Gosling, Status: Available

Enter your choice: 4
Enter Book ID to issue: 101
Book issued successfully.

Enter your choice: 2
ID: 101, Title: Java Programming, Author: James Gosling, Status: Issued

III. GUI-Based Java Projects (Using Swing/JavaFX)

A. Simple Login Form

A Simple Login Form is a basic desktop application that allows a user to enter a username and password, then validates them using predefined credentials.

Source Code (Using Swing)
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class LoginForm {

    public static void main(String[] args) {

        // Create Frame
        JFrame frame = new JFrame("Simple Login Form");
        frame.setSize(350, 200);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new GridLayout(3, 2));

        // Create Components
        JLabel userLabel = new JLabel("Username:");
        JTextField userText = new JTextField();

        JLabel passLabel = new JLabel("Password:");
        JPasswordField passText = new JPasswordField();

        JButton loginButton = new JButton("Login");

        // Add Components to Frame
        frame.add(userLabel);
        frame.add(userText);
        frame.add(passLabel);
        frame.add(passText);
        frame.add(new JLabel()); // empty space
        frame.add(loginButton);

        // Login Button Action
        loginButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {

                String username = userText.getText();
                String password = new String(passText.getPassword());

                if (username.equals("admin") && password.equals("1234")) {
                    JOptionPane.showMessageDialog(frame, "Login Successful!");
                } else {
                    JOptionPane.showMessageDialog(frame, "Invalid Username or Password!");
                }
            }
        });

        frame.setVisible(true);
    }
}
Code Explanation:

1. Import Packages

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

  • javax.swing: GUI components
  • java.awt: Layout management
  • java.awt.event: Event handling

2. Create JFrame

JFrame frame = new JFrame("Simple Login Form");

Main window of the application.

  • setSize(): sets window size.
  • setLayout(): uses GridLayout (3 rows, 2 columns).

3. Create GUI Components

JLabel
JTextField
JPasswordField
JButton

  • JLabel: Displays text
  • JTextField: Input username
  • JPasswordField: Input password securely
  • JButton: Trigger login action

4. Add Components to Frame

frame.add(component);

5. Event Handling (Most Important Part)

  • addActionListener() is used to handle button clicks.
  • When the Login button is pressed, actionPerformed() runs.
  • It gets the username (getText()) and password (getPassword()).
  • Checks if they match predefined values.
  • Shows success or error message using JOptionPane.

Sample Output

Before Login

Username: [__________]
Password: [__________]
            [Login]

If Correct:

Login Successful!

If Wrong:

Invalid Username or Password!

simple login form java

B. Basic Calculator with GUI

A Basic Calculator with GUI is a simple desktop application built using Java Swing or Java AWT that performs arithmetic operations like:

  • Addition
  • Subtraction
  • Multiplication
  • Division

Technologies Used

  • Java
  • Swing (javax.swing)
  • AWT (java.awt)
  • Event Handling (ActionListener)

Project Structure
BasicCalculator.java
Code (GUI Calculator)
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class BasicCalculator extends JFrame implements ActionListener {

    JTextField textField;
    JButton[] numberButtons = new JButton[10];
    JButton addButton, subButton, mulButton, divButton, eqButton, clrButton;
    JPanel panel;

    double num1 = 0, num2 = 0, result = 0;
    char operator;

    BasicCalculator() {

        setTitle("Basic Calculator");
        setSize(400, 500);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(null);

        textField = new JTextField();
        textField.setBounds(50, 25, 300, 50);
        textField.setEditable(false);
        textField.setFont(new Font("Arial", Font.BOLD, 20));
        add(textField);

        addButton = new JButton("+");
        subButton = new JButton("-");
        mulButton = new JButton("*");
        divButton = new JButton("/");
        eqButton = new JButton("=");
        clrButton = new JButton("C");

        addButton.setBounds(50, 100, 60, 50);
        subButton.setBounds(120, 100, 60, 50);
        mulButton.setBounds(190, 100, 60, 50);
        divButton.setBounds(260, 100, 60, 50);
        clrButton.setBounds(330, 100, 60, 50);

        add(addButton); add(subButton); add(mulButton);
        add(divButton); add(clrButton);

        addButton.addActionListener(this);
        subButton.addActionListener(this);
        mulButton.addActionListener(this);
        divButton.addActionListener(this);
        clrButton.addActionListener(this);

        panel = new JPanel();
        panel.setBounds(50, 170, 300, 200);
        panel.setLayout(new GridLayout(4,3,10,10));

        for(int i=0; i<10; i++){
            numberButtons[i] = new JButton(String.valueOf(i));
            numberButtons[i].addActionListener(this);
        }

        panel.add(numberButtons[1]);
        panel.add(numberButtons[2]);
        panel.add(numberButtons[3]);
        panel.add(numberButtons[4]);
        panel.add(numberButtons[5]);
        panel.add(numberButtons[6]);
        panel.add(numberButtons[7]);
        panel.add(numberButtons[8]);
        panel.add(numberButtons[9]);
        panel.add(numberButtons[0]);
        panel.add(eqButton);

        eqButton.addActionListener(this);

        add(panel);
        setVisible(true);
    }

    public void actionPerformed(ActionEvent e) {

        for(int i=0; i<10; i++){
            if(e.getSource() == numberButtons[i]){
                textField.setText(textField.getText() + i);
            }
        }

        if(e.getSource() == addButton){
            num1 = Double.parseDouble(textField.getText());
            operator = '+';
            textField.setText("");
        }

        if(e.getSource() == subButton){
            num1 = Double.parseDouble(textField.getText());
            operator = '-';
            textField.setText("");
        }

        if(e.getSource() == mulButton){
            num1 = Double.parseDouble(textField.getText());
            operator = '*';
            textField.setText("");
        }

        if(e.getSource() == divButton){
            num1 = Double.parseDouble(textField.getText());
            operator = '/';
            textField.setText("");
        }

        if(e.getSource() == eqButton){
            num2 = Double.parseDouble(textField.getText());

            switch(operator){
                case '+': result = num1 + num2; break;
                case '-': result = num1 - num2; break;
                case '*': result = num1 * num2; break;
                case '/': result = num1 / num2; break;
            }

            textField.setText(String.valueOf(result));
        }

        if(e.getSource() == clrButton){
            textField.setText("");
        }
    }

    public static void main(String[] args) {
        new BasicCalculator();
    }
}
Code Explanation

1. JFrame

Creates the main window.

2. JTextField

Acts as the calculator display screen.

3. JButton

Used for numbers and operators.

4. ActionListener

Handles button click events.

5. actionPerformed()

Detects which button was clicked

Performs calculation

Displays result

How to Run

1. Save file as BasicCalculator.java

2. Compile:

javac BasicCalculator.java

3. Run:

java BasicCalculator
Sample output:

User Actions:

Click 5  
Click *  
Click 5  
Click =
Display Output:
25.0

java basic calculator

IV. Mini Projects Using File Handling

A. Contact Management System

A Contact Management System is a simple Java project that allows users to:

  • Add new contacts
  • View all contacts
  • Update contact details
  • Delete contacts
  • Search contacts

Project Structure

This project usually contains:

  • Contact class: Stores contact details
  • Main class: Contains menu and logic
  • ArrayList: Stores multiple contacts

Contact Class
public class Contact {
    private String name;
    private String phone;
    private String email;

    public Contact(String name, String phone, String email) {
        this.name = name;
        this.phone = phone;
        this.email = email;
    }

    public String getName() {
        return name;
    }

    public String getPhone() {
        return phone;
    }

    public String getEmail() {
        return email;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "Name: " + name + 
               "\nPhone: " + phone + 
               "\nEmail: " + email;
    }
}
Main Class
import java.util.ArrayList;
import java.util.Scanner;

public class ContactManagementSystem {

    static ArrayList contacts = new ArrayList<>();
    static Scanner sc = new Scanner(System.in);

    public static void main(String[] args) {

        int choice;

        do {
            System.out.println("\n===== Contact Management System =====");
            System.out.println("1. Add Contact");
            System.out.println("2. View Contacts");
            System.out.println("3. Search Contact");
            System.out.println("4. Delete Contact");
            System.out.println("5. Exit");
            System.out.print("Enter your choice: ");
            choice = sc.nextInt();
            sc.nextLine(); 

            switch (choice) {
                case 1:
                    addContact();
                    break;
                case 2:
                    viewContacts();
                    break;
                case 3:
                    searchContact();
                    break;
                case 4:
                    deleteContact();
                    break;
                case 5:
                    System.out.println("Exiting program...");
                    break;
                default:
                    System.out.println("Invalid choice!");
            }

        } while (choice != 5);
    }

    static void addContact() {
        System.out.print("Enter Name: ");
        String name = sc.nextLine();

        System.out.print("Enter Phone: ");
        String phone = sc.nextLine();

        System.out.print("Enter Email: ");
        String email = sc.nextLine();

        contacts.add(new Contact(name, phone, email));
        System.out.println("Contact Added Successfully!");
    }

    static void viewContacts() {
        if (contacts.isEmpty()) {
            System.out.println("No contacts available.");
            return;
        }

        for (Contact c : contacts) {
            System.out.println("--------------------");
            System.out.println(c);
        }
    }

    static void searchContact() {
        System.out.print("Enter name to search: ");
        String name = sc.nextLine();

        for (Contact c : contacts) {
            if (c.getName().equalsIgnoreCase(name)) {
                System.out.println("Contact Found:");
                System.out.println(c);
                return;
            }
        }
        System.out.println("Contact not found.");
    }

    static void deleteContact() {
        System.out.print("Enter name to delete: ");
        String name = sc.nextLine();

        for (Contact c : contacts) {
            if (c.getName().equalsIgnoreCase(name)) {
                contacts.remove(c);
                System.out.println("Contact deleted successfully.");
                return;
            }
        }
        System.out.println("Contact not found.");
    }
}
Sample Output:
===== Contact Management System =====
1. Add Contact
2. View Contacts
3. Search Contact
4. Delete Contact
5. Exit
Enter your choice: 1

Enter Name: Nehal
Enter Phone: 9876543210
Enter Email: nehal@gmail.com
Contact Added Successfully!

contact management system java

B. Expense Tracker

An Expense Tracker is a Java project that helps users:

  • Add daily expenses
  • View all expenses
  • Categorize expenses (Food, Travel, Rent, etc.)
  • Calculate total spending
  • Track monthly expenses

Basic Structure

1. Expense Class Stores:

  • Title
  • Amount
  • Category
  • Date

2. Main Class Handles:

  • Menu
  • Add expense
  • View expenses
  • Calculate total

Expense Class
public class Expense {
    private String title;
    private double amount;
    private String category;
    private String date;

    public Expense(String title, double amount, String category, String date) {
        this.title = title;
        this.amount = amount;
        this.category = category;
        this.date = date;
    }

    public double getAmount() {
        return amount;
    }

    @Override
    public String toString() {
        return "Title: " + title +
               "\nAmount: ₹" + amount +
               "\nCategory: " + category +
               "\nDate: " + date;
    }
}
Main Class
import java.util.ArrayList;
import java.util.Scanner;

public class ExpenseTracker {

    static ArrayList expenses = new ArrayList<>();
    static Scanner sc = new Scanner(System.in);

    public static void main(String[] args) {

        int choice;

        do {
            System.out.println("\n===== Expense Tracker =====");
            System.out.println("1. Add Expense");
            System.out.println("2. View Expenses");
            System.out.println("3. View Total Expense");
            System.out.println("4. Exit");
            System.out.print("Enter choice: ");
            choice = sc.nextInt();
            sc.nextLine();

            switch (choice) {
                case 1:
                    addExpense();
                    break;
                case 2:
                    viewExpenses();
                    break;
                case 3:
                    viewTotal();
                    break;
                case 4:
                    System.out.println("Exiting...");
                    break;
                default:
                    System.out.println("Invalid choice!");
            }

        } while (choice != 4);
    }

    static void addExpense() {
        System.out.print("Enter Title: ");
        String title = sc.nextLine();

        System.out.print("Enter Amount: ");
        double amount = sc.nextDouble();
        sc.nextLine();

        System.out.print("Enter Category: ");
        String category = sc.nextLine();

        System.out.print("Enter Date: ");
        String date = sc.nextLine();

        expenses.add(new Expense(title, amount, category, date));
        System.out.println("Expense Added Successfully!");
    }

    static void viewExpenses() {
        if (expenses.isEmpty()) {
            System.out.println("No expenses recorded.");
            return;
        }

        for (Expense e : expenses) {
            System.out.println("--------------------");
            System.out.println(e);
        }
    }

    static void viewTotal() {
        double total = 0;

        for (Expense e : expenses) {
            total += e.getAmount();
        }

        System.out.println("Total Expense: ₹" + total);
    }
}
Code Explanation

  • Expense Class: Stores expense details (title, amount, category, date).
  • Encapsulation: Variables are private and accessed using methods.
  • Constructor: Initializes expense data when object is created.
  • ArrayList: Stores multiple Expense objects dynamically.
  • addExpense(): Takes user input and adds a new expense (Create operation).
  • viewExpenses(): Displays all stored expenses using a loop (Read operation).
  • viewTotal(): Calculates and displays total expense by summing all amounts.

Sample Output:
===== Expense Tracker =====
1. Add Expense
2. View Expenses
3. View Total Expense
4. Exit
Enter choice: 1

Enter Title: Lunch
Enter Amount: 200
Enter Category: Food
Enter Date: 21-02-2026
Expense Added Successfully!

expense tracker java

Tips Before Starting Projects

1. Strengthen Your Fundamentals: Make sure you clearly understand Java and OOP concepts like classes, objects, inheritance and encapsulation. Strong basics make project development much easier.

2. Start Small and Scale Gradually: Begin with simple console based applications before moving to larger or enterprise level projects. This helps you build confidence and practical experience.

3. Plan Before You Code: Define your project goal, features, tools and structure before writing code. Proper planning reduces confusion and saves time.

4. Write Clean and Organized Code: Follow Java naming conventions, keep methods small and structure your project properly. Clean code improves readability and maintenance.

5. Test and Debug Regularly: Test your project step by step instead of waiting until the end. Early testing helps identify and fix errors quickly.

Conclusion

In conclusion, Java projects are an excellent way to gain real-world experience with your theoretical knowledge. They will also help you develop and improve your understanding of core Java, OOP concepts, Database Management and Frameworks as you create anything from simple console applications to enterprise level systems.

FAQs

1) How do I choose the right Java project for my skill level?

Start with simple console based projects if you are a beginner, move to GUI and database based projects at the intermediate level and for advanced learners you should focus on full-stack web applications and REST APIs.

2) Are Java projects important for job interviews?

Yes, Java projects are extremely important for job interviews as recruiters often prefer candidates who can showcase working projects on GitHub.

3) How long does it take to complete a Java project?

A basic project may take a few days, while intermediate projects can take 1 to2 weeks and advanced enterprise level projects take several weeks or months to complete.

4) Which technologies are commonly used in Java projects?

Java projects may use:

  • Core Java
  • JDBC
  • Servlets and JSP
  • Spring Framework
  • Spring Boot
  • Hibernate
  • Maven or Gradle

Explore Our Trending Articles-

Course Schedule

Course NameBatch TypeDetails
Java TrainingEvery WeekdayView Details
Java TrainingEvery WeekendView Details
About the Author
Author Nehal Sharma
About the Author

Nehal Sharma is a skilled content writer with expertise in Java, mobile development, and data analytics. She transforms complex data into actionable insights and has experience in business intelligence, data science, and Salesforce. She also simplifies technical concepts into clear, engaging content for learners and professionals.

Drop Us a Query
Fields marked * are mandatory
×

Your Shopping Cart


Your shopping cart is empty.