JButton[] und String[] in doppelter For-Schleife

AlIastor

Mitglied
Tach erstmal ...

bin gerade dabei einen Kalender zu programmieren und möchte die Ausgabe der Tage eines Monats in 7x6 Buttons ausgeben (7 Wochentage und 6 Wochen). Leider findet man nur Kalenderberechnungen über Tabellen, jedoch will ich dies nicht.

Mit Calender und deren Methoden habe ich auch schon dafür gesorgt das der erste Tag eines Monats in der Zeile, Woche 1 , am jeweiligen Wochentag ausgegeben wird.

Mein Problem ist jetzt die restliche Ausgabe von Monatstag 2 bis max. 31 auf die restlichen Buttons mithilfe einer doppelten For-Schleife.

Ich programmiere erst seit nen knappen Jahr und habe halt noch einige Lücken xD Deshlab bitte ich um etwas Verständnis.

Ich poste mal die Klasse der Monatsberechnung.

Java:
import javax.swing.*;
import java.util.*;

/***************** 
 * ... *
 *****************/

	public class RechnungMonat {	
		
		// Instanzvariablen (Attribute, Member)
		// <Datentyp> <Name> (<Zuweisung>)
		public static String[] arrayString = {"","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"};
		public static JButton[] arrayButton = new JButton[42]; 
		
		public static JPanel jpCenterCenterMonatCenter = new JPanel ();
		
		public static GregorianCalendar cal = new GregorianCalendar();
		
		// Instanz-Methoden
		public static void createRechnung() {
			
			cal.get (Calendar.MONTH);
			cal.set (Calendar.DAY_OF_MONTH, 1);
			cal.set (Calendar.YEAR, 2012);
		
			int currentDay = RechnungMonat.cal.get (GregorianCalendar.DATE);
			int currentWeekDay = RechnungMonat.cal.get (Calendar.DAY_OF_WEEK) -1;
			int currentMonth = RechnungMonat.cal.get (Calendar.MONTH) +1;									
			int currentYear = RechnungMonat.cal.get (Calendar.YEAR); 
		
			System.out.println ("Tag:" + currentDay);
			System.out.println ("Wochentag:" + currentWeekDay);
			System.out.println ("Monat:" + currentMonth);
			System.out.println ("Jahr:" + currentYear);
		
			
			if (currentWeekDay == 1) {
        	   
				arrayButton[0] = new JButton (arrayString[1]);
			
				for (int iIndex = 0; iIndex < 1; iIndex++) {
					
					jpCenterCenterMonatCenter.add (arrayButton[iIndex]);
				}
			
				for (int iIndex = 1; iIndex < arrayButton.length; iIndex++ ) {
				
					arrayButton[iIndex] = new JButton();
					jpCenterCenterMonatCenter.add (arrayButton[iIndex]);
				}
			}
			
			else if (currentWeekDay == 2) {
        	   
				arrayButton[0] = new JButton (arrayString[0]);
				arrayButton[1] = new JButton (arrayString[1]);
			
				for (int iIndex = 0; iIndex < 2; iIndex++) {
				
					jpCenterCenterMonatCenter.add (arrayButton[iIndex]);
				}
			
				for (int iIndex = 2; iIndex < arrayButton.length; iIndex++ ) {
				
					arrayButton[iIndex] = new JButton();
					jpCenterCenterMonatCenter.add (arrayButton[iIndex]);
				}
			}
	
			else if (currentWeekDay == 3) {
            	   
					arrayButton[0] = new JButton (arrayString[0]);
					arrayButton[1] = new JButton (arrayString[0]);
					arrayButton[2] = new JButton (arrayString[1]);
				
					for (int iIndex = 0; iIndex < 3; iIndex++) {
					
						jpCenterCenterMonatCenter.add (arrayButton[iIndex]);
					}
				
					for (int iIndex = 3; iIndex < arrayButton.length; iIndex++ ) {
					
						arrayButton[iIndex] = new JButton();
						jpCenterCenterMonatCenter.add (arrayButton[iIndex]);
					}
			}
		
			else if (currentWeekDay == 4) {
            	   
					arrayButton[0] = new JButton (arrayString[0]);
					arrayButton[1] = new JButton (arrayString[0]);
					arrayButton[2] = new JButton (arrayString[0]);
					arrayButton[3] = new JButton (arrayString[1]);
				
					for (int iIndex = 4; iIndex < 7; iIndex++) {
					
						jpCenterCenterMonatCenter.add (arrayButton[iIndex]);
					}
				
					for (int iIndex = 4; iIndex < arrayButton.length; iIndex++ ) {
					
						arrayButton[iIndex] = new JButton();
						jpCenterCenterMonatCenter.add (arrayButton[iIndex]);
					}
			}	   
		
			else if (currentWeekDay == 5) {
     	   
					arrayButton[0] = new JButton (arrayString[0]);
					arrayButton[1] = new JButton (arrayString[0]);
					arrayButton[2] = new JButton (arrayString[0]);
					arrayButton[3] = new JButton (arrayString[0]);
					arrayButton[4] = new JButton (arrayString[1]);
			
					for (int iIndex = 0; iIndex < 5; iIndex++) {
					
						jpCenterCenterMonatCenter.add (arrayButton[iIndex]);
					}
				
					for (int iIndex = 5; iIndex < arrayButton.length; iIndex++ ) {
					
						arrayButton[iIndex] = new JButton();
						jpCenterCenterMonatCenter.add (arrayButton[iIndex]);
					}
			}	   
		
			else if (currentWeekDay == 6) {
      	   
        			arrayButton[0] = new JButton (arrayString[0]);
        			arrayButton[1] = new JButton (arrayString[0]);
					arrayButton[2] = new JButton (arrayString[0]);
					arrayButton[3] = new JButton (arrayString[0]);
					arrayButton[4] = new JButton (arrayString[0]);
					arrayButton[5] = new JButton (arrayString[1]);
			
					for (int iIndex = 0; iIndex < 6; iIndex++) {
						
						jpCenterCenterMonatCenter.add (arrayButton[iIndex]);
					}
					
					for (int iIndex = 6; iIndex < arrayButton.length; iIndex++ ) {
						
						arrayButton[iIndex] = new JButton();
						jpCenterCenterMonatCenter.add (arrayButton[iIndex]);
					}
	        }
		
	         else if (currentWeekDay == 0) {
	        	 
					arrayButton[0] = new JButton (arrayString[0]);
					arrayButton[1] = new JButton (arrayString[0]);
					arrayButton[2] = new JButton (arrayString[0]);
					arrayButton[3] = new JButton (arrayString[0]);
					arrayButton[4] = new JButton (arrayString[0]);
					arrayButton[5] = new JButton (arrayString[0]);
					arrayButton[6] = new JButton (arrayString[1]);
					
					for (int iIndex = 0; iIndex < 7; iIndex++) {
						
						jpCenterCenterMonatCenter.add (arrayButton[iIndex]);
					}
					
					for (int iIndex = 7; iIndex < arrayButton.length; iIndex++ ) {
						
						arrayButton[iIndex] = new JButton();
						jpCenterCenterMonatCenter.add (arrayButton[iIndex]);
					}
					
					for (int iIndexString = 2; iIndexString < arrayString.length; iIndexString++ ) {
						
						for (int iIndexButton = 7; iIndexButton < arrayButton.length; iIndexButton++) {
							
							arrayButton[iIndexButton].setText (arrayString[iIndexString]);
							jpCenterCenterMonatCenter.add (arrayButton[iIndexButton]);
						}
					}
	         }
		}
	}

