ERLEDIGT
JA
JA
ANTWORTEN
13
13
ZUGRIFFE
5298
5298
EMPFEHLEN
-
12.03.08 12:42 #1Java_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
-
12.03.08 12:47 #2
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"
-
13.03.08 08:15 #3Java_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
-
13.03.08 08:32 #4MeinerEiner_80 Tutorials.de Gastzugang
Moin!
Statt
Code :1
return cal.get( cal.get(Calendar.YEAR));
solltest du es eher
so machen.. Und nicht nur beim Jahr, sondern auch gleich die anderen Felder berücksichtigen..Code :1
return cal.get(Calendar.YEAR));
*grüssle*
MeinerEiner
-
13.03.08 08:37 #5Java_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
-
13.03.08 08:42 #6MeinerEiner_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
-
13.03.08 08:48 #7Java_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
-
13.03.08 09:00 #8MeinerEiner_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
-
13.03.08 09:52 #9Java_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
-
13.03.08 10:05 #10MeinerEiner_80 Tutorials.de Gastzugang
Wenn ich dich richtig verstehe und du wissen willst, wieviele Tage ein Monat maximal hat, erhält man das leicht mittels:
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.Code :1
System.out.println(cal.getActualMaximum(Calendar.DAY_OF_MONTH));
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...ich hab keine Ahnung wie ich die Monate weiterschalten lassen soll wenn ich nur Abfrage in welchem Monat ich mich gerade befinde
*grüssle*
MeinerEiner
-
13.03.08 10:20 #11Java_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
-
13.03.08 10:26 #12MeinerEiner_80 Tutorials.de Gastzugang
Bitt nochmal erklären... Verstehe ich nicht, ich dachte du wolltest du maximalen Tage eines Monats ermitteln..
Naja, aber wenn man programmieren will, sollte man schon englisch können..Jetzt mal ne wahrscheinlich ganz dumme Frage aber gibts die API auch auf deutsch?
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*
MeinerEinerGeändert von MeinerEiner_80 (13.03.08 um 10:28 Uhr)
-
13.03.08 10:42 #13Java_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
-
13.03.08 11:04 #14MeinerEiner_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
-
ASP Calendar
Von primo11 im Forum ASPAntworten: 1Letzter Beitrag: 22.02.10, 00:02 -
Calendar
Von Maik20 im Forum JavaAntworten: 6Letzter Beitrag: 05.12.08, 08:09 -
Gregorian Calendar
Von SMoeller im Forum JavaAntworten: 3Letzter Beitrag: 25.09.06, 17:10 -
Verfügt Gregorian Cal. auch über Schaltjahr
Von Lautsprecher im Forum JavaAntworten: 3Letzter Beitrag: 10.03.06, 00:37 -
asp.net Calendar
Von e.motion im Forum ASPAntworten: 2Letzter Beitrag: 02.02.03, 13:35





Zitieren

Login





