# Frequenzen erfassen



## Stefano (19. Jun 2012)

Guten Tag zusammen

Über google bin ich öfters in diesem Forum verlinkt worden und nun habe ich mich entschlossen, mich zu registrieren. 

Seit einigen Monaten beschäftige ich mich mit Java, und das weil ich eine App für ein Android Tablet erstellen will. Doch vorher will ich es in Windows hinkriegen. Zudem arbeite ich in der Statistik und die Erfassung der Ein- und Aussteiger erfolgt noch auf Papier und ich darf dann alles mühsam manuell eintippen. Im 21. Jahrhundert ist das schon etwas fragwürdig. Nicht zu vergessen ist, dass ich im September 12 mein Studium in Wirtschaftsinformatik beginne und es ist bestimmt gut, Vorerfahrungen zu sammeln.

Meiner Ansicht nach ist das Programm nicht allzu schwer, zwar habe ich unzählige youtube-Videos angeschaut und dabei mir viel Wissen angeeignet, doch es reicht noch nicht aus und ich benötige weitere Tipps von euch.

*Das Programm*
Mit dem Programm soll es möglich sein, Ein- und Aussteiger in den Bussen zu erfassen, zu speichern und zu exportieren.

*Bsp.:*

Datum:,.............01.06.2012

Kurs 25............Einsteiger........Aussteige
1. Station.............3
2. Station...................................1
3. Station....................................2

Wie oben dargestellt, so stelle ich mir das Erfassungs-Fenster vor. 

Da ich das ganze später exportieren will und eine Pivot-Tabelle damit erstellen will, muss das ganze in Form von einer Tabelle gespeichert werden können. Empfiehlt Ihr mir für dieses Fenster ein JTable oder soll ich es mit JTextfield hinkiegen? Ich bin offen für alle Ideen.




Es folgen noch viele, viele weitere Schritte, doch ich will mich vorerst auf der oben stehende Frage beschränken.

Zur Info weitere Schritte:

-	alle (zirka 16) Kurse sollen mit einem Button für andere Tage generiert werden
-	sobald ein Kurs ausgefüllt ist, soll es dann verschwinden und gespeichert sein
-	es soll ein Export möglich sein.


*Ich will nicht, dass ihr für mich das Programm schreibt*, ganz und gar nicht Das ist mein Ziel und ich will es alleine schreiben. Jedoch brauche ich Tipps von euch Profis, mir fehlt noch die Erfahrung dazu.

Ich hoffe, ich habe mich an den Forum Regeln gehalten und den ganzen Text klar genug geschrieben.

Ich danke euch.

Gruss Stefano


----------



## ARadauer (19. Jun 2012)

ich würd eine JTable nehmen...


----------



## XHelp (19. Jun 2012)

Die einzige Frage, die ich aus dem Posting rauslesen kann ist: "ich will eine Tabelle darstellen. Soll ich lieber dafür eine Tabelle nehmen oder ein Textfeld?" Und die Antwort auf diese Frage ist so ziemlich einleuchtend.

P.S. Wieso hast du dich überhaupt für Hausaufgaben-Forum entschieden?


----------



## Stefano (19. Jun 2012)

Danke für die schnellen Antworten.

Das stimmt, da habe ich mich nicht klar ausgedrückt. Ich versuche es nochmal auch mit Beispiele. 

Die Eingabe-Maske soll links die Station haben und daneben zwei Felder, wo man Zahlen für die Einsteiger und Aussteiger rein schreiben kann. Zudem, vorhin nicht erwähnt, ein Button, welcher der Kurs speichert und den Kurs von der GUI verschwinden lässt. Zu dem Button aber später.

*Eingabe-Maske:*

Tag 01.06.2012

Kurs 23 

1. Station     [3]  [0]
2. Station     [0]  [1]
3. Station     [0]  [2]

Die ganze Rede bezüglich Tabelle hat den Grund, dass ich alle erfasste Kurse exportieren will und dann mit Pivot (Excel) bearbeiten will. Mir würde es auch schon aussreichen, wenn alles mit Semikolons getrennt ist.

*Export:*

01.06.2012; Kurs 23; 1. Station; 3; 0;
01.06.2012; Kurs 23; 2. Station; 0; 1;
01.06.2012; Kurs 23; 3. Station; 0; 2;

Vorhin habe ich es etwas verwirrlich beschrieben. Nochmals zusammengefasst: Ich brauche eine Eingabe-Maske, welche sich dann auch für den Export eignet.

Was empfiehlt ihr mir für Objekte auf der Eingabe-Maske? Wie würdet ihr dabei vorgehen?

Ich hoffe, es ist nun besser beschrieben.

fg Stefano


----------



## Marco13 (19. Jun 2012)

Mal ganz nebenbei: Eine JTable auf Android ...?! (@ARadauer: Hast du JTable.java nach Android portiert?  )


Das GUI und der Export hängen im Idealfall gar nicht zusammen. Üblicherweise hat man irgendein Datenmodell, das dann entweder angezeigt oder exportiert werden kann. Am Anfang könnte man also überlegen, mit welchen Klassen/Interfaces man die zu erfassenden Daten beschreiben könnte. Dann kann man sich überlegen, wie ein geeignetes UI dafür aussehen würde.


----------



## Stefano (20. Jun 2012)

Danke für die Antworten.

@Marco: Wenn du so nett wärst, kannst du mir das ein bisschen ausführlicher erklären? Ich kann mir es noch schlecht vorstellen. Vielleicht mit einem Beispiel.


