Voting Machine Simulator in java

introduction

TheVoting Machine Simulator in java is a Java-based project that mimics the operation of a real electronic voting machine (EVM). Voters can select candidates from a displayed list, and the system ensures one vote per voter through a unique ID check. 

Once the voting is complete, the admin can unlock the result screen to display vote counts per candidate. This project demonstrates how secure, transparent, and tamper-proof digital voting systems can work. 

It’s suitable for civic education, mock elections in schools/colleges, and technical demonstrations on event-driven programming and data validation in Java.

steps to create voting machine stimulator in java

  • Define voting rules — one vote per voter.

  • Design voter authentication GUI.

  • Create Candidate and Voter classes.

  • Implement voting logic with vote counting.

  • Store votes securely.

  • Prevent duplicate voting by voter ID.

  • Add admin interface for result display.

  • Test voting, counting, and result display.

  • Add error handling.

  • Document code and user instructions.

code explanation

1. Window Setup

setTitle("Voting Machine Simulator");
setSize(600, 400);

Creates a window titled “Voting Machine Simulator”.

2. Top Heading

JLabel heading = new JLabel("Electronic Voting Machine");

Adds a nice title label at the top with background color and font styling.

3. Vote Buttons

votePanel.add(createVoteButton("Candidate A", blue));
  • 3 buttons are created: “Vote Candidate A”, “Vote Candidate B”, “Vote Candidate C”.

  • Each button has a color and a label.

  • When a button is clicked:

    • It increases that candidate’s vote count.

    • The results are updated immediately.

4. Results Display

lblVotesA = createResultLabel("Votes A: 0");
  • At the bottom, it shows current vote count for each candidate.

  • Initially all are 0 votes.

5. Clicking the Button

btn.addActionListener(e -> {
   if (name contains "A") votesA++;
   ...
   updateResults();
});

When you click on any vote button:

  • It checks which candidate the button is for.

  • Adds 1 to their vote count.

  • Then updates the display.

6. Running the App

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

This runs the GUI on screen.

Output Preview:

  • Top: “Electronic Voting Machine”

  • Center: 3 colored buttons for Candidate A, B, and C

  • Bottom: Vote count for each candidate, like:

     
    Votes A: 3   Votes B: 2   Votes C: 1

source code

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

public class VotingMachineSimulator extends JFrame {
    private int votesA = 0, votesB = 0, votesC = 0;

    private JLabel lblVotesA, lblVotesB, lblVotesC;

    public VotingMachineSimulator() {
        setTitle("🗳️ Voting Machine Simulator");
        setSize(600, 400);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLayout(new BorderLayout());

        JLabel heading = new JLabel("🗳️ Electronic Voting Machine", JLabel.CENTER);
        heading.setFont(new Font("Verdana", Font.BOLD, 26));
        heading.setOpaque(true);
        heading.setBackground(new Color(52, 73, 94));
        heading.setForeground(Color.white);
        heading.setBorder(BorderFactory.createEmptyBorder(20, 0, 20, 0));
        add(heading, BorderLayout.NORTH);

        JPanel votePanel = new JPanel(new GridLayout(1, 3, 20, 20));
        votePanel.setBorder(BorderFactory.createEmptyBorder(30, 30, 30, 30));
        votePanel.setBackground(new Color(236, 240, 241));

        votePanel.add(createVoteButton("Candidate A", new Color(41, 128, 185)));
        votePanel.add(createVoteButton("Candidate B", new Color(39, 174, 96)));
        votePanel.add(createVoteButton("Candidate C", new Color(192, 57, 43)));

        add(votePanel, BorderLayout.CENTER);

        JPanel resultPanel = new JPanel(new GridLayout(1, 3, 20, 20));
        resultPanel.setBorder(BorderFactory.createEmptyBorder(10, 30, 20, 30));
        resultPanel.setBackground(new Color(236, 240, 241));

        lblVotesA = createResultLabel("Votes A: 0");
        lblVotesB = createResultLabel("Votes B: 0");
        lblVotesC = createResultLabel("Votes C: 0");

        resultPanel.add(lblVotesA);
        resultPanel.add(lblVotesB);
        resultPanel.add(lblVotesC);

        add(resultPanel, BorderLayout.SOUTH);
    }

    private JPanel createVoteButton(String name, Color color) {
        JButton btn = new JButton("Vote " + name);
        btn.setFont(new Font("Arial", Font.BOLD, 16));
        btn.setBackground(color);
        btn.setForeground(Color.white);
        btn.setFocusPainted(false);

        btn.addActionListener(e -> {
            if (name.contains("A")) votesA++;
            else if (name.contains("B")) votesB++;
            else if (name.contains("C")) votesC++;
            updateResults();
        });

        JPanel panel = new JPanel(new BorderLayout());
        JLabel label = new JLabel(name, JLabel.CENTER);
        label.setFont(new Font("Arial", Font.BOLD, 18));
        label.setBorder(BorderFactory.createEmptyBorder(10, 0, 10, 0));

        panel.setBackground(Color.white);
        panel.setBorder(BorderFactory.createLineBorder(color, 3));
        panel.add(label, BorderLayout.NORTH);
        panel.add(btn, BorderLayout.CENTER);

        return panel;
    }

    private JLabel createResultLabel(String text) {
        JLabel label = new JLabel(text, JLabel.CENTER);
        label.setFont(new Font("Arial", Font.BOLD, 16));
        label.setOpaque(true);
        label.setBackground(Color.white);
        label.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY, 2));
        return label;
    }

    private void updateResults() {
        lblVotesA.setText("Votes A: " + votesA);
        lblVotesB.setText("Votes B: " + votesB);
        lblVotesC.setText("Votes C: " + votesC);
    }

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

				
			

output

More java Pojects
Get Huge Discounts