# JTabbedPane - Zugriff auf die Elemente eines Tabs



## odysseus (15. Mrz 2004)

hi.

ich verwende ein JTabbedPane, das hinzufügen und entfernen von tabs ist kein problem.
aber wie greife ich auf die elemente auf einem Tab zu ?

ich hab z.b. 10 geöffnete Tabs, und auf jedem Tab liegt eine JTextArea. ich will nun steuern in welchem Tab ein bestimmter Text angehängt werden soll!





```
public void print(String pTab, String pMsg) {
//pTab ist der Title des Tabs, um genau einen Tab anzusprechen
//pMsg ist der Text den ich an die JTextArea des Tabs anhängen will

		gui.tabbedPane.getComponent(gui.tabbedPane.indexOfTab(pTab)).??????????????????.append(pMsg + "\n");
	}
```

wer kann mir helfen ?


----------



## Beni (15. Mrz 2004)

Angenommen du hast so etwas:
	
	
	
	





```
JTabbedPane tabbedPane = new JTabbedPane();

    tabbedPane.addTab( "tab", new JTextArea() );

    Component c = tabbedPane.getComponent( tabbedPane.indexOfTab("tab"));
```

Dann ist _c_ die TextArea, du musst nur noch einen cast machen:
	
	
	
	





```
TextArea area = (TextArea)c;
```

Aber es wäre besser, wenn du die TextAreas z.B. in einer Hashtable speicherst. Das wäre flexibler, wenn du die GUI mal ändern willst.

Erstellen:
	
	
	
	





```
Hashtable hash = ...
JTextArea textArea = ...
hash.put( "tab", textArea );
```

Auslesen:
	
	
	
	





```
JTextArea textArea = (JTextArea)hash.get( "tab" );
```

mfg Beni


----------



## odysseus (15. Mrz 2004)

danke für Deinen Vorschlag.
ich hatte mein Beispiel jetzt etwas vereinfacht, weil es mir darum ging die elemente auf dem Tab anzusprechen.
also genau genommen, liegen auf dem Tab noch mehr Sachen als die JTextArea.

- die JTextArea liegt in einem JScrollPane
- und über der JTextArea liegt noch ein JLabel

einen screenshot gibts hier:

http://sulay.webgater.de/fiqn/screen.php

in Deinem Beispiel fügst Du den Tab als JTextArea hinzu, ich habe den Tab als JPanel hinzugefügt, um die Elemente darauf zu positionieren.


```
tabbedPane.addTab("test", lPanel);
```


Um jetzt auf alles zugreifen zu können, gehe ich so vor:

Jpanel << tabbedPane.getComponentAt("test")

dann hab ich den JPanel, jetzt will ich die JTextArea auf dem JPanel.

mit getComponent(???) kann ich jetzt die Elemente des JPanels kriegen, z.b. das Scrollpane. Allerdings weiss ich nicht wie ich vom Scrollpane zur JtextArea komme, und ich glaube die Elemente mit Index zu holen ist keine gute Lösung, weil das nicht mehr funktionieren würde sobald ich mal ein neues Element einfüge...

hast Du einen Vorschlag ?


----------



## odysseus (15. Mrz 2004)

ich probier das mal mit der hashtable. das ist ja eigentlich ein kleiner trick, um einen zugriff zu ermöglichen den JTabbedPane von selber nicht hat, oder ??


----------



## Guest (17. Mrz 2004)

Prinzipiell wäre es ja denkbar folgendes zu machen.

Bei der TabbedPane bekomme ich mit getComponentAt(int tabIndex) das JPanel raus.
Mit getComponentCount() könnte man dann die Anzahl von Components auf dem JPanel herausfinden und
dann mit "instanceOf JTextArea" herausfinden, ob es sich um die Textarea handelt. Die Sache hat nur einen Haken...man darf pro Panel nur eine Textarea haben  Habs aber nicht ausprobiert, ob das obige Konstrukt funktionieren würde.

Ich denke am geschicktesten wäre es wirklich, sich die Textareas in einer Hashmap oder Arraylist oder ObjectArray zu halten, damit man dynamisch drauf zugreifen kann.

LR


----------

