# Verständnisfrage Syntax: frame.getContentPane().add(button)



## E.coli (16. Sep 2009)

Hi,

vor kurzem habe ich angefangen mich in Java einzuarbeiten. In meinem Buch, im swing-Teil, bin ich dabei auf folgende Codezeile gestossen:

```
frame.getContentPane().add(button)
```
Dabei verstehe ich diese Syntax noch nicht wirklich, da hier an eine Methode/Funktion eine weitere Methode angehängt wird. Erst kommt ein Objekt, dann eine Methode, dieser Teil ist für mich klar, aber dann wird erneut eine Methode angehängt.
Was diese Codezeile bewirken soll weiss ich zwar, nur die Syntax will mir einfach nicht in den Kopf.

Wäre schön, wenn jemand meinem Verständnis auf die Sprünge helfen könnte.

Grüsse
E. coli

edit: Tippfehler korrigiert setContentPane zu getContentPane


----------



## Spacerat (16. Sep 2009)

E.coli hat gesagt.:


> ```
> frame.setContentPane().add(button)
> ```


Vllt. wirds' verständlicher, wenn man den winzigen Druckfehler korregiert:
	
	
	
	





```
frame.getContentPane().add(button)
```
In Swing werden Kindkomponenten, hier ein Button, nicht direkt an die Vater- bzw. Mutterkomponenten angehängt, sondern an eine spezielle Inhalts-Komponente, welche man mit "getContentPane()" bekommt.


----------



## 0x7F800000 (16. Sep 2009)

E.coli hat gesagt.:


> ```
> frame.setContentPane().add(button)
> ```


Sieht nach einem Tippfehler aus. Sollte wohl "getContentPane()" heißen. Was die Menthoden im einzelnen tun, kann  man der API entnehmen: JFrame (Java Platform SE 6)

edit: ich raff's nicht, hab ich den mist echt länger als eine Minute lang eingetippt? Bin ich lahm^^


----------



## E.coli (16. Sep 2009)

Sorry, hab einen dummen Tippfehler eingebaut.

Das war mein Fehler. Im Buch steht es richtig als getContentPane. Hab meinen Fehler auch korrigiert.

Was mir nicht ganz klar werden will ist die Schreibweise, dass eine Methode an eine andere Methode "angehängt" wird. Die Methode muss doch in einer Klasse stecken, die instanziert wird. Aber wie soll das hier gehen?

Danke für die bisherigen Antworten.


----------



## Schandro (16. Sep 2009)

der Rückgabewert von _getContentPane()_ ist eine Instanz vom Typ _Container_ (siehe API). Auf diese Instanz wird _add _aufgerufen.


----------



## Marco13 (16. Sep 2009)

frame.[hier können alle Methoden aufgerufen werden, die der 'frame' bietet]
frame.getContentPane().[hier können alle Methoden aufgerufen werden, die die 'contentPane' bietet]

Man könnte auch schreiben
Container container = frame.getContentPane();
container.add(button);
aber
frame.getContentPane().container.add(button);
spart die überflüssige "Container"-Variable...

edit: ich raff's nicht, hab ich den mist echt länger als zwei Minuten lang eingetippt? Bin ich lahm^^


----------



## Painii (16. Sep 2009)

Dein Code macht das ähnlich wie das:

```
Container cp = frame.getContentPane();
cp.add(button);
```
Da du weisst dass die getContentPane() einen Container gibt, kannst du auf diesem Container alle Funktionen aufrufen die ein Container so hat.

Für JFrame geht auch einfach:

```
frame.add(button)
```



			
				api hat gesagt.:
			
		

> As a conveniance add and its variants, remove and setLayout have been overridden to forward to the contentPane as necessary. This means you can write:
> 
> frame.add(child);



edit: Marco13, ich bin langsamer!


----------



## E.coli (16. Sep 2009)

Super - Danke euch!

Jetzt verstehe ich die Schreibweise. Das add(button) wird also auf den Rückgabewert von frame.getContentPane() angewendet.

Vielen Dank!


----------



## Painii (16. Sep 2009)

E.coli hat gesagt.:


> Jetzt verstehe ich die Schreibweise. Das add(button) wird also auf den Rückgabewert von frame.getContentPane() angewendet.


Genau so.

Und jetzt einmal auf "Frage offen" klicken am Threadende


----------



## E.coli (16. Sep 2009)

Danke für den Hinweis!:toll:


----------



## 0x7F800000 (16. Sep 2009)

Painii hat gesagt.:


> Und jetzt einmal auf "Frage offen" klicken am Threadende


Was ist das denn für ein selztsamer name für diesen Knopf? ???:L


----------



## eRaaaa (16. Sep 2009)

da gibts glaub ich im verbesserungsvorschlag-thread schon einige diskussionen drüber


----------