Mit diesem Code werden mir jetzt leider nur Button mit dem String 31 ausgegebn. Wenn ich diese Ausgaben in der Console ausgeben lasse, sehe ich das die Anzahl der String * der Anzahl der Buttons gerechnet werden.

Die restlichen Klassen poste ich nicht, da es viel zuviel ist, fürs Verständnis aber auch nicht nötig. Der Rest ist GUI und etlichte Zusatzfunktion, was ein Kalender halt bieten soll.

Greez AlIastor
 

xKoRe

Mitglied
Ich muss sagen, so ganz steige ich ja nicht dahinter, wie das nachher tatsächlich aussehen soll. Trotzdem sehe ich schon gleich einige Dinge die wesentlich umständlicher sind als sie sein sollten. Wenn ich das richtig sehe, kann der GregorianCalendar (aus java.util) dir alle Tage Wochen etc. als String geben. Das bedeutet doch dass du nicht sowas wie das "arrayString" initialisieren musst.

Fangen wir mal mit ein paar Verbesserungsvorschlägen vorweg an:

Java:
for (int iIndex = 0; iIndex < 1; iIndex++) {
                    
                    jpCenterCenterMonatCenter.add (arrayButton[iIndex]);
                }
Für ein Element musst du nun wirklich keine Schleife verwenden. Du kannst den Button direkt nach der Initialisierung darüber hinzufügen.
Ab hier verstehe ich das so: Du hast im Button des aktuellen Wochentages eine 1 stehen und ansonsten in allen andern nichts. Wenn das deine Absicht war, geht das um Längen einfacher. Ich nehme mal an dein Ziel war ein anderes.

