tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
13
ZUGRIFFE
5298
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Java_Neuling Tutorials.de Gastzugang
    Hi!

    Ich programmiere gerade an der Kalender Funktion von Java rum und habe dafür den Gregorian Calendar benutzt. Als ich dann die Abfrage nach dem Jahr machte kam ne Fehlermeldung index.out.of.BoundsException obwohl an der Stelle gar kein Array steht. Der Fehler kann nur in der Zeile liegen...
    Ist irgendwas über Fehler bei dem Gregorian Calendar bekannt?

    Danke im voraus für die Posts!

    MfG
    Java_Neuling
     

  2. #2
    Avatar von Matze
    Matze Matze ist offline Weltenwanderer
    Registriert seit
    Jul 2007
    Ort
    Die Welt
    Beiträge
    1.504
    Blog-Einträge
    7
    Wäre hilfreich, wenn du die entsprechende Code-Stelle Posten würdest
     
    "... Jeder von uns ist Kunst... gezeichnet vom Leben" (Casper)

    "Sir?, we're sorrounded!"
    "Excellent, we can attack in any direction"

  3. #3
    Java_Neuling Tutorials.de Gastzugang
    Hi!

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    package RZMP;
     
    public class Kalender{
        public static void main(String [] args){
            Layout layout = new Layout();
            
            layout.anzeigen();
        }
    }

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    
    package RZMP;
     
    import java.util.Calendar;
    import java.util.GregorianCalendar;
    import java.util.TimeZone;
     
    public class Datum{
        
        public GregorianCalendar cal = new GregorianCalendar();
        
        public void setTimeZone(){
            cal.setTimeZone( TimeZone.getTimeZone("ECT") );
        }
        
        public int berechneTage(){
            return cal.get( cal.get(Calendar.DAY_OF_MONTH) );
        }
        
        public int berechneMonat(){
            return cal.get( cal.get(Calendar.MONTH) );
        }
            
        public int berechneJahr(){
            //System.out.println( cal.get( cal.get(Calendar.YEAR) ) );
            return cal.get( cal.get(Calendar.YEAR) );
        }
        
        public int berechneKW(){
            return cal.get( Calendar.WEEK_OF_YEAR );
        }
     
    }

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    
    package RZMP;
     
    import java.awt.Container;
     
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JTextField;
     
    public class Layout {
        public JFrame frame = new JFrame("Kalender");           /*Fenster für die Anzeige*/
        public JTextField tf_anzeige[] = new JTextField[2];     /*TextFeld für die Auswahl des Jahres und Monats*/
        public JButton bt_woTage[] = new JButton[7];            /*JLabel für die Anzeige der Wochentage (Mo, Di, Mi, ...)*/
        public JButton bt_kw[] = new JButton[5];                /*JLabel für die Anzeige der KalenderWoche*/
        public JButton bt_tage[] = new JButton[31];             /*JButton für die Anzeige der Tage des Monats*/
        public JButton bt_pfeile[] = new JButton[4];            /*JButton zum Weiterschalten von Jahr und Monat*/
        public Datum berechner = new Datum();
        public int pos_x = 85;
        public int pos_y = 60;
        public int breite = 60;
        public int höhe = 60;
        
        public void anzeigen(){     
            Container c = frame.getContentPane();
            c.setLayout( null );
            
            /*Füllen des WochenTage Arrays*/
            for(int bt = 0; bt < bt_woTage.length; bt++){
                bt_woTage[bt] = new JButton();
            }
            
            bt_woTage[0].setText("MO");
            bt_woTage[1].setText("DI");
            bt_woTage[2].setText("MI");
            bt_woTage[3].setText("DO");
            bt_woTage[4].setText("FR");
            bt_woTage[5].setText("SA");
            bt_woTage[6].setText("SO");
            
            /*Eigenschaften der TextFelder*/
            int monat = berechner.berechneMonat();
            int jahr = berechner.berechneJahr();
            
            for(int tf = 0; tf < tf_anzeige.length; tf++){
                tf_anzeige[tf] = new JTextField();
                tf_anzeige[tf].setEditable(false);
                c.add(tf_anzeige[tf]);
            }
     
            tf_anzeige[0].setBounds     ( 70, 10,100, 20);
            tf_anzeige[0].setText("2008");
            tf_anzeige[1].setBounds     (405, 10,100, 20);
            
            
            if(monat == 0){
                tf_anzeige[1].setText("Januar");
            } else if(monat == 1){
                tf_anzeige[1].setText("Februar");
            } else if(monat == 2){
                tf_anzeige[1].setText("März");
            } else if(monat == 3){
                tf_anzeige[1].setText("April");
            } else if(monat == 4){
                tf_anzeige[1].setText("Mai");
            } else if(monat == 5){
                tf_anzeige[1].setText("Juni");
            } else if(monat == 6){
                tf_anzeige[1].setText("Juli");
            } else if(monat == 7){
                tf_anzeige[1].setText("August");
            } else if(monat == 8){
                tf_anzeige[1].setText("September");
            } else if(monat == 9){
                tf_anzeige[1].setText("Oktober");
            } else if(monat == 10){
                tf_anzeige[1].setText("November");
            } else{
                tf_anzeige[1].setText("Dezember");
            };
            
            
            /*Füllen des Pfeil Arrays*/
            for(int bt = 0; bt < bt_pfeile.length; bt++){
                bt_pfeile[bt] = new JButton();
                c.add(bt_pfeile[bt]);
            }
            
            bt_pfeile[0].setText("<");                          /*Zurück Schalten vom Jahr*/
            bt_pfeile[1].setText(">");                          /*Vor Schalten vom Jahr*/
            bt_pfeile[2].setText("<");                          /*Zurück Schalten vom Monat*/
            bt_pfeile[3].setText(">");                          /*Vor Schalten vom Monat*/
                
            bt_pfeile[2].setBounds      ( 10, 10, 50, 20);
            bt_pfeile[3].setBounds      (180, 10, 50, 20);
            bt_pfeile[0].setBounds      (345, 10, 50, 20);
            bt_pfeile[1].setBounds      (515, 10, 50, 20);
            
                            
            /*Ausgabe der Tage*/
            for(int tag = 0; tag < bt_woTage.length; tag++){
                bt_woTage[tag].setBounds      ( pos_x, pos_y, breite, höhe );
                
                pos_x = pos_x + pos_y + 10;
                c.add(bt_woTage[tag]);
            }
            
            /*Eigenschaften des Fenster*/
            frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
            frame.setResizable(true);
            frame.setSize(590, 300);
            frame.setVisible(true);
        }
        
        public void positionen(){
            pos_x = 90;
            pos_y = 80;
            breite = 60;
            höhe = 60;
        }
    }

    Als Fehlermeldung kommt:
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2008
    at java.util.Calendar.internalGet(Unknown Source)
    at java.util.Calendar.get(Unknown Source)
    at RZMP.Datum.berechneJahr(Datum.java: 25)
    at RZMP.Layout.anzeigen(Layout.java:41)
    at RZMP.Kalender.main(Kalender.java: 7)


    MfG
    Java_Neuling
     

  4. #4
    MeinerEiner_80 Tutorials.de Gastzugang
    Moin!
    Statt
    Code :
    1
    
    return cal.get( cal.get(Calendar.YEAR));

    solltest du es eher
    Code :
    1
    
    return cal.get(Calendar.YEAR));
    so machen.. Und nicht nur beim Jahr, sondern auch gleich die anderen Felder berücksichtigen..

    *grüssle*
    MeinerEiner
     

  5. #5
    Java_Neuling Tutorials.de Gastzugang
    Hi!

    Vielen Vielen Dank endlich klappts!

    Ich beschäftige mich erst seit neuem mit der Kalender Klasse darum ist mir der Fehler nicht aufgefallen...

    Nochmals vielen Dank!

    MfG
    Java_Neuling
     

  6. #6
    MeinerEiner_80 Tutorials.de Gastzugang
    Was ich vergessen habe:
    Statt der ganzen if-Abfragen, bezüglich der Ausgabe des Monats in deinem Textfeld, würde es auch folgender Einzeiler regeln:
    Code :
    1
    
    System.out.println(cal.getDisplayName(Calendar.MONTH,Calendar.LONG,Locale.GERMAN));

    *grüssle*
    MeinerEiner
     

  7. #7
    Java_Neuling Tutorials.de Gastzugang
    Hey,

    vielen Dank so ists viel einfacher

    ich muss gestehen wir fangen gerade erst mit der Objekt Orientierten Programmierung an fällt dir da vllt was auf in dem Code Oder könnte man es so lassen?

    Grüße
    Java_Neuling
     

  8. #8
    MeinerEiner_80 Tutorials.de Gastzugang
    Moin!
    Naja wenn du mich schon so fragst Wieso schreibst du denn direkt "2008" in das Textfeld und holst dir den Wert nicht aus dem Kalendar?
    Die Wochentage kann man sich ebenso leicht über die Methode getDisplayNames() des Calendar Objekts holen.
    Ein Null-Layout würde ich auch nur im äussersten Notfall nutzen, LayoutManager sind da besser geeingnet.
    Und wenn die Datumsklasse auf diese Funktionalität beschränkt bleibt, ist sie meiner Meinung nach unnötig. Da hätte man auch der Layout Klasse ein Kalender Objekt zuweisen können..

    Manches davon ist eh Geschmackssache. Das wirst du mit der Zeit selber lernen..

    *grüssle*
    MeinerEiner
     

  9. #9
    Java_Neuling Tutorials.de Gastzugang
    Hi,

    erst mal Danke für deine Tips!
    Das mit dem 2008 war nur für Test zwecke wo ich den Fehler (mit cal.get...) gesucht habe. Das wurde schon wieder geändert
    Das mit den Wochentagen probier ich gleich mal aus und mit dem Layout es ist halt so das ich die Buttons mit einem bestimmten abstand zueinander positionieren will und wenn ich einen Layout Manager nehme ist der Abstand der Buttons voneinander fest vorgegeben (zumindest bei denen die ich bis jetzt benutzt habe...)

    Ne andere Frage wie du gesehen hast hab ich ja zwei Textfelder in denen das Jahr und der Monat drin steht. Ich möchte durch diese TextFelder die anfallenden Tage (28, 30, 31) drunter ausgeben lassen. Ich hab leider nur noch keine Ahnung wie ich ne Beziehung zwischen den Textfeldern und der Ausgabe herstellen kann
    vllt macht es ja ein Beispiel klarer 13.März.2008 ist ein Donnerstag also soll ein Button mit dem Text "13" erzeugt werden und unter dem Donnerstag stehen. Dies soll für alle Tage im Monat gemacht werden je nach dem welcher Monat ausgewählt ist. Dadurch kommen wir auch schon zum nächsten Problem ich hab keine Ahnung wie ich die Monate weiterschalten lassen soll wenn ich nur Abfrage in welchem Monat ich mich gerade befinde

    Ich hoffe ich hab mich klar genug ausgedrückt

    MfG
    Java_Neuling
     

  10. #10
    MeinerEiner_80 Tutorials.de Gastzugang
    Zitat Zitat von Java_Neuling Beitrag anzeigen
    Ich möchte durch diese TextFelder die anfallenden Tage (28, 30, 31) drunter ausgeben lassen. Ich hab leider nur noch keine Ahnung wie ich ne Beziehung zwischen den Textfeldern und der Ausgabe herstellen kann
    Wenn ich dich richtig verstehe und du wissen willst, wieviele Tage ein Monat maximal hat, erhält man das leicht mittels:
    Code :
    1
    
    System.out.println(cal.getActualMaximum(Calendar.DAY_OF_MONTH));
    Du solltest auch mal ein bisschen in der API stöbern. Wenn man sich das ordentlich zu Gemüte führt, findet man das alles selbst leicht raus.

    ich hab keine Ahnung wie ich die Monate weiterschalten lassen soll wenn ich nur Abfrage in welchem Monat ich mich gerade befinde
    Wenn du dich beispielsweise im März befindest und den Kalender auf April setzen willst.. nun dafür gibt es set() und add() Methoden, mit dem man die Datumsfelder des Kalenders setzen kann.. Einfach mal nachschauen...

    *grüssle*
    MeinerEiner
     

  11. #11
    Java_Neuling Tutorials.de Gastzugang
    Die Methode cal.get(Calendar.DAY_OF_MONTH) kannte ich schon nur jetzt muss ich mir halt was überlegen wie ich sie dem jeweiligen Wochentag zuordnen kann das war das eigentliche problem.

    Jetzt mal ne wahrscheinlich ganz dumme Frage aber gibts die API auch auf deutsch?
    Ich hab leider nur die http://java.sun.com/j2se/1.4.2/docs/...nCalendar.html Seite gefunden aber ich glaub API's gibts nur auf Englisch oder

    Vielen vielen Dank nochmal das mir so geholfen hast

    MfG
    Java_Neuling
     

  12. #12
    MeinerEiner_80 Tutorials.de Gastzugang
    Zitat Zitat von Java_Neuling Beitrag anzeigen
    Die Methode cal.get(Calendar.DAY_OF_MONTH) kannte ich schon nur jetzt muss ich mir halt was überlegen wie ich sie dem jeweiligen Wochentag zuordnen kann das war das eigentliche problem.
    Bitt nochmal erklären... Verstehe ich nicht, ich dachte du wolltest du maximalen Tage eines Monats ermitteln..

    Jetzt mal ne wahrscheinlich ganz dumme Frage aber gibts die API auch auf deutsch?
    Naja, aber wenn man programmieren will, sollte man schon englisch können..
    Hier gibts aber eine Referenz auf deutsch:
    http://www.dpunkt.de/java/Referenz/D...a.util/23.html
    Mit der Forumssuche hätte man das aber auch finden können, das Thema gabs schonmal:
    http://www.tutorials.de/forum/java/2...f-deutsch.html

    *grüssle*
    MeinerEiner
    Geändert von MeinerEiner_80 (13.03.08 um 10:28 Uhr)
     

  13. #13
    Java_Neuling Tutorials.de Gastzugang
    Also ich hab ja die Wochentage aufgelistet. Nun möchte ich die jeweiligen Tage des Monats (nehmen wir an vom März) also die 31 Tage des Monats so anordnen lassen das z.B. 1 März unter dem Samstag steht. Die anderen Buttons sollen dann dem jeweiligen WochenTagen zugeordnet werden. Also 2. März unter Sonntag und der 3. März unter Montag...

    Der beste Vergleich dafür ist der Windows-Kalender

    Ich hoffe ich konnte dir nun mein Problem schildern...

    MfG
    Java_Neuling
     

  14. #14
    MeinerEiner_80 Tutorials.de Gastzugang
    Solche Komponenten gibt es aber auch schon fix und fertig, zum Beispiel:
    http://www.toedter.com/

    Was dein eigentliches Problem angeht, überlege doch mal. Du willst den WOCHENTAG und nicht den "Tag im Mona"t eines Datums wissen. Und wie man die Namen dieser Tage herrausbekommt habe ich dir mit getDisplayName() schon gezeigt....
    Das Anordnen macht man am besten mit einem LayoutManager, das GridLayout würde sich hier anbieten...

    Vielleicht schaust du dir auch mal Joda Time an:http://joda-time.sourceforge.net/
    Habs selbst noch nicht benutzt, wird hier aber gerne empfohlen, wenn es um Datumsberechnungen geht..

    *grüssle*
    MeinerEiner
     

Ähnliche Themen

  1. ASP Calendar
    Von primo11 im Forum ASP
    Antworten: 1
    Letzter Beitrag: 22.02.10, 00:02
  2. Calendar
    Von Maik20 im Forum Java
    Antworten: 6
    Letzter Beitrag: 05.12.08, 08:09
  3. Gregorian Calendar
    Von SMoeller im Forum Java
    Antworten: 3
    Letzter Beitrag: 25.09.06, 17:10
  4. Verfügt Gregorian Cal. auch über Schaltjahr
    Von Lautsprecher im Forum Java
    Antworten: 3
    Letzter Beitrag: 10.03.06, 00:37
  5. asp.net Calendar
    Von e.motion im Forum ASP
    Antworten: 2
    Letzter Beitrag: 02.02.03, 13:35