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
-
Define constraints — classes, teachers, rooms.
-
Design input GUI for constraints and preferences.
-
Create Timetable, Class, Teacher classes.
-
Implement scheduling algorithm to avoid conflicts.
-
Display generated timetable.
-
Allow manual editing.
-
Export timetable to PDF or text.
-
Test with various input scenarios.
-
Document usage.
-
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