Erkläre doch am besten mal kurz wie du dir das Ergebnis vorstellst, vielleicht kann ich dir ein paar Tipps geben.

Nebenbei gesagt geb ich dir den Tipp die Dinge genau so zu benennen, nachdem was sie tun oder beinhalten. Macht, sobald das Projekt grösser wird die Sache wesentlich übersichtlicher. Und versuchs doch mal mit Objekt Orientierung.
 

AlIastor

Mitglied
Wie gesagt, bin leider noch Anfänger xD Aber das viele Sachen umständlicher sind als sie müssen hab ich auch schon bei vielen Punkten bemerkt, aber ich denke da ist es wie beim Programmierstil, das kommt alles mit der Zeit.

Das mit den zwei Arrays kommt von meinem Lehrer. Er meinte ich solle die beiden vergleichen und bei Übereinstimmung ausgeben, jedoch merke immer bei jeder Frage meinerseits immer mehr, das er selber kaum Ahnung hat.

Nochmal zum Verständnis für das Programm:

Ich habe für die Ausgabe ein BorderLayout gewählt, im North habe ich die Wochentage und im West die sechs Wochen.

Im Centerbereich füge ich dann die 42 Buttons einem GridLayout hinzu. 42 Buttons deshalb, fals der erste Wochentag der Sonntag ist, kommt man auf max. 6 Wochen.

Mit DAY_OF_WEEK vergleiche ich und setzte bei Übereinstimmung den ersten Monatstag, in mein Beispiel jetzt auf den Sonntag.

Und mit einer Schleife wollte ich dann die folgenden Monatstage einfach den restlichen Buttons hinzufügen. Bei den geposteten Code gibt er mir jedoch auf allen restlichen Buttons 31 aus.

Die freien Buttons sollen später noch Tage des vorherigen Monats und des folgenden Monats bekommen, jedoch erst später.

Nebenbei gesagt geb ich dir den Tipp die Dinge genau so zu benennen, nachdem was sie tun oder beinhalten. Macht, sobald das Projekt grösser wird die Sache wesentlich übersichtlicher.

Mein Programm ist schon recht groß und ich verlier auch langsam den Überblick xD Wie du schon sagst, werd ich mich mal nach der Rechnung hinsetzen und alles etwas abändern.

Hab früher sogar alles in einer Klasse geschrieben, da uns der Lehrer nicht sagen konnte was ein guter Stil ist. Er meinte auch man sollte nichts in die main-Methode schreiben, was mir aber Beispiele im Internet überhaupt nicht bestätigen.

Und versuchs doch mal mit Objekt Orientierung.

Steh grad aufn Schlauch, was meinst du damit genau xD ?
 

xKoRe

