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; } }