@Override
    public Component getTableCellRendererComponent(JTable table,
            Object value, boolean isSelected, boolean hasFocus, int row,
            int column) {

        /**
         * ScheduleElementViewWrapper verarbeiten
         */
        if (value instanceof ScheduleElementViewWrapper) {
            ScheduleElementViewWrapper scheduleElement = (ScheduleElementViewWrapper) value;

            StudyProgram studyProgram = null;
            if (scheduleElement.getScheduleView() instanceof ScheduleViewStudyProgram) {
                studyProgram = ((ScheduleViewStudyProgram) scheduleElement.getScheduleView()).getStudyProgramm();
            }

            if (scheduleElement.isEmpty()) {
                setText("");
                setToolTipText("Nicht belegt.");
                setBackground(colorFree);
            } else {
                setVerticalAlignment(SwingConstants.TOP);
                setBackground(colorFree);
                StringBuilder sb = new StringBuilder();
                sb.append("<html>");
                for (ScheduleAppointment appointment : scheduleElement.getAppointments()) {
                    sb.append("<div style=\" margin: 3px; padding: 3px; word-wrap: break-word; overflow-x: auto; vertical-align: top;");
                    sb.append("border: 2px solid #cccccc; ");

                    if (appointment.getCourse().getType().getName().equals("Uebung")) {
                        sb.append("background-color: #99eeaa; ");
                    } else {
                        sb.append("background-color: #99ddff; ");
                    }
                    sb.append("\">");
                    sb.append("Kurs ");
                    sb.append(appointment.getCourse().getNumber()).append(" (")
                            .append(appointment.getCourse().getType().getName().equals("Uebung") ? "Übung" : "Vorlesung").append("):<br/>");
                    sb.append("<b>").append(appointment.getCourse().getName()).append("</b><br/>");
                    sb.append("Raum: ").append(appointment.getRoom().getName()).append("<br/>");
                    sb.append("Dozent: ").append(appointment.getCourse().getAcademic().getName()).append("<br/>");
                    sb.append("Teilnehmer: ").append(appointment.getCourse().getStudents());
                    /**
                     * Semester ausgeben
                     */
                    if (studyProgram != null) {
                        sb.append("<br/>").append(studyProgram.getSemesterByCourse(appointment.getCourse()));
                    }

                    sb.append("</div>");

                }
                sb.append("</html>");
                /**
                 * Tabellenwert zuweisen
                 */
                setText(sb.toString());

            }
        } 
        /**
         * TimeSlot verarbeiten
         */
        else if (value instanceof TimeSlot) {
            setVerticalAlignment(SwingConstants.CENTER);
            setText(value.toString());
            setToolTipText("");
            setBackground(colorTimeSlot);

        } 
        /**
         * Anderfalls Zellenwert ignorieren und Detfaulausgaben machen
         */
        else {
            setToolTipText("Nicht belegt.");
            setText("");
            setBackground(colorFree);
        }
        
        /**
         * Renderer Komponente (this) als Rückgabewert liefern
         */
        return this;
    }