Mitglied
6 Wochen? Du meinst vermutlich, wenn ein Stück einer Woche am Anfang und am Ende noch mit reinmuss. So haben wir zwar 4 Wochen und 2 angefangene, aber 42 Tage trotzdem nicht.

Mich wundert es gerade, dass überhaupt etwas auf den restlichen Buttons steht. Du initialisierst sie ja ohne Stringargument. Vielleicht hat das mit deinem anderen Code zu tun?

Java:
for (int iIndexString = 2; iIndexString < arrayString.length; iIndexString++ ) {
                        
                        for (int iIndexButton = 7; iIndexButton < arrayButton.length; iIndexButton++) {
                            
                            arrayButton[iIndexButton].setText (arrayString[iIndexString]);
                            jpCenterCenterMonatCenter.add (arrayButton[iIndexButton]);
                        }
                    }

Ich gehe davon aus dass du hier versuchst die entsprechenden Tage zu vergeben. Ich denke wenn du Prinzipiell im Center einen Standardmässigen Kalender machen möchtest (so wie man ihn halt kennt), ist dein Konzept auf jedenfall zu überdenken. Leider kann ich auch nicht genau sagen wie (d.h. in welchem Zusammenhang und auf welche Weise) du die createRechnung() benutzt. Da sind leider die Grenzen meines Verständnisses erreicht.

Wenn du aber mal lust hast mir den ganzen Code zu schicken melde dich per PN

Ein guter Stil ist folgendes:
Gibt es Funktionalität die abspaltbar von dem restlichen ist, mache eine Methode darauf.
Willst du nicht nur ein paar Berechnungen alleinstehend testen, vermeide static und geh auf Objektorientierung (google sonst mal danach).
Benenne Funktionen (Methoden) und Variablen (Felder) immer genau nachdem was sie sind und können so weit es möglich ist.
Vermeide jeglichen Hardcode wenn machbar (möglichst dynamisch erzeugte Buttons usw).
Kommentiere schwierige oder komplexe Stellen sowie Methoden sinnvoll.
Vermeide unnütze if/else Schachtelungen sowie Schleifen.
Für Gartgesottene gibt es bei GUI Anwendungen noch das nette MVC Pattern, was aber bei kleinen Projekten oder anfänglichen Programmierversuchen overkill ist.
usw...

Ich persönlich finde es schwierig ohne ObjektOrientierungskenntnisse gleich auf GUI zu gehen.
 

AlIastor

Mitglied
Das es keine 42 Tage sind is mir klar, es war von mir so geplant das auf die leeren Buttons noch die Tage des letzten Monats und die Tage des folgenden Monats reinkommen. Wie man das auch von den meisten Kalendern kennt.

Wenn ich Abend zu Hause bin schick ich dir das komplette Programm. Wäre super wenn du dann mal Kritik zum Stil und Aufbau äußert, damit ich weiß woran ich bin. Dann kann ich es auch sauber überarbeiten, bevor es noch größer wird.

Wie soll ich den Code schicken ? Als Textdatei oder den Projektordner ... hab hier noch nie was versendet.