----------



## ARadauer (20. Jun 2012)

Marco13 hat gesagt.:


> Mal ganz nebenbei: Eine JTable auf Android ...?! (@ARadauer: Hast du JTable.java nach Android portiert?  )



ähmn nein



			
				Stefano hat gesagt.:
			
		

> eine App für ein Android Tablet erstellen will. Doch vorher will ich es in Windows hinkriegen


zuerst mal windows... mit swing dacht ich -> JTable..



> Wie würdet ihr dabei vorgehen?


Mhnn du weißt nicht wie du starten sollst... ja das ist ein Problem das viele Anfänger haben...
Du musst dir zuerst mal ein Datenmodel der zu erfassenden Daten zu überlegen...
Ein Kurs Objekt (Name, Datum, Liste von Stationen)
Ein Station Objekt (Name, Einstiege, Auststiege)

Überleg dir wie du die Daten ablegst oder speicherst
Bau dir die Gui mit der du die Daten warten kannst...



> Was empfiehlt ihr mir für Objekte auf der Eingabe-Maske?


jetzt android oder swing? wenn swing, ja mal ein JTable und JTextFields und ComboBoxen für die Detail Masken...  so viel Auswahl gibts da nicht... einfach mal ein Swing Tutorial lesen...
Wenn Android: keine Ahnung, benutze ich nicht...


----------



## Stefano (20. Jun 2012)

Nochmals besten Dank für die Ideen.

Ich habe mich nun von folgendem Forum Thema inspirieren lassen.

_http://www.java-forum.org/java-basics-anfaenger-themen/88831-daten-text-txt-speichern.html_

Ähnlich wie beim Adressbuch erstelle ich meine Eingabe-Maske mit JLabels und JTextfields, damit das dann auch neben einander steht und nach etwas aussieht, benutze ich dann auch die setBound()-Methode, oder in meinem Fall wahrscheinlich besser GridLayout. (nennt sich doch Methode oder?)

Damit ich das dann abspeichern kann, verwende ich das FileWriter. So stelle ich mir das bsp. vor:

FilerWriter dateiStream = new FileWriter ( "D:/test.txt", true);

String Station1 = Stat1.getText(); \\ Stat1 ist ein JTextfield

String Trenner = ";";

etc.:

Wenn alle Einträge (Datum, Kurs, Ein und Aus) einer Station erfasst sind, trenne ich dann die Zeile mit line.separator oder ähnliches.

Natürlich gehört da viel mehr Quelltext dazu. Aber was haltet Ihr von der Eingabe-Maske- und der Speicher-Idee?




Nächste Schritte, die ich später anschauen will:
- Ein Button verknüpt mit einem JTextfield, wo ich das Datum reinschreiben kann und dann generiert es die Kurse. 

- Jeder Kurs muss sein eigenes Fenster haben.

- Button, welcher kontrolliert, ob der Kurs gleich viele Einsteiger wie Aussteiger hat, speicher und den Kurs verschwinden lässt.


----------



## Marco13 (20. Jun 2012)

Wie ich schon angedeutet und ARadauer etwas weiter ausformuliert hat, ist es i.a. günstig, sich erstmal zu überlegen, was man eigentlich modellieren will. Da kann man (in erstern Näherung, in einfachen Fällen, zumindest um ein Gefühl zu bekommen oder sich einen Überblick zu verschafften) SEHR pragmatisch sowas runterschreiben wie

```
interface Route {
    Date getDate();
    List<Station> getStations();
}
interface Station {
    int getNumPassengersEntered();
    int getNumPassengersExited();
]
```
oder was auch immer, ggf. auch mit set/add-Methoden. Gleichzeitig (oder danach) kann man sich das passende GUI überlegen (da das hier eins der Hauptziele ist, kann man das gleich berücksichtigen).

Auf jeden Fall ist es stilistisch unschön, Dinge wie GUI und Speicherung zu vermischen. Also sowas wie

```
FilerWriter dateiStream = new FileWriter ( "D:/test.txt", true);
dateiStream.write(textField.getText());
```
sollte man eher vermeiden. Stattdessen gibt es irgendwo eine Klasse, die eine Methode anbietet wie

```
void writeRoute(Route route, OutputStream outputStream) { .. }
```
die sich um's Schreiben des Datenmodells kümmert.


----------



## ARadauer (20. Jun 2012)

also von der GUI direkt ins File? Würd ich nicht machen...
Variablen schreibt man klein...


----------



## Stefano (20. Jun 2012)

Nochmals Danke.

Dann lerne ich mal, was ein interface und outstream ist. 

lg


----------



## Stefano (25. Jun 2012)

Hallo zusammen

Ich mache extra kein neuer Topic auf, denn das ist bestimmt eine Frage, die schon oft beantwortet worden ist. Aber seid mir nicht, ich konnte mir nicht helfen.

Ich habe jetzt eine Klasse erstellt, wo der aktuelle Tag ermittelt wird und das habe ich auf ein JTextField namens tag speichern lassen. Nun möchte ich die Variable tag in einer anderen Klasse brauchen. Die Variable ist public static, aber funzen tut es nicht.

Hier mein Quelltext abgekürzt:


```
public class Kurse extends JFrame{
		private JButton but20, but21, but22, but23, but24, but25, back;
		static JTextField tag;
		private JPanel leer20, leer21;
		private String kurs;
		private ImageIcon img;
		private JLabel imglabel;

		public Kurse() {
			Date heutiger = new Date ();
			SimpleDateFormat myDateFormat =
			new SimpleDateFormat("dd.MM.yyyy, HH:mm:ss");

			tag = new JTextField (myDateFormat.format(heutiger));
			tag.setHorizontalAlignment(JTextField.CENTER);
```
 
