stundenplan/Stundenplan/src/Stundenplan.java

154 lines
4.6 KiB
Java

import javax.swing.*;
import java.awt.*;
public class Stundenplan implements SelectionListener {
/**
* Main-Methode um das Programm (außerhalb von BlueJ) zu starten.
*
* @param args
*/
public static void main(String[] args) {
// Setzen des "Look & Feel" des Programms
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
}
// Programm starten
new Stundenplan();
}
// Instanz des GUI des Programms
private StundenplanGUI gui;
// Instanz der Datenbankverbindung
private DatabaseConnector dbc;
/**
* Konstruktor des Hauptprogramms
*/
public Stundenplan() {
// Erstellen des GUIs
gui = new StundenplanGUI();
// Aufbau der Datenbankverbindung
dbc = new DatabaseConnector("", 0, "stundenplan.db", "", "");
QueryResult r;
// Lehrer abfragen und ein Auswahlfeld erstellen, dass in der
// GUI angezeigt wird, um den angezeigten Stundenplan anzupassen
dbc.executeStatement("SELECT kuerzel FROM lehrer");
r = dbc.getCurrentQueryResult();
String[] teachers = new String[r.getRowCount()];
for (int i = 0; i < r.getRowCount(); i++) {
teachers[i] = r.getData()[i][0];
}
gui.addFilter("Lehrer", teachers);
// Das gleiche für die klassen
dbc.executeStatement("SELECT bezeichner FROM klassen");
r = dbc.getCurrentQueryResult();
String[] klassen = new String[r.getRowCount()];
for (int i = 0; i < r.getRowCount(); i++) {
klassen[i] = r.getData()[i][0];
}
gui.addFilter("Klassen", klassen);
// GUI anzeigen und Verhalten bei Interaktion festlegen
gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
gui.addSelectionListener(this); // GUI ruft Methode selectionChanged auf, wenn sich eine Auswahlbox ändert.
gui.setLocationRelativeTo(null);
gui.setVisible(true);
}
/**
* Methode um auf Änderungen in der GUi zu reagieren. Sobald der nutzer die
* Auswahl ändert, wird diese Methode aufgerufen. Der erste Parameter ist der
* Name der Auswahlliste, die sich geändert hat (erster Parameter von
* {@link StundenplanGUI#addFilter(String, String[])} oben) und der zweite ist
* der neue Wert der Auswahl.
*
* @param pList Name der Auswahlliste
* @param pNewValue Neuer Wert der Auswahl
*/
@Override
public void selectionChanged(String pList, String pNewValue) {
if (pList == "Lehrer") {
// Zuerst alle bisherigen Stunden aus der GUI entfernen
gui.removeAllLessons();
// Neue Daten aus der Datenbank abfragen.
dbc.executeStatement(
"SELECT Fach,Raum,Klassen_bezeichner,Tag,Stunde FROM Unterrichtsstunden LEFT OUTER JOIN sind_in_Unterrichtsstunden "
+ "WHERE sind_in_Unterrichtsstunden.Stunden_ID = Unterrichtsstunden.StundenId AND Unterrichtsstunden.Lehrer_Kürzel LIKE \""
+ pNewValue + "\"");
QueryResult r = dbc.getCurrentQueryResult();
// Falls es ein Ergebnis gibt ...
if (r != null) {
String[][] data = r.getData();
// Neue Stunden in die GUI schreiben
for (int i = 0; i < data.length; i++) {
gui.addLesson(bestimmeSpalte(data[i][3]), // Spalte im Plan (0=Montag, ... ,4=Freitag)
Integer.parseInt(data[i][4]) - 1, // Zeile im Plan (0=1. Stunde, ... ,9=10. Stunde)
data[i][0], // Titel
"Raum " + data[i][1], // Untertitel
data[i][2], // Beschreibungstext
pNewValue, // Fußzeile
new Color(-16711936) // Farbe (Objekt der Klasse Color)
);
}
// GUI-Fenster neu zeichnen, um neue Elemente anzuzeigen.
gui.revalidate();
gui.repaint();
}
} else if (pList == "Klassen") {
// Zuerst alle bisherigen Stunden aus der GUI entfernen
gui.removeAllLessons();
// Neue Daten aus der Datenbank abfragen.
dbc.executeStatement("");
QueryResult r = dbc.getCurrentQueryResult();
// Falls es ein Ergebnis gibt ...
if (r != null) {
String[][] data = r.getData();
// Neue Stunden in die GUI schreiben
for (int i = 0; i < data.length; i++) {
gui.addLesson(bestimmeSpalte(data[i][3]), // Spalte im Plan (0=Montag, ... ,4=Freitag)
Integer.parseInt(data[i][4]) - 1, // Zeile im Plan (0=1. Stunde, ... ,9=10. Stunde)
data[i][0], // Titel
"Raum " + data[i][1], // Untertitel
data[i][2], // Beschreibungstext
pNewValue, // Fußzeile
new Color(-16711936) // Farbe (Objekt der Klasse Color)
);
}
// GUI-Fenster neu zeichnen, um neue Elemente anzuzeigen.
gui.revalidate();
gui.repaint();
}
}
}
public int bestimmeSpalte(String pTag) {
switch (pTag) {
case "Montag":
return 0;
case "Dienstag":
return 1;
case "Mittwoch":
return 2;
case "Donnerstag":
return 3;
case "Freitag":
return 4;
default:
return 5;
}
}
}