forked from IF-LK-2020/stundenplan
216 lines
8.4 KiB
Java
216 lines
8.4 KiB
Java
import javax.swing.*;
|
|
import java.awt.*;
|
|
import java.text.ParseException;
|
|
import java.util.Arrays;
|
|
|
|
public class Stundenplan implements SelectionListener {
|
|
|
|
/**
|
|
* Main-Methode um das Programm (außerhalb von BlueJ) zu starten.
|
|
*
|
|
* @param args
|
|
*/
|
|
public static void main(String[] args) throws ParseException {
|
|
// 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() throws ParseException {
|
|
// 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];
|
|
}
|
|
dbc.executeStatement("SELECT name 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];
|
|
}
|
|
dbc.executeStatement("SELECT nummer FROM raeume");
|
|
r = dbc.getCurrentQueryResult();
|
|
String[] raeume = new String[r.getRowCount()];
|
|
for (int i = 0; i < r.getRowCount(); i++) {
|
|
raeume[i] = r.getData()[i][0];
|
|
}
|
|
|
|
|
|
gui.addFilter("Klasse", klassen);
|
|
gui.addFilter("Lehrer", teachers);
|
|
gui.addFilter("Raum", raeume);
|
|
|
|
// 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) {
|
|
gui.removeAllLessons();
|
|
if (pList == "Lehrer") {
|
|
// Zuerst alle bisherigen Stunden aus der GUI entfernen
|
|
|
|
|
|
// Neue Daten aus der Datenbank abfragen.
|
|
// Hier gefakte Daten, die Struktur der Datenbank ist nicht vorgegeben.
|
|
//dbc.executeStatement("SELECT 0,'Q2','405',kuerzel,0,0,'Informatik',-16711936 FROM lehrer WHERE kuerzel = '" + pNewValue + "'");
|
|
dbc.executeStatement("SELECT blocknummer, raum, name, wochentag, kuerzel, Fach, stundenbeginn, stundendende FROM Stunden JOIN klassen ON Stunden.klassen_id = klassen.id JOIN unterrichtet ON unterrichtet.Stundenid = Stunden.id JOIN tagesblocks ON blocknr = blocknummer WHERE kuerzel = \""+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++) {
|
|
int wochentag = getWochentag(r,i);
|
|
gui.addLesson(
|
|
|
|
wochentag, // Spalte im Plan (0=Montag, ... ,4=Freitag)
|
|
Integer.parseInt(data[i][0])-1, // Zeile im Plan (0=1. Stunde, ... ,9=10. Stunde)
|
|
data[i][5], // Titel
|
|
"Raum " + data[i][1] + " | " + data[i][6] + " - " + data[i][7], // Untertitel
|
|
data[i][4], // Beschreibungstext
|
|
data[i][3], // Fußzeile
|
|
new Color(colors(data,i)) // Farbe (Objekt der Klasse Color)
|
|
);
|
|
}
|
|
|
|
// GUI-Fenster neu zeichnen, um neue Elemente anzuzeigen.
|
|
|
|
}
|
|
}
|
|
if (pList == "Klasse"){
|
|
dbc.executeStatement("SELECT blocknummer, raum, name, wochentag, kuerzel, Fach, stundenbeginn, stundendende FROM Stunden JOIN klassen ON Stunden.klassen_id = klassen.id JOIN unterrichtet ON unterrichtet.Stundenid = Stunden.id JOIN tagesblocks ON blocknr = blocknummer WHERE name = \""+pNewValue+"\"");
|
|
QueryResult r = dbc.getCurrentQueryResult();
|
|
if (r != null) {
|
|
String[][] data = r.getData();
|
|
|
|
// Neue Stunden in die GUI schreiben
|
|
for (int i = 0; i < data.length; i++) {
|
|
int wochentag = getWochentag(r,i);
|
|
gui.addLesson(
|
|
|
|
wochentag, // Spalte im Plan (0=Montag, ... ,4=Freitag)
|
|
Integer.parseInt(data[i][0])-1, // Zeile im Plan (0=1. Stunde, ... ,9=10. Stunde)
|
|
//Integer.parseInt(t.getData()[i][0])-1,
|
|
data[i][5], // Titel
|
|
"Raum " + data[i][1] + " | " + data[i][6] + " - " + data[i][7], // Untertitel
|
|
data[i][4], // Beschreibungstext
|
|
data[i][2], // Fußzeile
|
|
new Color(colors(data,i)) // Farbe (Objekt der Klasse Color)
|
|
);
|
|
}
|
|
|
|
// GUI-Fenster neu zeichnen, um neue Elemente anzuzeigen.
|
|
|
|
}
|
|
}
|
|
if (pList == "Raum"){
|
|
dbc.executeStatement("SELECT blocknummer, raum, name, wochentag, kuerzel, Fach, stundenbeginn, stundendende FROM Stunden JOIN klassen ON Stunden.klassen_id = klassen.id JOIN unterrichtet ON unterrichtet.Stundenid = Stunden.id JOIN tagesblocks ON blocknr = blocknummer WHERE raum = \""+pNewValue+"\"");
|
|
QueryResult r = dbc.getCurrentQueryResult();
|
|
if (r != null) {
|
|
String[][] data = r.getData();
|
|
|
|
// Neue Stunden in die GUI schreiben
|
|
for (int i = 0; i < data.length; i++) {
|
|
int wochentag = getWochentag(r,i);
|
|
gui.addLesson(
|
|
|
|
wochentag, // Spalte im Plan (0=Montag, ... ,4=Freitag)
|
|
Integer.parseInt(data[i][0])-1, // Zeile im Plan (0=1. Stunde, ... ,9=10. Stunde)
|
|
//Integer.parseInt(t.getData()[i][0])-1,
|
|
data[i][5], // Titel
|
|
"Raum " + data[i][1] + " | " + data[i][6] + " - " + data[i][7], // Untertitel
|
|
data[i][4], // Beschreibungstext
|
|
data[i][2], // Fußzeile
|
|
new Color(colors(data,i)) // Farbe (Objekt der Klasse Color)
|
|
);
|
|
}
|
|
|
|
// GUI-Fenster neu zeichnen, um neue Elemente anzuzeigen.
|
|
|
|
}
|
|
}
|
|
gui.revalidate();
|
|
gui.repaint();
|
|
}
|
|
|
|
private int colors(String[][]data,int row){
|
|
switch(data[row][5]){
|
|
case "Deutsch":
|
|
return 0xf24e5e;
|
|
case "Englisch":
|
|
return 0xf5e77d;
|
|
case "Mathe":
|
|
return 0x3257fa;
|
|
case "Informatik":
|
|
return 0x9ee7ff;
|
|
case "Kunst":
|
|
return 0xc39cff;
|
|
case "Physik":
|
|
return 0x80ffa4;
|
|
case "Sport":
|
|
return 0xd6d6d6;
|
|
}
|
|
return 0x000000;
|
|
}
|
|
|
|
private int getWochentag(QueryResult r,int row){
|
|
String[][] data = r.getData();
|
|
|
|
switch (data[row][3]) {
|
|
case "Mo":
|
|
return 0;
|
|
case "Di":
|
|
return 1;
|
|
case "Mi":
|
|
return 2;
|
|
case "Do":
|
|
return 3;
|
|
case "Fr":
|
|
return 4;
|
|
}
|
|
return 0;
|
|
|
|
|
|
}
|
|
}
|