*Die Variable tag will ich jetzt in der Klasse Eingaben brauche:*


```
public class Eingabe extends JFrame {
	private JLabel sta1, sta2, sta3, kurs, einsteiger, aussteiger, datum, strecke;
	private JTextField ein1, ein2, ein3, aus1, aus2, aus3;
	private JButton but1, but2;
	private ImageIcon img;
	private JLabel imglabel;
	private JPanel leer1, leer2, leer3, leer4, leer5;
	
	public Eingabe () {
Kurse day = new Kurse ();
		datum = new JLabel (datum.setText(getText(Kurse.tag)));
```

*getText wird rotmarkiert *und es kommt folgende Fehlermeldung:

The method getText(JTextField) is undefined for the type Eingabe

	at Eingabe.<init>(Eingabe.java:31)
	at FQ.main(FQ.java:8)

Irgendetwas stimmt mit getText nicht, muss ich Parameter einstellen?

Danke viel mals.


----------



## Marco13 (25. Jun 2012)

Nicht
getText(Kurse.tag)
sondern
Kurse.tag,getText()
aber das mit dem public static ist GANZ :autsch: -> Grundlagenbuch, vielleicht auch sowas wie http://www.java-forum.org/stichwort...ic-method-cant-referenced-static-context.html


----------



## Stefano (25. Jun 2012)

*wuahh ging schnell!  ahhh klaaar!! diese Formel hatte ich auch noch... wie peinlich! Besten Dank 
*



