# jtabbedpane Event VOR tab-Wechsel



## dermoritz (2. Aug 2010)

ich hab ein Problem den Moment bevor ein tab-Wechsel in einer JTabbedPane stattfindet zu erwischen. "Focus(Lost)" und "ChangeListener" (das ist Googles Lösung) sind alle zu spät - man landet auf dem neuen Tab. Genau das will ich aber unterbinden ("es wurden Änderungen vorgenommen -wollen sie  speichern?").

Wie macht man das?


----------



## ymene (2. Aug 2010)

Ich weiß nicht, ob es die perfekte Lösung ist, aber du könntest theoretisch die 


```
public void setSelectedIndex( int index )
```

Methode überschreiben, da diese (meines Wissens nach) immer zum Setzen (und somit vor dem Wechsel) des neuen Panels aufgerufen wird. Allerdings wird sie natürlich auch aufgerufen, nachdem die Tabpane das erste Mal aufgebaut wurde um das erste Tab zu selektieren. Müsstest dann eine entsprechende Fallunterscheidung einbauen.

Grüße,
ymene


----------



## dermoritz (2. Aug 2010)

haha- vielen dank das ist es.

habs inzwischen auch probiert und es funzt wunderbar. der hinweis mit der Fallunterscheidung ist auch gut - ohne diese sieht es am Anfang etwas komisch aus.


----------



## hansmueller (26. Aug 2010)

Hallo,

hatte das gleiche Problem und der Hinweis mit 


			
				ymene hat gesagt.:
			
		

> ```
> public void setSelectedIndex( int index )
> ```


hat mir sehr geholfen.

Hier ein kleines Beispielprogramm bzgl. der Umsetzung:

```
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;

public class MainProg
{	
	public static void main(String[] args)
	{
		MainProg x = new MainProg();
	}
	
	public MainProg()
	{
		JFrame Fenster = new JFrame("Test");		
		Fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		xjTabbedPane xjtp = new xjTabbedPane();
		
		xjtp.addTab("Tab0", new JPanel());
		xjtp.addTab("Tab1", new JPanel());
		xjtp.addTab("Tab2", new JPanel());
		xjtp.addTab("Tab3", new JPanel());
		xjtp.addTab("Tab4", new JPanel());
		xjtp.addTab("Tab5", new JPanel());		
		
		Fenster.add(xjtp);
		
		Fenster.setSize(400, 300);
		
		Fenster.setVisible(true);
	}	
	
	public class xjTabbedPane extends JTabbedPane
	{
		public Boolean bDasersteMal = true;
		
		public void setSelectedIndex(int index)
		{
			if (bDasersteMal)
			{
				super.setSelectedIndex(index);
				bDasersteMal = false;
				System.out.println(model.getSelectedIndex());
			}
			else
			{
				int n = JOptionPane.showConfirmDialog(this, "Soll der Tab gewechselt werde?", "Tab-Wechsel", JOptionPane.YES_NO_OPTION);

				if (n == JOptionPane.YES_OPTION)
				{
					super.setSelectedIndex(index);
					System.out.println(model.getSelectedIndex());
				}
				else
				{
					System.out.println("tue nichts");
					System.out.println(model.getSelectedIndex());										
				}
			}
		}	
	}
}
```

MfG
hansmueller


----------

