# Kalender -> Termine eintragen



## Berger23 (28. Jan 2007)

Hallo!

Ich schreibe einen kleinen/simplen Kalender, den man mit Terminen füllen kann. Der Kalender wird schon erstellt, nur die Eintragung der Termine bereitet mir Kopfschmerzen.

Ich habe zwei Tabellen:
1) jTable3: ist der "eigentliche" Kalender -> also in diese Tabelle werden die Tage eingetragen.

2) jTable13: in dieser Tabelle sind die Termine gespeichert.

jetzt will ich die Termine von jTable13 in jTable3 eintragen.

hab mir das folgendermaßen vorgestellt: (Problem wird am Ende erläutert)


Die Methode Kalender erstellt erstmal den Kalender und trägt diesen dann in das jTable3 ein:

```
public void Kalender(int monat, int jahr)
    {
        GregorianCalendar heute = new GregorianCalendar();
        int tagH = heute.get(java.util.Calendar.DAY_OF_MONTH);
        int monatH = heute.get(java.util.Calendar.MONTH);
        int jahrH = heute.get(java.util.Calendar.YEAR);
        
        GregorianCalendar lfDatum = new GregorianCalendar(jahr, monat, 1);
        int aktWochentag = lfDatum.get(Calendar.DAY_OF_WEEK);
        int zl = 0;
        int sp = 0;
        
        if (aktWochentag != Calendar.SUNDAY) {
            for(int tagNo = Calendar.MONDAY; tagNo < aktWochentag; ++tagNo)
                sp = sp + 1;
        }
        else {
            sp = 6;
        }
        
        while(lfDatum.get(Calendar.MONTH) == monat) // monatH
        {
            int tag = lfDatum.get(Calendar.DAY_OF_MONTH);
            
            jTable3.setValueAt(tag, zl, sp);
            
            sp = sp + 1;
            if(aktWochentag == Calendar.SUNDAY) 
            {
                zl = zl + 1;
                sp = 0;
            }
            
            lfDatum.add(Calendar.DAY_OF_MONTH, 1);
            aktWochentag = lfDatum.get(Calendar.DAY_OF_WEEK);
        }
        
        Prufen();
    }
```



Die Methode Prüfen holt dann die Termine aus dem jTable13 und zerlegt das VON Datum und BIS Datum in Tage und Monate. Die Methode Zerlegen, berechnet die Tage zwischen dem VON und BIS Datum und wird dann der Methode Prüfen übergeben, um die Daten dann in der jTable3 zu suchen:




```
public void Prufen()
    {
        int[] vonTag = new int[100];
        int[] vonMonat = new int[100];
        int[] bisTag = new int[100];
        int[] bisMonat = new int[100];
        String[] end = new String[100];
        
        // Einlesen der Termine aus jTable3
        for(int i = 0; i < jTable13.getRowCount(); i++)
        {//jTable3.getValueAt(zl,sp)==null?"":jTable3.getValueAt(zl,sp)
            System.out.println("AusZelle: " + jTable13.getValueAt(i,2));
            vonTag[i] = jTable13.getValueAt(i,2)==""?00000000000000:Integer.valueOf(jTable13.getValueAt(i, 2).toString().substring(8,10)).intValue();
            vonMonat[i] = jTable13.getValueAt(i,2)==""?00000000000000:Integer.valueOf(jTable13.getValueAt(i, 2).toString().substring(5,7)).intValue();
            //System.out.println("________Tag: " + vonTag[i]);
            
            bisTag[i] = jTable13.getValueAt(i,3)==null?000000000000000:Integer.valueOf(jTable13.getValueAt(i, 3).toString().substring(8,10)).intValue();
            bisMonat[i] = jTable13.getValueAt(i,3)==null?000000000000000:Integer.valueOf(jTable13.getValueAt(i, 3).toString().substring(5,7)).intValue();
        
            end = Zerlegen(vonTag[i], vonMonat[i], bisTag[i], bisMonat[i]);
            for(int r = 0; r < end.length; r++)
                System.out.println("End: " + end[r]);
            // Termin in jTable3 suchen
            String str = "";
            loop1:
            for (int zl = 0; zl < jTable3.getRowCount(); zl++) 
            {
                for (int sp = 0; sp < jTable3.getColumnCount(); sp++) 
                {
                    str = jTable3.getValueAt(zl,sp)==null?"":jTable3.getValueAt(zl,sp).toString(); // Damit keine NullPointerException
                    if(str.equals(end[i]));
                    {
                        jTable3.setValueAt(jTable13.getValueAt(i,0),zl,sp);
                        break loop1;
                    }
                }
            }
            
        } 
    }
```



