# JInternalFrame in den Vordergrund rücken + Focus



## Burton12 (28. Mai 2006)

Hallo zusammen,

also erstelle eine Software. Ich habe den Hauptframe MDI in den ich am beim Start ein InternalFrame Liste lade dieser hat 4 tabs, auf jeden tag wird eine jframe geaddet kundelist, atrikelliste usw. Auf diesen Frame Liste gibt es einen Button  anlegen der ein anderes jInternalFrame lad, dies macht er auch aber dieser Frame wird immer hinter der permanent offenen Frame Liste geladen. Wenn ich den Frame Anlegen über das MenüItem lade habt ich damit keine Probleme alles ist im Vordergrund. 

Nun habt ihr eine Idee wie ich dieses Problem lösen soll. Bin am verzweifeln ;-)


Gruß

Burton


----------



## André Uhres (28. Mai 2006)

Burton12 hat gesagt.:
			
		

> ..also erstelle eine Software...


Donnerwetter! Dann zeig uns mal deine Software..


----------



## Guest (28. Mai 2006)

Siehe 
JDesktopPane#moveToFront(JInternalFrame frame)
und
JInternalFrame#setSelected(boolean selected)


----------



## Burton12 (28. Mai 2006)

Anonymous hat gesagt.:
			
		

> Donnerwetter! Dann zeig uns mal dein Software..



Naja...kleines verwaltungsprogram ;-) besser so ?


----------



## Guest (28. Mai 2006)

Nun wieder zum Thema.

Geht leider auch nicht 

Also mein HauptFrame hat die Methode



```
public void addWindow(Kunden_neu child) 
{
      desktopPane.add(child);
      desktopPane.moveToFront(child);
      try {
		child.setSelected(true);
	    } catch (PropertyVetoException e) {
	
		e.printStackTrace();
}
}
```

Diese Rufe ich von der Klasse KundenListView auf. Ich mein Am Anfang wirds auch als oberstes angezeigt aber sobald ich es verschiebe ist es wieder unter dem ListView.


----------



## André Uhres (28. Mai 2006)

Burton12 hat gesagt.:
			
		

> ..Naja...kleines verwaltungsprogram ;-) besser so ?


Ja gut. Ich meinte aber auch damit, daß es die Diagnose erleichtern würde wenn du uns den Code zeigst.
Aber jetzt bitte nicht hunderte von Zeilen posten.
<--- Ein KSKB wäre gut.


----------



## Guest (28. Mai 2006)

Anonymous hat gesagt.:
			
		

> ...
> Diese Rufe ich von der Klasse KundenListView auf. Ich mein Am Anfang wirds auch als oberstes angezeigt aber sobald ich es verschiebe ist es wieder unter dem ListView.


Bis auf fehlendes child.setVisible(true) vor dem setSelected(true) fällt mir 
nichts auf. Kann es sein, dass du irgendwo JInternalFrame#setLayer(...) 
aufrufst? 
Normalerweise sind alle Fenster unter JDesktopPane.DEFAULT_LAYER zu 
finden. Nach deiner Beschreibung klingt es so, als ob das das ListView
einen Layer höher wäre.


----------



## Burton12 (28. Mai 2006)

Also setVisible(true) hab ich nur an anderer Stelle. 

SetLayer benutze ich nicht. Ich denke auch das ListView eine Ebene höher liegt. Warum ist das aber nicht so, wenn ich die Kunden_neu Maske aufrufe über das MenüItem dann geht es ja so wie es soll. Als Kunde_neu über ListView.

Noch andere Ideen


----------



## Guest (28. Mai 2006)

Burton12 hat gesagt.:
			
		

> Also setVisible(true) hab ich nur an anderer Stelle.


Dies wird vermutlich nicht die Fehlerursache sein, aber setVisible(true) solltest du irgendwo zwischen 
desktopPane.add(child); und child.setSelected(true); aufrufen, sonst hat das setSelected(...) keinerlei 
Auswirkung. Lese die Beschreibung der Methode in der API-Doku.





			
				Burton12 hat gesagt.:
			
		

> SetLayer benutze ich nicht. Ich denke auch das ListView eine Ebene höher liegt. Warum ist das aber nicht so, wenn ich die Kunden_neu Maske aufrufe über das MenüItem dann geht es ja so wie es soll. Als Kunde_neu über ListView.
> 
> Noch andere Ideen


Änderst du in der Zwischenzeit den DesktopManager? Wie wird das ListView-Ding aktiviert 
bzw. in das DesktopPane eingefügt?


----------



## Burton12 (28. Mai 2006)

ListView wird im Konstruktor von der Hauptframe aufgerufen

