# Listener auf JTabbedPane



## dwuest (12. Jul 2004)

Hallo alle zusammen!

Ich habe eine Frage bzgl. JTabbedPane. Mein Programm erstellt insgesamt 3 Registerkarten welche mit unterschiedlichen Panels gefüllt sind. Das erste Panel hat einen festen Inhalt welche in der ersten Registerkarte angezeigt wird. Die anderen Panels erhalten Inhalte aus einer Datenbank. Im Moment habe ich es so gelöst das man in diesen Registerkarten auf den Button "Details laden" klicken muss. Dann wird das Panel erst mit Inhalten aus der Datenbank gefüllt. Ich hätte jetzt gerne das beim Anwählen der Registerkarten direkt der Inhalt auf die Panels geladen wird. Gibt es für so etwas einen Listner. Habe schon mit FocusListner gearbeitet funktioniert aber irgendwie nicht richtig. Um Datenbankperformance zu sparen möchte ich die Daten erst holen wenn der User die Registerkarte angeklickt hat.

Vielen Dank für die Antworten!

dwuest


----------



## L-ectron-X (12. Jul 2004)

Du kannst an Deiner JTabbedPane einen *javax.swing.event.ChangeListener* registrieren.
Ein *javax.swing.event.ChangeEvent* wird immer dann ausgelöst, wenn auf ein Tabbed (Reiter) geklickt wurde.
Du überschreibst dann die *stateChanged()*-Methode, in der Du programmierst, was getan werden soll, wenn ein solches Event gefeuert wurde.


----------



## dwuest (13. Jul 2004)

Kann man auch einen Listner auf das Panel in der Registerkarte setzen, z.B. ActivePanelListner??

Trotzdem schon mal vielen Dank, werde versuchen es mit diesem Listner umzusetzen.
 

Viele Grüße
dwuest


----------



## skaal (4. Sep 2004)

ich habe gerade genau dasselbe problem.



> Du überschreibst dann die stateChanged()-Methode, in der Du programmierst, was getan werden soll, wenn ein solches Event gefeuert wurde.



heißt das, dass ich extra nochmal eine klasse ableiten muss, um an diesen JTabbedPane.ModelListener zu kommen? gibts da nichts einfacheres?
oder versteh ich da jetzt wieder gänzlich falsch?


----------



## L-ectron-X (4. Sep 2004)

Registriere an Deiner JTabbedPane einen ChangeListener und über schreibe die stateChanged()-Methode.
Der Code dazu kann so aussehen:

```
JTabbedPane myTabbedPane = new JTabbedPane()
JPanel jPanelRef = new JPanel();
String activePanelTitle;
...
...
...
myTabbedPane.addTab("TabbedTitle", jPanelRef);

myTabbedPane.addChangeListener(new ChangeListener() {
  public void stateChanged(ChangedEvent e) {
    //tu was, wenn ein Tabbed geklickt wurde
    //Bspw. ermitteln des Titels des geklickten Tabbed
    activePanelTitle = myTabbedPane.getTitleAt(myTabbedPane.getSelectedIndex());
  }
}
```


----------



## skaal (5. Sep 2004)

danke. so hatte ich es sogar (von der umrechnung auf den titel mal abgesehen), man sollte dann nur auch bei 0 und nicht bei 1 anfangen zu zählen.


----------



## LastUnicorn (21. Jan 2005)

da hab ich gleich mal eine frage zu. Ich meine zu dem Change Listener

Ist es möglich, dass ich wenn der Listener zieht, dass vorher selektierte Objekt bekomme ? Ich stehe da gerade etwas auf der Leitung und möchte nicht unbedingt mir alles in der Klasse merken müssen.


----------



## AlArenal (21. Jan 2005)

Wo ist denn das Problem ne Variable (int) anzulegen, wo der Index des zuletzt aktiven Tabs drinsteht? Den verwendest du in deiner stateChanged() und setzt ihn danaach auf den aktuellen Wert und gut iss.


----------



## LastUnicorn (21. Jan 2005)

jaja, den ansatz hatte ich ja aber es hätte ja sein können, dass man diese Information erhält. Weil...dann wär es schlecht sich das zu merken, da man dadurch mehraufwand hätte und alles nicht so sauber wär


----------



## Guest (22. Feb 2005)

Hallo.

Hab diesen Thread gefunden, und hat mir auch ziemlich weiter geholfen. Irgendwie klappt es aber immer noch nicht so ganz.

ungefähr so sieht zur Zeit mein Code aus:


```
tabReiter.addChangeListener(new javax.swing.event.ChangeListener(){ 
	public void stateChanged(javax.swing.event.ChangeEvent e) { 
                	if (tabReiter.getSelectedIndex() == 1)
 		{
 	                	panReiter2 = new Reiter2();
 		                tabReiter.setSelectedComponent(panReiter2);
 		}
 		else if (tabReiter.getSelectedIndex() == 2)
 		{
 			panReiter3 = new Reiter3();
 			tabReiter.setSelectedComponent(panReiter3);
 		}
 		else if (tabReiter.getSelectedIndex() == 3)
 		{
 			panReiter4 = new Reiter4();
 			tabReiter.setSelectedComponent(panReiter4);
 		}
              }
        });
```

Leider klappt es nicht so. die setSelectedComponent-Methode wirft immer ne ganze Menge Exceptions.
Wie kann ich also, erst beim Wechsel des Tabs den Tab füllen?

Schon mal Danke


----------



## L-ectron-X (23. Feb 2005)

Können wir mal die Exceptions sehen?


----------



## Guest (24. Feb 2005)

Habs schon umgangen, deshalb krieg ich die Exceptions nicht mehr hin.
das setSelectedComponent wollte bei mir aber irgendwie gar nicht, naja, wie gesagt, habs jetzt anders gelöst.


----------