```
public String[] Zerlegen(int vonTag2, int vonMonat2, int bisTag2, int bisMonat2)
    {
        String[] daten = new String[100];
        GregorianCalendar d = new GregorianCalendar(2007,vonMonat2,vonTag2);
        GregorianCalendar d2 = new GregorianCalendar(2007,bisMonat2,bisTag2);
        
        Calendar datum1 = Calendar.getInstance(); // Von
        Calendar datum2 = Calendar.getInstance(); // Bis
        
        long von = d.getTimeInMillis();
        long bis = d2.getTimeInMillis();
        
        datum1.setTimeInMillis(von); 
        datum2.setTimeInMillis(bis);
        
        long dayVon = (datum1.get(Calendar.DAY_OF_YEAR)-1);
        long dayBis = (datum2.get(Calendar.DAY_OF_YEAR)-1);
        
        java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("D", Locale.GERMANY);
        int i = 0;
        while(dayVon < dayBis)
        {

                d.add(Calendar.DAY_OF_MONTH, 1);
                dayVon = dayVon + 1;
                
                daten[i] = String.valueOf(d.DAY_OF_MONTH);
            //System.out.println(String.valueOf(d.DAY_OF_MONTH));
            i = i + 1;
        }
        return daten;
    }
```



Mein Problem ist jetzt, dass der Termin immer in die erste Zelle geschrieben wird. Wenn es mehrere Termine in jTable13 gibt, dann fügt er immer nur den letzten ein (Wahrscheinlich überschreibt er die erste Zelle einfach nochmal). Außerdem fügt er die Tage zwischen VON und BIS nicht ein. 

Ich weiß, dass ich bis jetzt nur die Tage beachte und den Monat nicht berücksichtige. werde ich dann nachtragen wenns mal die tage einfügt.

Ich bekomme auch eine Exception:

Exception in thread "AWT-EventQueue-0" java.lang.StringIndexOutOfBoundsException: String index out of range: 10
        at java.lang.String.substring(String.java:1935)
        at GUIH.Prufen(GUIH.java:4372)
        at GUIH.Kalender(GUIH.java:4353)
        at GUIH.jButton53ActionPerformed(GUIH.java:2989)
        at GUIH.access$4900(GUIH.java:17)
        at GUIH$54.actionPerformed(GUIH.java:1718)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6038)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3260)
        at java.awt.Component.processEvent(Component.java:5803)
        at java.awt.Container.processEvent(Container.java:2058)
        at java.awt.Component.dispatchEventImpl(Component.java:4410)
        at java.awt.Container.dispatchEventImpl(Container.java:2116)
        at java.awt.Component.dispatchEvent(Component.java:4240)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
End: null
End: null
End: null
End: null
End: null
End: null
End: null
End: null
End: null
End: null
End: null
End: null
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
        at java.awt.Container.dispatchEventImpl(Container.java:2102)
        at java.awt.Window.dispatchEventImpl(Window.java:2429)
        at java.awt.Component.dispatchEvent(Component.java:4240)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)



ich wäre sehr dankbar, wenn man mir einige tipps geben könnte!

Lg,

Berger


----------



## Ber23 (28. Jan 2007)

hallo,

ich bins nochmal. Hab einen weiteren Fehler gefunden:
und zwar in der methode zerlegen. 

GregorianCalendar d = new GregorianCalendar(2007,vonMonat2,vonTag2);

d.add(Calendar.DAY_OF_MONTH, 1); // ist in while schleife

er zählt den tag nicht hoch! was mach ich da falsch???

danke


----------

