/*
P R O G R A M M B E S C H R E I B U N G
1)
Es wird das Fenster MyFenster erzeugt und auf den Bildschirm gebracht
In diesem Fenster wird eine Zeichenfläche (Panel) erstellt.
In dieser Zeichenfläche werden 2 Labels, 2 Buttons (Schalter) und 
2 Textfelder erstellt.
In das Textfeld kann Text eingegeben werden, wobei dieser noch
nicht verarbeitet wird.

2) Layout
a)
Zusätzlich wird ein Layout (2 Zeilen, 3 Spalten) für diese Zeichenfläche 
erstellt.
Ein Layout ist eine Vorgabe, wie die grafischen Komponenten innerhalb
eines Panels bzw. eines Fensters angeordnet werden (z.B. wenn sie mit
add hinzugefügt werden).
Hier ist dieses Layout ein sogenanntes GridLayout, in dem die
Elemente zeilenweise eingefügt werden.


Layouts Besonderheiten:
b) 
Wenn man mit:
myGL62  = new GridLayout(6,2);
mycont.setLayout(myGL62);
6 Zeilen und 2 Spalten vorgibt,
und dann nicht alle 6*2=12 Elemente befüllt,
sondern z.B. (durch 2 add Befehle) nur 2 Elemente 
dann geschieht nicht das Gewünschte.
(offensichtlich gruppiert dann Java um. Man muss also alle Elemente befüllen).
Deshalb befüllt man den Rest mit DummyLabels.

c) 
Warum kann nicht nur ein Dummylabel verwendet werden?
(das man explizit erstellt und dem man einen Namen gibt, wie z.B:
JLabel myDummyLabel = new JLabel())
Weil beim Aufruf einer Methode (z.B. add) dieses DummyLabel 
verändert wird.
Und wenn auf dieses veränderte DummyLabel wieder die Methode
add angewendet wird, ist dies etwas anderes, wenn man für jedes
add ein anderes DummyLabel verwendet.

D.h. wie folgt vorgehen:
Wenn man folgenden Parameter in add benutzt:
new JLabel()
dann wird bei jedem Aufruf ein _neues_ (nicht mehr referenzierbares)
Jlabel erstellt. Das ist gut so, weil man dieses DummyLabel auch 
nicht mehr benötigt.

Zitat Hubert Partl:
Jedes Komponenten-Objekt kann nur an 1 Stelle in 1 Container stehen,
d.h. der add-Befehl aendert die Eigenschaften von dummyLabel1,
und er aendert sogar die Eigenschaften von myp26, indem er ein
remove auf das vorherige add macht.
Das steht alles in der Online-Doku von add() bzw. addImpl() 
in der Klasse Container:
"Adds the specified component to this container at the specified index. 
...
If the component is not an ancestor of this container and has a non-null
parent, it is removed from its current parent before it is added to this
container." 
*/

import java.awt.*;
import javax.swing.*;

// Hier wird ein Objekt der selbstgebastelten Klasse MyFenster erzeugt
public class MainFenster12 {
	public static void main(String[] args) {
		MyFenster myF = new MyFenster();
		myF.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}

// Ein Frame ist ein Fenster bzw. Fenstersegment
// Es ist nach seiner Erzeugung zuerst anfänglich unsichtbar.
// Hier wird die von JFrame abgeleitete Klasse MyFenster gebastelt, die 
// damit die ganze Leistungsfähigkeit von JFrame erbt.
class MyFenster extends JFrame{
	// Buttons (Schalter) deklarieren
	private JButton myB1, myB2;
	// Textfelder deklarieren
	private JTextField myT1, myT2;
	// Labels deklarieren
	private JLabel myL1, myL2;
	// Stelle in MyFenster deklarieren, an die montiert wird.	
	private Container myCont;
	// Layout
	private GridLayout myGL34;

	// Konstruktor
	public MyFenster(){
		// Erzeugt jeweils ein Button 
		myB1=new JButton("Go");
		myB2=new JButton("Go");
		// Erzeugt jeweils ein einzeiliges Textfeld mit dem vorgegebenen
		// Text und der vorgegebenen Spaltenzahl. Dieser Text kann 
		// (im Gegensatz zu einem Label) editiert werden
		myT1=new JTextField("hier eingeben",30);
		myT2=new JTextField("Eingabe hier",30);
		// Erzeugt jeweils ein Label (Beschriftung) mit dem vorgegebenen 
		// Text Dieser Text kann (im Gegensatz zu einem Textfeld) nicht 
		// editiert werden
		myL1=new JLabel("Euro --> Dollar");
		myL2=new JLabel("Dollar --> Euro");
		// Liefert die Stelle in MyFenster, an die montiert wird.
		myCont = getContentPane();
		// Erzeugt ein Layout
		myGL34 = new GridLayout(3,4);
		// Ordnet das Layout dem Container myCont zu und 
		// "formatiert" ihn damit.
		myCont.setLayout(myGL34);
		// Montiert die grafischen Komponenten in die Zeichenfläche
		myCont.add(myL1);
		myCont.add(myT1);
		myCont.add(myB1);
		myCont.add(new JLabel());		
		myCont.add(myL2);
		myCont.add(myT2);
		myCont.add(myB2);
		myCont.add(new JLabel());		
		myCont.add(new JLabel());
		myCont.add(new JLabel());		
		myCont.add(new JLabel());
		myCont.add(new JLabel());		
		// Fensterüberschrift festlegen
		setTitle("Meine Zeichnung");
		// Koordinaten des linken, oberen Ecks des Fensters festlegen
		// Koordinate x = 30, Koordinate y = 60.		
		setLocation(30,60);
		// Die Breite des Fensters in x-Richtung = 600
		// Die Breite des Fensters in y-Richtung = 400		
		setSize(600,400);
		// Macht das Fenster sichtbar
		setVisible(true);
	}
}