Und danke dir für deine Mühe und Geduld xD
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G jButton bei Klick String +1 Java Basics - Anfänger-Themen 5
Hilde22 Neu Start JButton einfügen Java Basics - Anfänger-Themen 2
W GUI - JButton ohne Funktion? Java Basics - Anfänger-Themen 24
M JButton setBackground() färbt nicht den ganzen Knopf Java Basics - Anfänger-Themen 4
C JButton reagiert nicht auf actionListener Java Basics - Anfänger-Themen 15
G jButton führt Main Methode nicht richtig aus Java Basics - Anfänger-Themen 3
J Jbutton blinkt Java Basics - Anfänger-Themen 5
C JButton Text 2 Mal ändern funktioniert nicht Java Basics - Anfänger-Themen 8
E JButton und JTextField Java Basics - Anfänger-Themen 1
V_Fynn03 Erste Schritte JButton funktioniert nicht trotz richtiger Methode. Java Basics - Anfänger-Themen 17
J Erste Schritte if Abfrage von JButton in 2. Klasse Java Basics - Anfänger-Themen 27
J Erste Schritte Actionlistener für tbar/ JButton Java Basics - Anfänger-Themen 15
krgewb Icon von JButton ändern Java Basics - Anfänger-Themen 1
P JButton -Arrays Java Basics - Anfänger-Themen 4
A JButton in anderer Klasse bearbeiten. Java Basics - Anfänger-Themen 2
L Erste Schritte JButton reagiert nicht Java Basics - Anfänger-Themen 5
S Bild über JButton legen Java Basics - Anfänger-Themen 3
V Einem JButton anweisungen geben Java Basics - Anfänger-Themen 4
D Methoden JButton und JLabel in einer Methode erstellen Java Basics - Anfänger-Themen 5
F Interface JButton von anderer Klasse hinzufügen Java Basics - Anfänger-Themen 2
J JButton macht was er will Java Basics - Anfänger-Themen 3
D JButton soll Farbe von JTextfield ändern Java Basics - Anfänger-Themen 5
H JButton - Wechsel der Textfarbe alle 500ms Java Basics - Anfänger-Themen 10
G KeyListener und JButton vertragen sich nicht Java Basics - Anfänger-Themen 1
N JButton anpassen Java Basics - Anfänger-Themen 3
S JButton soll für bestimmte Zeit verschwinden Java Basics - Anfänger-Themen 5
schoenosrockos JButton füllt immer das ganze frame Java Basics - Anfänger-Themen 1
D JButton in JDialog mit Action belgen Java Basics - Anfänger-Themen 6
V JButton einer anderen Klasse übergeben? Java Basics - Anfänger-Themen 6
F JButton [] mit Werten hinterlegen Java Basics - Anfänger-Themen 10
M Code um per jButton ein neues Fenster zu öffnen Java Basics - Anfänger-Themen 3
A weiter JButton Fehler Java Basics - Anfänger-Themen 3
W JTable mit einem JButton-Array füllen Java Basics - Anfänger-Themen 4
S JCombobox und JButton verknüpfen Java Basics - Anfänger-Themen 6
V wie kann ich eine Schleife pausieren, bis ein Jbutton gedrückt wird ? Java Basics - Anfänger-Themen 17
N Erste Schritte JButton reagiert nur einmal. Java Basics - Anfänger-Themen 12
S JButton Java Basics - Anfänger-Themen 2
A Farben wechseln mit JButton Java Basics - Anfänger-Themen 2
S Farbe eine Zeile in JTable ändern, wenn JButton geklickt wurd Java Basics - Anfänger-Themen 4
F Funktion eines JButton in einen Vektor verlagern Java Basics - Anfänger-Themen 4
S Interface JButton etc. wird in JFrame mit paint() nicht angezeigt Java Basics - Anfänger-Themen 6
A Labels Inner JButton Event Erstellbar? Java Basics - Anfänger-Themen 3
K JButton alles zurücksetzen Java Basics - Anfänger-Themen 1
U JButton: Beschriftung ueber Variable zuweisen Java Basics - Anfänger-Themen 6
S JButton erscheint erst bei Mouseover Java Basics - Anfänger-Themen 10
S JButton mit ActionListener Java Basics - Anfänger-Themen 5
S JDK installieren JButton BorderPoints?! Java Basics - Anfänger-Themen 7
E Problem mit erben von JButton Java Basics - Anfänger-Themen 7
J Bei Hinzufügen von JButton Programm langsam Java Basics - Anfänger-Themen 3
J Verknüpfung von JButton to JTextField Java Basics - Anfänger-Themen 4
S Jbutton per Passworteingabe aktivieren Java Basics - Anfänger-Themen 2
G über JButton Action einen anderen Button verändern Java Basics - Anfänger-Themen 7
H JButton - Icon(.png) aus resources laden Java Basics - Anfänger-Themen 23
M Hintergrundbild für JButton Java Basics - Anfänger-Themen 6
A jbutton - icon linksbündig, text zentriert Java Basics - Anfänger-Themen 10
M Input/Output JFrame mit JButton und JTextfield Java Basics - Anfänger-Themen 114
J Hilfe bei JButton Java Basics - Anfänger-Themen 6
W JButton in gleiche Größe bringen Java Basics - Anfänger-Themen 4
pg1337 JButton zuschneiden Java Basics - Anfänger-Themen 3
T Modales JDialog schliessen mit JButton Java Basics - Anfänger-Themen 2
D JButton Array setBackground Java Basics - Anfänger-Themen 2
F JButton wie selektierter JTabbebPane-Header Java Basics - Anfänger-Themen 7
C OOP Java JButton mit Funktion belegen Java Basics - Anfänger-Themen 3
S JButton wird nicht angezeigt Java Basics - Anfänger-Themen 14
C JButton.getIcon() != null Java Basics - Anfänger-Themen 3
E JButton-Text wird in Schleife nicht geändert Java Basics - Anfänger-Themen 4
F welches Layout für JButton-Liste verwenden Java Basics - Anfänger-Themen 6
T JButton Text ändern Java Basics - Anfänger-Themen 4
L JButton erscheint nur mit pack() Java Basics - Anfänger-Themen 3
U Passwort auf JButton setzen. Java Basics - Anfänger-Themen 2
E JButton Hintergrund / Rahmen entfernen? Java Basics - Anfänger-Themen 4
L Bild auf einem JButton Java Basics - Anfänger-Themen 4
K JButton.setText Problem Java Basics - Anfänger-Themen 6
M JButton und DisabledIcon Java Basics - Anfänger-Themen 2
K jButton zur Laufzeit hinzufügen Java Basics - Anfänger-Themen 22
A GUI - JButton problem! Java Basics - Anfänger-Themen 5
M JButton selbst nachprogrammieren Java Basics - Anfänger-Themen 3
A JButton Textrahmen Java Basics - Anfänger-Themen 7
A Platzierung eines JButton Java Basics - Anfänger-Themen 4
D JButton oder ImageIcon klickt "langsam" Java Basics - Anfänger-Themen 5
E JButton klassenübergreifend nutzen? Java Basics - Anfänger-Themen 6
R Liste graphischer Objekte z.B. JButton dynamisch erstellen Java Basics - Anfänger-Themen 13
J JList Inhalt nach JButton Klick aktualisieren Java Basics - Anfänger-Themen 8
S JButton trotz Box-Layout skalieren Java Basics - Anfänger-Themen 6
P JButton identifizieren Java Basics - Anfänger-Themen 8
K Funktion zu einem JButton hinzufügen Java Basics - Anfänger-Themen 27
D HTML Text von jButton disablen Java Basics - Anfänger-Themen 2
E Auf JButton in Arraylist zugreifen Java Basics - Anfänger-Themen 6
E Andere Form eines JButton Java Basics - Anfänger-Themen 17
A JButton ActionListener nach einmaligem Ausführen zurücksetzen Java Basics - Anfänger-Themen 13
B JButton Größe einstellen? Java Basics - Anfänger-Themen 3
E Zeilenumbruch in JButton mit Variable Java Basics - Anfänger-Themen 2
A JButton erscheint nicht (BlueJ) Java Basics - Anfänger-Themen 2
M JButton sieht komisch aus :-) Java Basics - Anfänger-Themen 5
B JPanel über JButton umändern Java Basics - Anfänger-Themen 9
D JButton transparent bekommen? Java Basics - Anfänger-Themen 5
H JButton Unsichtbar Java Basics - Anfänger-Themen 7
R JTextField mittels JButton in Konsole ausgeben Java Basics - Anfänger-Themen 2
J Variable die bei JButton Clicks mitzählt Java Basics - Anfänger-Themen 9
Developer_X JButton removt sich selbst Java Basics - Anfänger-Themen 32

Ähnliche Java Themen

Neue Themen


Oben