# Focuslistener bei JPanel im JTabbedPane



## CrazyFish (23. Mai 2008)

Hallo,

zunächst einmal ein paar Codeausschnitte:


```
public class Main extends JFrame {
  public Main(	) 
    {
    	super();

    	 Container contentPane = getContentPane();
    	
    	 contentPane.setLayout(new CardLayout());
    	 
    	 setSize(500,500);

    	 contentPane.add(getTabPane(), TABPANEL);
    	 
         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         setVisible(true);
    }

    protected JScrollPane getTabPane()
    {
    	JTabbedPane tabpane = new JTabbedPane();
  	
        panel1   = new Panel1();
        panel2    = new Panel2();
        
        tabpane.addTab("P1", panel1);
        tabpane.addTab("P2", panel2);

        JScrollPane scrollPane = new JScrollPane(tabpane);
        
        return scrollPane;
    }
}
```


```
public class Panel1 extends JPanel{
   public Panel1 ()
    {
    	super();
     
        /* Inhalte auf Panel einfügen*/

       setFocusable (true);

       addFocusListener( new FocusAdapter()
				        {
        					public void focusLost(FocusEvent e)
        					{
        						System.out.println("Foukus weg");
        					}
        					
        					public void focusGained(FocusEvent e)
        					{
        						System.out.println("Foukus da");
        					}
				        }
        );

    }
}
```

Ziel: Ich möchte wissen ob das Panel1, welches in der TabbedPane angezeigt wird, gerade den Fokus hat, und das möglichst in der Klasse Panel1.

Aber momentan zeigt der FocusListener keine Wirkung. 

Kann man auf diese Weise überhaupt den Fokus ermitteln, bzw. was mache ich falsch?

Danke schonmal im voraus.


----------



## André Uhres (24. Mai 2008)

Versuch's mal so:

```
...
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {//<------------------!!!
            public void run() {
                new Main();//<------------------!!!
            }
        });
    }
}
class Panel1 extends JPanel {
    public Panel1() {
        super();
        /* Inhalte auf Panel einfügen*/
        setFocusable(true);
        SwingUtilities.invokeLater(new Runnable() {//<------------------!!!
            public void run() {
                requestFocusInWindow();//<------------------!!!
            }
        });
...
```


----------



## CrazyFish (24. Mai 2008)

Hallo,

es funktioniert, allerdings nur einmal. Ich starte das Programm und erhalte die Ausgabe "Fokus da". Nach einem Tabwechsel erscheint die Ausgabe "Fokus weg". Wenn ich jetzt das Register mit Panel1 wieder aufrufe, erscheint keine meiner Fokusausgaben.


----------



## André Uhres (24. Mai 2008)

CrazyFish hat gesagt.:
			
		

> es funktioniert, allerdings nur einmal. Ich starte das Programm und erhalte die Ausgabe "Fokus da". Nach einem Tabwechsel erscheint die Ausgabe "Fokus weg". Wenn ich jetzt das Register mit Panel1 wieder aufrufe, erscheint keine meiner Fokusausgaben.


Vielleicht enthält Panel1 eine fokusierbare Komponente, die den Fokus "stiehlt"? 
Man könnte in dem Fall versuchen, auf den Tabwechsel zu reagieren,
um den "requestFocusInWindow" für Panel1 wiederholen zu können.


----------

