# Terminkalender



## rührnössel (30. Januar 2007)

Hallo miteinander!

ich schreibe gerade einen kleinen/simplen kalender und hab einige probleme bei der termineintragung.

 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 vom jTable13 ins 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[50];
        
        // 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("------------------------------------------ Durchgang: " + i);
            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("::::::::::::VON Zurzeit der " + vonTag[i] + "." + vonMonat[i]);
           
            bisTag[i] = jTable13.getValueAt(i,3)==""?000000000000000:Integer.valueOf(jTable13.getValueAt(i, 3).toString().substring(8,10)).intValue();
            bisMonat[i] = jTable13.getValueAt(i,3)==""?000000000000000:Integer.valueOf(jTable13.getValueAt(i, 3).toString().substring(5,7)).intValue();
            System.out.println("::::::::::::BIS Zurzeit der " + bisTag[i] + "." + bisMonat[i]);
            
            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)==""?"00000000000000000":jTable3.getValueAt(zl,sp).toString(); // Damit keine NullPointerException
                    //System.out.println("Str: " + str + ", ZL: " + zl + ", SP: " + sp);
                    //System.out.println("str: " + str + " == " + "End: " + end[i]);
                    for(int index = 0; index < end.length; index++) {
                    if(str.equals(String.valueOf(end[index])))
                    {
                        System.out.println("GLLEICH!: " + str + " = " + vonTag[i]);
                        
                        jTable3.setValueAt(jTable13.getValueAt(i,0),zl,sp);
                        break;
                    } else {}
                    }
                }
            }
            
        } 
    }
```


```
public String[] Zerlegen(int vonTag2, int vonMonat2, int bisTag2, int bisMonat2)
    {
        // Jahr ermitteln:
        int jahr;
        if(jTextField23.getText().length() == 7) {
            jahr = Integer.valueOf(jTextField23.getText().substring(3,7));
        } else {
            jahr = Integer.valueOf(jTextField23.getText().substring(2,6));
        }
        
        System.out.println("______________________________________"+jahr);

                
        String[] daten = new String[100];
        System.out.println("VON Zerlegen: " + vonTag2 + "." + vonMonat2 + "." + jahr);
        System.out.println("BIS Zerlegen: " + bisTag2 + "." + bisMonat2 + "." + jahr);
        GregorianCalendar d = new GregorianCalendar(Integer.valueOf(jahr).intValue(), Integer.valueOf(vonMonat2).intValue(), Integer.valueOf(vonTag2).intValue()); // VON
        GregorianCalendar d2 = new GregorianCalendar(jahr, bisMonat2, bisTag2); // BIS
        System.out.println("Jahr: " + jahr + ", Tag: " + d.DAY_OF_MONTH + ", Monat: " + d.MONTH + " , " + d); // TODO ist IMMMER 5, 2
        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)
        {
            System.out.println("In While: dayVon: " + dayVon);
                d.add(Calendar.DAY_OF_MONTH, 1); // TODO Tag wird nicht hochgezählt
                System.out.println("Day + 1: " + d.DAY_OF_MONTH); // d.DAY_OF_MONTH+i
                dayVon = dayVon + 1;
                
                daten[i] = String.valueOf((d.DAY_OF_MONTH+i));
            System.out.println("Zerlegen: Day of month: " + String.valueOf(d.DAY_OF_MONTH));
            i = i + 1;
        }
        return daten;
    }
```

Er fügt immer nur den ersten Termin in das jTable3 ein - die weiteren termine werden zwar gelesen, aber nicht eingefügt.

das liegt wahrschienlich daran, dass in der Methode "Zerlegen" das von und bis Datum immer den tag 5 und monat 2 ausgiebt!

GregorianCalendar d = new GregorianCalendar(Integer.valueOf(jahr).intValue(), Integer.valueOf(vonMonat2).intValue(), Integer.valueOf(vonTag2).intValue()); // VON <----- IMMER tag: 5, monat: 2
        GregorianCalendar d2 = new GregorianCalendar(jahr, bisMonat2, bisTag2); // BIS
        System.out.println("Jahr: " + jahr + ", Tag: " + d.DAY_OF_MONTH + ", Monat: " + d.MONTH + " , " + d); // TODO ist IMMMER 5, 2


außerdem will er mir in der while schleife, der gleichen methode, keinen tag dazurechnen:

d.add(Calendar.DAY_OF_MONTH, 1); // TODO Tag wird nicht hochgezählt


was mach ich da falsch?


danke für eure hilfe im vorraus!


----------

