time table generator in java

introduction

The Time Table Generator is a Java utility that helps educational institutions automatically create class schedules based on available resources. 

It takes into account teacher availability, subject requirements, and classroom capacities to generate conflict-free timetables. 

The GUI offers a visual layout of schedules and supports export to PDF or print. Admins can manually override generated schedules if needed. 

This tool is extremely useful for school administrators, helping to reduce the time and complexity involved in timetable creation and offering insight into constraint satisfaction algorithms.

steps to create time table generator

  1. Define constraints — classes, teachers, rooms.

  2. Design input GUI for constraints and preferences.

  3. Create Timetable, Class, Teacher classes.

  4. Implement scheduling algorithm to avoid conflicts.

  5. Display generated timetable.

  6. Allow manual editing.

  7. Export timetable to PDF or text.

  8. Test with various input scenarios.

  9. Document usage.

  10. Package project.

code explanation

1.  Combo Box Panel (Bottom)

cbDays, cbPeriod, cbSubject, cbTeacher
  • Allows the user to choose:

    • A weekday

    • A period number (1 to 7)

    • A subject

    • A teacher

2.  JTable for Time Table

model = new DefaultTableModel(data, columnNames);
  • Each row represents a day

  • Each column after the first is a class period

  • Cell format: Subject (Teacher)

3.  Assign Button

btnAssign.addActionListener(e -> assignSubject());
  • Calls assignSubject() to set the value in the table

4.  assignSubject() Method

int dayIndex = cbDays.getSelectedIndex();
int periodIndex = cbPeriod.getSelectedIndex() + 1;
  • Updates the cell at (dayIndex, periodIndex) with selected subject and teacher

source code

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

public class TimeTableGenerator extends JFrame {

    private JTable table;
    private DefaultTableModel model;
    private JComboBox cbDays, cbPeriod, cbSubject, cbTeacher;

    public TimeTableGenerator() {
        setTitle("Time Table Generator");
        setSize(800, 500);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        // Heading
        JLabel heading = new JLabel("Weekly Time Table Generator", JLabel.CENTER);
        heading.setFont(new Font("Segoe UI", Font.BOLD, 22));
        heading.setForeground(new Color(0, 102, 204));
        add(heading, BorderLayout.NORTH);

        // Days and Periods
        String[] days = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday"};
        String[] periods = {"1", "2", "3", "4", "5", "6", "7"};
        String[] subjects = {"Math", "Science", "History", "English", "Computer"};
        String[] teachers = {"Mr. A", "Ms. B", "Mr. C", "Ms. D"};

        // Combo Panel
        JPanel comboPanel = new JPanel(new GridLayout(2, 4, 10, 10));
        comboPanel.setBorder(BorderFactory.createEmptyBorder(10, 20, 10, 20));
        comboPanel.setBackground(new Color(240, 248, 255));

        cbDays = new JComboBox(days);
        cbPeriod = new JComboBox(periods);
        cbSubject = new JComboBox(subjects);
        cbTeacher = new JComboBox(teachers);
        JButton btnAssign = new JButton("Assign");

        comboPanel.add(new JLabel("Select Day:"));
        comboPanel.add(cbDays);
        comboPanel.add(new JLabel("Select Period:"));
        comboPanel.add(cbPeriod);
        comboPanel.add(new JLabel("Select Subject:"));
        comboPanel.add(cbSubject);
        comboPanel.add(new JLabel("Select Teacher:"));
        comboPanel.add(cbTeacher);
        add(comboPanel, BorderLayout.SOUTH);

        // Table
        String[] columnNames = {"Day", "Period 1", "Period 2", "Period 3", "Period 4", "Period 5", "Period 6", "Period 7"};
        String[][] data = {
            {"Monday", "", "", "", "", "", "", ""},
            {"Tuesday", "", "", "", "", "", "", ""},
            {"Wednesday", "", "", "", "", "", "", ""},
            {"Thursday", "", "", "", "", "", "", ""},
            {"Friday", "", "", "", "", "", "", ""}
        };

        model = new DefaultTableModel(data, columnNames);
        table = new JTable(model);
        table.setRowHeight(30);
        JScrollPane scrollPane = new JScrollPane(table);
        add(scrollPane, BorderLayout.CENTER);

        // Button
        btnAssign.addActionListener(e -> assignSubject());

        JPanel btnPanel = new JPanel();
        btnPanel.add(btnAssign);
        add(btnPanel, BorderLayout.NORTH);
    }

    private void assignSubject() {
        int dayIndex = cbDays.getSelectedIndex();
        int periodIndex = cbPeriod.getSelectedIndex() + 1;

        String subject = cbSubject.getSelectedItem().toString();
        String teacher = cbTeacher.getSelectedItem().toString();

        String value = subject + "\n(" + teacher + ")";
        model.setValueAt(subject + " (" + teacher + ")", dayIndex, periodIndex);
    }

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


				
			

output

More java Pojects
Get Huge Discounts