[code ]
public Hauptfenster() 
	{
      initComponents();

      try {
          ListView li = new ListView(this);
          desktopPane.add(li);
          li.setVisible(true);
		  li.setMaximum(true);
	} catch (PropertyVetoException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
      this.setExtendedState(MAXIMIZED_BOTH); 
	}
[/code]

Hier der Teil von ListView


```
public ListView(Hauptfenster bla) {
    	this.Haupt = bla;
        initComponents();

    }
	public void addWindow(Kunden_neu child) 
	{
      Haupt.add(child);
	} 
    KundenListView einKundenListView = new KundenListView(this);
	ImmobilienListView einImmobilienListView = new ImmobilienListView();
	MitarbeiterListView einMitarbeiterListView = new MitarbeiterListView();
	InteressentenListView einInteressentenListView = new InteressentenListView();
.
.
.
jTabbedPane1.addTab("Kunden",einKundenListView);
 jTabbedPane1.addTab("Immobilien",einImmobilienListView);
usw.
```

KundenListView


```
public KundenListView(ListView bla) {
		List = bla;
        initComponents();
        onInit();
    }
.
.
.
.

Hier ist der Action Event vom Button

         if(jTable1.getSelectedRow()!= -1){
      		
            Mieter l =all.getMieter(jTable1.getSelectedRow());
            Kunden_neu kn = new Kunden_neu(l); 
            List.addWindow(kn);

            
         }
         else{
             JOptionPane.showMessageDialog(
		    this,
		    "Bitte wählen Sie einen Mieter aus.",
		    "Fehler",
		    JOptionPane.ERROR_MESSAGE
		);}
         this.setVisible(true);
```


----------



## Guest (28. Mai 2006)

Ist dieses Hauptfenster das JDesktopPane?
Stammt der Code unter "Hier ist der Action Event vom Button" aus einem ActionListener?
Was hat das setVisible(true) draunter zu bedeuten?

Sorry, aber ich kann es nicht nachvollziehen. Beschreibe nochmal, was, wie angezeigt 
werden soll. Könnte sein, dass ich dich missverstanden habe. Deine ursprüngliche Frage 
ist etwas... hektisch gewesen.


----------



## André Uhres (29. Mai 2006)

Burton12 hat gesagt.:
			
		

> ..Ich habe den Hauptframe _MDI _in den ich am beim Start ein InternalFrame _Liste _lade
> dieser hat 4 tabs, auf jeden tag wird eine jframe geaddet _kundelist_, _atrikelliste _usw.
> Auf diesen Frame _Liste _gibt es einen Button  _anlegen _der ein anderes jInternalFrame lad,
> dies macht er auch aber dieser Frame wird immer hinter der permanent offenen Frame _Liste _geladen.
> Wenn ich den Frame _Anlegen _über das MenüItem lade habt ich damit keine Probleme alles ist im Vordergrund..


http://www.java-forum.org/de/viewtopic.php?p=192212#192212


----------



## Azrahel (29. Mai 2006)

André Uhres hat gesagt.:
			
		

> Burton12 hat gesagt.:
> 
> 
> 
> ...



Das tolle an KSKB's ist das sie meistens funktionieren und der Fehler den man hat da nicht auftritt  ging mir jedenfalls schon ein paarmal so


----------



## André Uhres (29. Mai 2006)

Azrahel hat gesagt.:
			
		

> Das tolle an KSKB's ist das sie meistens funktionieren und der Fehler den man hat da nicht auftritt
> ging mir jedenfalls schon ein paarmal so


Du brauchst ja dann nur das KSKB schrittweise auszubauen, bis entweder der Fehler auftritt oder
das gewünschte Endergebnis erreicht ist.
Wenn dann der Fehler auftritt, dann weisst du genau daß es durch die letzte Erweiterung kommt und
du brauchst nicht mehr lange nach der Ursache zu suchen. Das ist natürlich ein Haufen Arbeit, das ist klar. 
Aber es ein sicherer und schneller Weg zur Lösung.


----------



## Burton12 (29. Mai 2006)

Hi

ich hab den Fehler ;-)

Hättest ihr ja auch sehen können, nein Spass bei Seite 

Anstatt addWindow

hab ich nur add aufgerufen

```
public void addWindow(Kunden_neu child)
   {
      Haupt.add(child);
   } 


   public void addWindow(Kunden_neu child)
   {
      Haupt.addWindow(child);
   }
```

close und abhaken danke an alle ;-)


----------



## Gast (6. Nov 2009)

Hallo zusammen,
ich hatte ein ähnliches Problem, bei mir (Windows Vista, JDK 1.6_07) hat ein simples myinternalframe.pack() nach dem myinternalframe.setVisible(true) das gewünschte Resultat gebracht (myinternalframe bekommt den Focus!).


----------