Als ich getText(Kurse.tag) mit Kurse.tag.getText() ersetzt habe, da ist auf einmal alles nachdem = rot geworden, und kaum habe ich dann datum.setText( weggenommen, so hat alles normal ausgesehen und es hat prima funktioniert.

Darf ich das so verstehen, dass datum.setText() bei der Variabel(initialisierung?) vollkommen überflüssig ist, denn in den folgenden Klammern kann ja nur etwas zum "get'ten" stehen kann. Set'ten kommt erst zum Zug, wenn etwas passieren soll. Actionlistener etc.. 

Verstehe ich das richtig?


----------



## XHelp (25. Jun 2012)

Stefano hat gesagt.:


> Darf ich das so verstehen, dass datum.setText() bei der Variabel(initialisierung?) vollkommen überflüssig ist, denn in den folgenden Klammern kann ja nur etwas zum "get'ten" stehen kann. Set'ten kommt erst zum Zug, wenn etwas passieren soll. Actionlistener etc..


Ich kommentiere das Ganze mit einem knappen: hääää?
Versuch mal die Aussage noch mal auf Deutsch zu formulieren, ohne es mit irgendwelchen coole, dir vermutlich nicht klaren und vor allem nicht existierenden Wörtern zu füllen.


----------



## Blindxantos (25. Jun 2012)

Stefano hat gesagt.:


> Vorhin habe ich es etwas verwirrlich beschrieben. Nochmals zusammengefasst: Ich brauche eine Eingabe-Maske, welche sich dann auch für den Export eignet.
> 
> Was empfiehlt ihr mir für Objekte auf der Eingabe-Maske? Wie würdet ihr dabei vorgehen?



Verstehe ich das richtig, dass du eine "(Windows)oberfläche" nach Android exportieren möchtest?

Wenn ja, dann: Das geht nicht  Die Androidbibliothek umfasst nicht die komplette Javabibliothek, sie besitzt z. B. keine AWT und Swingklassen, wurde dafür aber mit vergleichbaren Klassen ausgestattet. Die Logik an sich kannst du aber ohne Probleme exportieren, wenn du eine saubere Trennung zwischen GUI und Logik machst


----------



## Stefano (25. Jun 2012)

Das sollte überhaupt nicht cool oder so ähnlich rüberkommen. Mit "set'ten" dachte ich an einer set-Methode und mit "get'ten" ab einer get-Methode. Ich bin wirklich davon ausgegangen, dass sei hier noch üblich und ja, dennoch verständlich.

Jetzt anders formuliert und auf Deutsch: 

Darf ich das so verstehen, dass datum.setText() bei der Variabel(initialisierung?) vollkommen überflüssig ist, denn in den folgenden Klammern kann nur eine get-Methode stehen kann und eine set-Methode kommt erst zum Zug, wenn etwas passieren soll. Actionlistener etc..


----------



## XHelp (25. Jun 2012)

Naja, 2 Wörter auszutauschen ist nicht unbedingt das, worauf ich hinaus wollte. Deine ganze Frage ergibt nur bedingt Sinn:
1. Was haben irgendwelche Methoden mit Variableninitialisierung zu tun.
2. Wenn man das "(initialisierung?)" weglässt (was ja durch die Klammern möglich ist), dann ergibt der Satz noch weniger Sinn.
3. In "Klammern" stehen keine Methoden, sondern Werte. Wenn da "eine get-Methode steht", dann wird der *Rückgabewert* dieser Methode weitergereicht und nicht die Methode selbst.
4. ActionListener kann ich dazu auch nicht zuordnen. setText wird dann aufgerufen, wenn der Text gesetzt werden muss. Nicht mehr, nicht weniger.

Ich wollte also darauf hinaus, dass du ausführlicher und mit anderer Wortwahl versuchst zu verdeutlichen, was genau du meinst.


----------



## Stefano (26. Jun 2012)

@ XHelp

Ja, da gebe ich dir recht. Ich muss an meinem Schreibstil achten, das war schon immer ein Thema.

@ Blindxantos

Dass ich es nicht 1-zu-1 exportieren kann, habe ich es mir schon gedacht. Aber gut, dass der Sinn und die Logik gleich bleibt.

zu deiner Neugier, ich habe folgende Klassen erstellt, oder ich bin noch dran:

- Kurse
- Eingabe
- und eine public void zum Speichern.


----------



## Stefano (27. Jun 2012)

Ich bin wieder am Verzweifeln... 

Die Situation ist so, ich habe zirka 16 JButton und jedes öffnet die gleiche Klasse. Doch sobald ich auf eines gedrückt habe und das Fenster sich geöffnet hat, funktionieren die anderen nicht mehr. Bestimmt muss ich nur etwas verschieben, damit es klappt.
Könnt Ihr bitte mir sagen, was ich ändern soll?

Alle JButtons haben .addActionListener(instanz);


```
public class Event3 implements ActionListener {
			public void actionPerformed(ActionEvent e) {
				if(e.getSource() == but20){
					JOptionPane.showConfirmDialog(null, "Sind Sie sicher, dass Sie für am " + Kurse.tag.getText() + " Kurse generieren wollen?");
					but21.setText(tag.getText()+ "      " + but21.getText());
					but22.setText(tag.getText()+ "      " + but22.getText());
					but23.setText(tag.getText()+ "      " + but23.getText());
					but24.setText(tag.getText()+ "      " + but24.getText());
					but25.setText(tag.getText()+ "      " + but25.getText());
					but26.setText(tag.getText()+ "      " + but26.getText());
					but27.setText(tag.getText()+ "      " + but27.getText());
					but28.setText(tag.getText()+ "      " + but28.getText());
					but29.setText(tag.getText()+ "      " + but29.getText());
					but30.setText(tag.getText()+ "      " + but30.getText());
					but31.setText(tag.getText()+ "      " + but31.getText());
					but32.setText(tag.getText()+ "      " + but32.getText());
					but33.setText(tag.getText()+ "      " + but33.getText());
					but34.setText(tag.getText()+ "      " + but34.getText());
					but35.setText(tag.getText()+ "      " + but35.getText());
					but36.setText(tag.getText()+ "      " + but36.getText());	

					add(hinweg);
					add(leer20);
					add(but21);
					add(but22);
					add(but23);
					add(but24);
					add(but25);
					add(but26);
					add(but27);
					add(but28);
					add(leer22);
					add(rueckweg);
					add(but29);
					add(but30);
					add(but31);
					add(but32);
					add(but33);
					add(but34);
					add(but35);
					add(but36);

					validate();
					repaint();
					but20.setEnabled(false);			   					 
					}			
					
				if(e.getSource() == but21){
					Eingabe oeffnen_eingabe = new Eingabe ();
					oeffnen_eingabe.kurs.setText(but21.getText());
				}
				if(e.getSource() == but22){
					Eingabe oeffnen_eingabe = new Eingabe ();
					oeffnen_eingabe.kurs.setText(but22.getText());
				}
				if(e.getSource() == but23){
					Eingabe oeffnen_eingabe = new Eingabe ();
					oeffnen_eingabe.kurs.setText(but23.getText());
				}
				if(e.getSource() == but24){
					Eingabe oeffnen_eingabe = new Eingabe ();
					oeffnen_eingabe.kurs.setText(but24.getText());
				}
				if(e.getSource() == but25){
					Eingabe oeffnen_eingabe = new Eingabe ();
					oeffnen_eingabe.kurs.setText(but25.getText());
				}				
				if(e.getSource() == but26){
					Eingabe oeffnen_eingabe = new Eingabe ();
					oeffnen_eingabe.kurs.setText(but27.getText());
				}	
				if(e.getSource() == but28){
					Eingabe oeffnen_eingabe = new Eingabe ();
					oeffnen_eingabe.kurs.setText(but28.getText());
				}	
				if(e.getSource() == but29){
					Eingabe oeffnen_eingabe = new Eingabe ();
					oeffnen_eingabe.kurs.setText(but29.getText());
				}
				if(e.getSource() == but30){
					Eingabe oeffnen_eingabe = new Eingabe ();
					oeffnen_eingabe.kurs.setText(but30.getText());							
				}
				if(e.getSource() == but31){
					Eingabe oeffnen_eingabe = new Eingabe ();
					oeffnen_eingabe.kurs.setText(but31.getText());
				}
				if(e.getSource() == but32){
					Eingabe oeffnen_eingabe = new Eingabe ();
					oeffnen_eingabe.kurs.setText(but32.getText());
				}
				if(e.getSource() == but33){
					Eingabe oeffnen_eingabe = new Eingabe ();
					oeffnen_eingabe.kurs.setText(but33.getText());					
				}
				if(e.getSource() == but34){
					Eingabe oeffnen_eingabe = new Eingabe ();
					oeffnen_eingabe.kurs.setText(but34.getText());
				}
				if(e.getSource() == but35){
					Eingabe oeffnen_eingabe = new Eingabe ();
					oeffnen_eingabe.kurs.setText(but35.getText());
				}
				if(e.getSource() == but36){
					Eingabe oeffnen_eingabe = new Eingabe ();
					oeffnen_eingabe.kurs.setText(but36.getText());					    
				}
			}
```


Die zwei Buttons auf dem anderem JFrame. Wahrscheinlich hat die Methode dispose() auch was damit zu tun...


```
private class Event implements ActionListener {
	 public void actionPerformed(ActionEvent e) {
	       
		 	Kurse verstecken = new Kurse ();
		 
		 	if(e.getSource() == speichern){
	        	
	           	JOptionPane.showMessageDialog(null, "gespeichert");
	        	}
	        if(e.getSource() == zurueck){
	        	dispose();
	        }
	 }
	}
```


----------



## Firephoenix (27. Jun 2012)

Der ActionListener oben sieht so aus als könnte man ihn super auf einzelne Listener aufteilen die man den buttons zuweisen kann.

Für sowas wie Variable a1 a2 a3 a4 vom gleichen Typ kann man auch arrays verwenden.

Was macht diese Zeile?

```
Kurse verstecken = new Kurse ();
```

Deine Dialoge haben keinerlei einfluss auf das Programm, egal was der Benutzer macht.

Ein ausführbares Beispiel wäre ebenfalls hilfreicher.

Gruß


----------



## Stefano (27. Jun 2012)

Firephoenix hat gesagt.:


> Was macht diese Zeile?
> 
> ```
> Kurse verstecken = new Kurse ();
> ...



Erstmals danke für deine Unterstützung.

Tipps und Vorschläge sowie Verbesserungen sind mir immer willkommen =)

Wie meinst du das, die Dialoge haben kein Einfluss? Der Benutzer kann bis jetzt nur das Datum anpassen. Tipps sind mir sehr willkommen 

Ich hatte Fehler und folgender Quelltext habe ich geschrieben, um zu testen. Wie du auch gemerkt hast, ist dieser Quelltext umsonst.


```
Kurse verstecken = new Kurse ();
```

Hier mein ganzer Quelltext

main


```
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;

public class FQ {

	public static void main(String[] args) {
		Kurse start = new Kurse ();
		start.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		start.setSize(500, 500);
		start.setVisible(true);
	}
		
		
	}
```

Kurse


```
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.*;

	public class Kurse extends JFrame{
		public static JButton but20, but21, but22, but23, but24, but25, but26, but27, 
						      but28, but29, but30, but31, but32, but33, but34, but35, but36, back;
		public static JTextField tag;
		private JPanel leer20, leer21, leer22;
		private String kurs;
		private ImageIcon img;
		private JLabel imglabel, hinweg, rueckweg;

		public Kurse() {

			super("Kurse zum Erfassen");

			setLayout(new GridLayout(0,1));

			but20 = new JButton ("Kurse generieren");
			but21 = new JButton ("Kurs 41014");
			but22 = new JButton ("Kurs 41018");
			but23 = new JButton ("Kurs 41022");
			but24 = new JButton ("Kurs 41026");
			but25 = new JButton ("Kurs 41028");
			but26 = new JButton ("Kurs 41030");
			but27 = new JButton ("Kurs 41032");
			but28 = new JButton ("Kurs 41034");
			but29 = new JButton ("Kurs 41011");
			but30 = new JButton ("Kurs 41015");
			but31 = new JButton ("Kurs 41019");
			but32 = new JButton ("Kurs 41023");
			but33 = new JButton ("Kurs 41027");
			but34 = new JButton ("Kurs 41029");
			but35 = new JButton ("Kurs 41031");
			but36 = new JButton ("Kurs 41033");
			back = new JButton ("zurück");
			
			Date heutiger = new Date ();
			SimpleDateFormat myDateFormat =
			new SimpleDateFormat("dd.MM.yyyy");

			tag = new JTextField (myDateFormat.format(heutiger));
			tag.setHorizontalAlignment(JTextField.CENTER);

			leer20 = new JPanel ();
			leer21 = new JPanel ();
			leer22 = new JPanel ();	
			
			img = new ImageIcon ("logo.jpg");
			imglabel = new JLabel (img, JLabel.RIGHT);
			
			hinweg = new JLabel ("Zweisimmen - Boltigen");
			rueckweg = new JLabel ("Boltigen - Zweisimmen");
			
			Event3 instanz = new Event3 ();
			but20.addActionListener(instanz);
			but21.addActionListener(instanz);
			but22.addActionListener(instanz);
			but23.addActionListener(instanz);
			but24.addActionListener(instanz);
			but25.addActionListener(instanz);
			but26.addActionListener(instanz);
			but27.addActionListener(instanz);
			but28.addActionListener(instanz);
			but29.addActionListener(instanz);
			but30.addActionListener(instanz);
			but31.addActionListener(instanz);
			but32.addActionListener(instanz);
			but33.addActionListener(instanz);
			but34.addActionListener(instanz);
			but35.addActionListener(instanz);
			but36.addActionListener(instanz);


			add(imglabel);
			add(leer21);
			add(tag);
			add(but20);
		}

		public class Event3 implements ActionListener {
			public void actionPerformed(ActionEvent e) {
				if(e.getSource() == but20){
					JOptionPane.showConfirmDialog(null, "Sind Sie sicher, dass Sie für am " + Kurse.tag.getText() + " Kurse generieren wollen?");
					but21.setText(tag.getText()+ "      " + but21.getText());
					but22.setText(tag.getText()+ "      " + but22.getText());
					but23.setText(tag.getText()+ "      " + but23.getText());
					but24.setText(tag.getText()+ "      " + but24.getText());
					but25.setText(tag.getText()+ "      " + but25.getText());
					but26.setText(tag.getText()+ "      " + but26.getText());
					but27.setText(tag.getText()+ "      " + but27.getText());
					but28.setText(tag.getText()+ "      " + but28.getText());
					but29.setText(tag.getText()+ "      " + but29.getText());
					but30.setText(tag.getText()+ "      " + but30.getText());
					but31.setText(tag.getText()+ "      " + but31.getText());
					but32.setText(tag.getText()+ "      " + but32.getText());
					but33.setText(tag.getText()+ "      " + but33.getText());
					but34.setText(tag.getText()+ "      " + but34.getText());
					but35.setText(tag.getText()+ "      " + but35.getText());
					but36.setText(tag.getText()+ "      " + but36.getText());	

					add(hinweg);
					add(leer20);
					add(but21);
					add(but22);
					add(but23);
					add(but24);
					add(but25);
					add(but26);
					add(but27);
					add(but28);
					add(leer22);
					add(rueckweg);
					add(but29);
					add(but30);
					add(but31);
					add(but32);
					add(but33);
					add(but34);
					add(but35);
					add(but36);

					validate();
					repaint();
					but20.setEnabled(false);			   					 
					}			
					
				
				
				if(e.getSource() == but21){
					Eingabe oeffnen_eingabe = new Eingabe ();
					oeffnen_eingabe.kurs.setText(but21.getText());
				}
				if(e.getSource() == but22){
					Eingabe oeffnen_eingabe = new Eingabe ();
					oeffnen_eingabe.kurs.setText(but22.getText());
				}
				if(e.getSource() == but23){
					Eingabe oeffnen_eingabe = new Eingabe ();
					oeffnen_eingabe.kurs.setText(but23.getText());
				}
				if(e.getSource() == but24){
					Eingabe oeffnen_eingabe = new Eingabe ();
					oeffnen_eingabe.kurs.setText(but24.getText());
				}
				if(e.getSource() == but25){
					Eingabe oeffnen_eingabe = new Eingabe ();
					oeffnen_eingabe.kurs.setText(but25.getText());
				}				
				if(e.getSource() == but26){
					Eingabe oeffnen_eingabe = new Eingabe ();
					oeffnen_eingabe.kurs.setText(but27.getText());
				}	
				if(e.getSource() == but28){
					Eingabe oeffnen_eingabe = new Eingabe ();
					oeffnen_eingabe.kurs.setText(but28.getText());
				}	
				if(e.getSource() == but29){
					Eingabe oeffnen_eingabe = new Eingabe ();
					oeffnen_eingabe.kurs.setText(but29.getText());
				}
				if(e.getSource() == but30){
					Eingabe oeffnen_eingabe = new Eingabe ();
					oeffnen_eingabe.kurs.setText(but30.getText());							
				}
				if(e.getSource() == but31){
					Eingabe oeffnen_eingabe = new Eingabe ();
					oeffnen_eingabe.kurs.setText(but31.getText());
				}
				if(e.getSource() == but32){
					Eingabe oeffnen_eingabe = new Eingabe ();
					oeffnen_eingabe.kurs.setText(but32.getText());
				}
				if(e.getSource() == but33){
					Eingabe oeffnen_eingabe = new Eingabe ();
					oeffnen_eingabe.kurs.setText(but33.getText());					
				}
				if(e.getSource() == but34){
					Eingabe oeffnen_eingabe = new Eingabe ();
					oeffnen_eingabe.kurs.setText(but34.getText());
				}
				if(e.getSource() == but35){
					Eingabe oeffnen_eingabe = new Eingabe ();
					oeffnen_eingabe.kurs.setText(but35.getText());
				}
				if(e.getSource() == but36){
					Eingabe oeffnen_eingabe = new Eingabe ();
					oeffnen_eingabe.kurs.setText(but36.getText());					    
				}
			}
			
		}
	}
```

Eingabe


```
import java.awt.GridLayout;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JTextField;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JOptionPane;
import javax.swing.JFrame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; 

public class Eingabe extends JFrame {
	public static JLabel sta1, sta2, sta3, kurs, einsteiger, aussteiger, datum, strecke;
	private JTextField ein1, ein2, ein3, aus1, aus2, aus3;
	private JButton speichern, zurueck;
	private ImageIcon img;
	private JLabel imglabel;
	private JPanel leer1, leer2, leer3, leer4, leer5;
	
	public Eingabe () {
		super("FQ SEZ");
		setLayout(new GridLayout(0,3));
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(500, 500);
		setVisible(true); 
		
		img = new ImageIcon ("logo.jpg");
		imglabel = new JLabel (img, JLabel.RIGHT);
		
		strecke = new JLabel ("Zweisimmen - Boltigen");
		
		Kurse day = new Kurse ();
		datum = new JLabel (Kurse.tag.getText());	
		kurs = new JLabel ();
							
		einsteiger = new JLabel("Einsteiger");
		aussteiger = new JLabel("Aussteiger");		
		
		sta1 = new JLabel ("1. Station");		
		sta2 = new JLabel ("2. Station");
		sta3 = new JLabel ("3. Station");
				
		ein1 = new JTextField ();
		ein2 = new JTextField ();
		ein3 = new JTextField ();
		
		aus1 = new JTextField ();
		aus2 = new JTextField ();
		aus3 = new JTextField ();
		
		leer1 = new JPanel ();
		leer2 = new JPanel ();
		leer3 = new JPanel ();
		leer4 = new JPanel ();
		speichern = new JButton("speichern");
		zurueck = new JButton("zurück");
		
		Event button = new Event();		
		speichern.addActionListener(button);
		zurueck.addActionListener(button);
		
		add(leer1);
		add(leer2);
		add(imglabel);
		
		add(strecke);
		add(datum);
		add(kurs);
				
		add(leer3);
		add(einsteiger);
		add(aussteiger);
		
		add(sta1);
		add(ein1);
		add(aus1);
		
		add(sta2);
		add(ein2);
		add(aus2);
		
		add(sta3);		
		add(ein3);		
		add(aus3);
		
		add(zurueck);
		add(leer4);
		add(speichern);		
	}

private class Event implements ActionListener {
	 public void actionPerformed(ActionEvent e) {
	       	 
		 	if(e.getSource() == speichern){
	        	
	           	JOptionPane.showMessageDialog(null, "gespeichert");
	        	}
	        if(e.getSource() == zurueck){
	        	dispose();
	        	}
	 }
	}
	
}
```

Besten Dank und Gruss


----------



## Stefano (6. Jul 2012)

Danke Firephoenix für das Beispiel, welches du mir geliefert hast.

Ich habe es jetzt meine Klasse Eingabe ähnlich wie dein Beispiel aufgebaut. Jedoch stolpere ich bereits über der ersten Schleife und bekomme sogar eine Fehlermeldung.

*Fehlermeldung*


```
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 11
	at Eingabe.stationHinfahrtJLabel(Eingabe.java:49)
	at Eingabe.<init>(Eingabe.java:30)
	at Frequenzen.main(Frequenzen.java:5)
```

*Klasse*


```
private String[] stationHinfahrt = {"Zweisimmen, Bahnhof", "Zweisimmen, Forellensee", "Zweisimmen, Spitz Mannried", "Zweisimmen, Burg Mannried", "Zweisimmen, Cholplatz", "Garstatt", "Weissenbach, Bahnhof", "Weissenbach, Dorf", "Eschi, Dorf", "Reidenbach", "Boltigen, Bahnhof"};

private JLabel[] stationHinfahrtJLabel, stationRueckfahrtJLabel;

	private void stationHinfahrtJLabel() {
	    //genauso viele jlabel wie stationen
	    stationHinfahrtJLabel = new JLabel[stationHinfahrt.length];
	   
	    for (int i = 0; i <= stationHinfahrtJLabel.length; i++) {
	    String labelText = stationHinfahrt[i];
	    JLabel stationLabel = new JLabel(labelText);
	    stationHinfahrtJLabel[i] = stationLabel;
```

Ich versuche mal die Schleife zu erklären. Bitte korrigiert mich.


```
stationHinfahrtJLabel = new JLabel[stationHinfahrt.length];
```

Dieser Quelltext erstellt ein Array mit gleich vielen Plätze (0,1,2,3,...) wie das Array stationHinfahrt.


```
for (int i = 0; i <= stationHinfahrtJLabel.length; i++) {
	    String labelText = stationHinfahrt[i];
	    JLabel stationLabel = new JLabel(labelText);
	    stationHinfahrtJLabel[i] = stationLabel;
```

Die Schleife läuft bis es keine Plätze [0,1,2,3,..] im Array stationHinfahrtJLabel gibt.
Bei jedem Durchlauf wird ein String mit dem Wert, der im Array stationHinfahrt (z.B. Zweisimmen, Bahnhof) gespeichert ist, gespeichert. Dann wird dieser String in ein JLabel gespeichert und anschliessend im JLabel stationHinfahrtJLabel gespeichert, welcher ein auch Array ist. 

Es fällt mir nicht gerade leicht die Schleife zu verstehen und schon gar nicht sie zu erklären.

Ich hoffe, ich habe mich dennoch klar ausgedrückt.

Freundlicher Gruss

Stefano


----------



## Firephoenix (6. Jul 2012)

```
for (int i = 0; i <= stationHinfahrtJLabel.length; i++) {
        String labelText = stationHinfahrt[i];
        JLabel stationLabel = new JLabel(labelText);
        stationHinfahrtJLabel[i] = stationLabel;
```

klassischer array-fehler 

wenn du über ein komplettes array willst reicht in 90% der fälle sowas:

```
for(int i = 0; i < array.length; i++){
    //irgendwas mit array[i] anstellen
}
```

wenn dein Array z.b. länge 3 hat, dann hast du dort elemente [0] [1] und [2].
length ist aber 3.
wenn die schleife jetzt bis <= 3 läuft macht sie mit i=3 noch einen durchlauf und versucht auf [3] zuzugreifen -> die bekannte exception fliegt.

Gruß


----------



## Stefano (6. Jul 2012)

ahh ja klar, ist eig. logisch... Besten Dank Firephoenix. =)

Nun habe ich weiteres Problem - das Layout. 

Ich muss einen Weg finden, dass GUI so aussehen zu lassen.

stationLabel[0], einsteigerJTextField[0], aussteigerJTextField[0]
stationLabel[1], einsteigerJTextField[1], aussteigerJTextField[1]
stationLabel[2], einsteigerJTextField[2], aussteigerJTextField[2]

Ich habe folgende Ideen, doch keine habe ich realisieren können. Ein Teil wird immer rot unterstrichen. -.-'

*1. alles primitiverweise hinzuschreiben:*

add(stationLabel[0]);
add(einsteigerJTextField[0]);
add(aussteigerJTextField[0]);

add(stationLabel[1]);
add(einsteigerJTextField[1]);
add(aussteigerJTextField[1]);

add(stationLabel[2]);
add(einsteigerJTextField[2]);
add(aussteigerJTextField[2]);

Das geht auch irgendwie nicht...! Ich bin mir sicher nicht, es liegt an den private void... 

*2. private void adden*


```
private void adden() {
		stationHinfahrtJLabel();
		add(stationLabel); //stationLabel ist rot
		
		einsteigerJTextField();
		add(einsteigerJTextField); //add ist rot
		
		aussteigerJTextField();
		add(aussteigerJTextField); //add ist rot[code=Java]

[B]3. Schleife[/B]

Selber Fehler wie oben, die Referenz ist nicht möglich.

Was empfiehlt ihr mir? Firephoenix du bist bestimmt für eine Schleife. Ist es überhaupt möglich?  

Lieber Gruss
```


----------



## Stefano (6. Jul 2012)

*meine ganze Klasse*


```
import java.awt.Container;
import java.awt.GridLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;


public class Eingabe extends JFrame{
	
	private String[] stationHinfahrt = {"Zweisimmen, Bahnhof", "Zweisimmen, Forellensee", "Zweisimmen, Spitz Mannried", "Zweisimmen, Burg Mannried", "Zweisimmen, Cholplatz", "Garstatt", "Weissenbach, Bahnhof", "Weissenbach, Dorf", "Eschi, Dorf", "Reidenbach", "Boltigen, Bahnhof"};
	
	private String[] stationRueckfahrt = {"Boltigen, Bahnhof", "Reidenbach", "Eschi, Dorf", "Weissenbach, Dorf", "Weissenbach, Bahnhof", "Garstatt", "Zweisimmen, Cholplatz", "Zweisimmen, Burg Mannried", "Zweisimmen, Spitz Mannried", "Zweisimmen, Forellensee", "Zweisimmen, Bahnhof"};
	
	private JLabel[] stationHinfahrtJLabel, stationRueckfahrtJLabel;
	
	private JTextField[] einsteigerJTextField, aussteigerJTextField;
	
	private JButton zurueck = new JButton("zurück");
	
	private JButton speichern = new JButton("zurück");
	

	
	public Eingabe() {
		super("Eingabe Kurse");
		
		getContentPane().setLayout(new GridLayout(0, 3));
		
		Kopf();
		stationHinfahrtJLabel();
		einsteigerJTextField();
		aussteigerJTextField();
		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(500, 500);
        setVisible(true);
        }

	private void Kopf() {
		
	}
	
	private void stationHinfahrtJLabel() {
	    //genauso viele jlabel wie stationen
	    stationHinfahrtJLabel = new JLabel[stationHinfahrt.length];
	   
	    for (int i = 0; i < stationHinfahrtJLabel.length; i++) {
	    String labelText = stationHinfahrt[i];
	    JLabel stationLabel = new JLabel(labelText);
	    stationHinfahrtJLabel[i] = stationLabel;
	    add(stationLabel);
	    }
	}
	
	private void stationRueckfahrtJLabel() {
		
	    stationRueckfahrtJLabel = new JLabel[stationRueckfahrt.length];
		   
	    for (int i = 0; i < stationRueckfahrtJLabel.length; i++) {
	    String labelText = stationRueckfahrt[i];
	    JLabel stationLabel = new JLabel(labelText);
	    stationRueckfahrtJLabel[i] = stationLabel;
	    add(stationLabel);
	    }
	}
	
	private void einsteigerJTextField() {
		
		einsteigerJTextField = new JTextField[stationRueckfahrt.length];
	    		   
	    for (int i = 0; i < einsteigerJTextField.length; i++) {
	    //String labelText = stationHinfahrt[i];
	    JTextField einsteigerJTextField = new JTextField();
	    add(einsteigerJTextField);
	    
	    }
	}     	
	
	private void aussteigerJTextField() {
		
		aussteigerJTextField = new JTextField[stationRueckfahrt.length];
		   
	    for (int i = 0; i < einsteigerJTextField.length; i++) {
	    //String labelText = stationHinfahrt[i];
	    JTextField aussteigerJTextField = new JTextField();
	    add(aussteigerJTextField);
	    }
	}
	
	private void zurueck() {
		
		//oeffne Kurse
	}
	
	private void kursVerstecken() {
		
	}
	
	private void eingabenSpeichern() {
	 
	 //in txt datei
	 //Tag;Kurs;Station;Einsteiger;Aussteiger; 
	 //kursVerstecken()
	}

	private void adden() {
		stationHinfahrtJLabel();
		add(stationLabel);
		
		einsteigerJTextField();
		add(einsteigerJTextField);
		
		aussteigerJTextField();
		add(aussteigerJTextField);
			
		}
		
	}
```


----------



## ARadauer (6. Jul 2012)

ich würd mich mal ein bisschen mit den Grundlagen beschäftigen...

es hat schon seinen grund wenn es rot ist... stationLabel ist an dieser Stelle nicht sichtbar...

Und einsteigerJTextField ist ein Array


----------



## Stefano (6. Jul 2012)

Sichtbar, sehr gutes Stichwort 

Problem gelöst:

Die Variable war innerhalb von private void deklariert worden und deswegen konnte ich sie ausserhalb nicht referenzieren 

jetzt habe ich sie ausserhalb deklariert und innerhalb von public void initialisiert. 

funktioniert 

Ich mache mich jetzt an der Schleife.

Ich wünsche ein schönes Wocheneende =)


----------

