# jInternal Frame Zentrieren



## Waldi (17. Mrz 2006)

Hallo Leute. Wie der Titel schon sagt will ich ein jInternalFrame zentrieren, auf Bildschirm mitte. .setRelativeTo(Null) funktioniert hier nicht.

Gesucht hab ich auch schon aber nix gefunden. Wenn es was gibt möge er mir doch bitte die Suchparameter schicken das ich es mal lerne richtig zu suchen. :shock: 

Vielen Dank


----------



## Guest (17. Mrz 2006)

Du kannst dir wahrscheinlich einen DesktopManager Schreiben:

- für: f das InternalFrame mitgeben
- die Koordinate aus Bildschrim/2 berechnen - InternalFrame Größe (mitte)
- Dem DesktopPane den DektopManager übergeben


```
setBoundsForFrame
void setBoundsForFrame(JComponent f,
                       int newX,
                       int newY,
                       int newWidth,
                       int newHeight)
//This is a primitive reshape method.
```




```
setDesktopManager(DesktopManager d)
```
+



Gruß

NicoalsA


----------



## André Uhres (17. Mrz 2006)

```
/*
 * InternalTest.java
 */
package layout;
import java.awt.*;
import javax.swing.*;
public class InternalTest extends JFrame {
    public InternalTest() {
        desktopPane = new JDesktopPane();
        internalFrame = new JInternalFrame();
        
        desktopPane.setPreferredSize(new Dimension(400, 300));
        internalFrame.setVisible(true);
        desktopPane.add(internalFrame);
        getContentPane().add(desktopPane, BorderLayout.CENTER);
        Dimension desktopSize = desktopPane.getPreferredSize();
        internalFrame.setBounds((desktopSize.width-250)/2, (desktopSize.height-200)/2, 250, 200);
        
        pack();
        setLocationRelativeTo(null);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }
    public static void main(String args[]) {new InternalTest().setVisible(true);}
    private JDesktopPane desktopPane;
    private JInternalFrame internalFrame;
}
```


----------



## Waldi (24. Mrz 2006)

Irgendwie bekomm ich das nicht so ganz hin. Es wäre hilfreich wenn du mir sagen könntest was ich angeben muss beim DesktopPane initialisieren, beim InternalFrame Initialisieren und beim aufrufen des InternalFrames.


----------



## André Uhres (24. Mrz 2006)

>was ich angeben muss beim DesktopPane initialisieren:

```
desktopPane = new JDesktopPane();
        desktopPane.setPreferredSize(new Dimension(400, 300));
        getContentPane().add(desktopPane, BorderLayout.CENTER);
...
    private JDesktopPane desktopPane;
```

>beim InternalFrame Initialisieren :

```
internalFrame = new JInternalFrame();
        internalFrame.setVisible(true);
        Dimension desktopSize = desktopPane.getPreferredSize();
        internalFrame.setBounds((desktopSize.width-250)/2, (desktopSize.height-200)/2, 250, 200);
...
    private JInternalFrame internalFrame;
```
>und beim aufrufen des InternalFrames:

```
desktopPane.add(internalFrame);
```


----------



## Waldi (24. Mrz 2006)

Des geht bei mir ned.

```
getContentPane().add(desktopPane, BorderLayout.CENTER);
```
in der JDesktopPane ist getContentPane ned verfügbar.
bei mir hat das JDesktopPane gar kein ContentPane.
Brauch ich ein ContentPane unter dem DesktopPane??

wenn ich 

```
jDesktopPane.add(jDesktopPane, BorderLayout.CENTER);
```
mache gibts ne exception, das er sich nicht zu sich selbst hinzufügen kann, was auch verständlich ist.


----------



## André Uhres (24. Mrz 2006)

Waldi hat gesagt.:
			
		

> ...in der JDesktopPane ist getContentPane ned verfügbar...


Du brauchst ein Fenster. Versuch's mit JFrame.


----------



## Waldi (24. Mrz 2006)

Versteh ich jetzt ned. Ich hab ein JFrame. Darin ist ein DesktopPane. Und darin kommen dann die InternalFrames. Deshalb auch die Frage ob ich unter das DesktopPane ein Content Pane legen soll.


----------



## André Uhres (24. Mrz 2006)

Waldi hat gesagt.:
			
		

> ...die Frage ob ich unter das DesktopPane ein Content Pane legen soll.


JFrame hat ein ContentPane. Da muss es rein.


----------



## Waldi (24. Mrz 2006)

Also ich hab das jetzt anderst und so funktioniert es auch. Dein Beispiel hat bei mir ned funktioniert.

Kurze Beschreibung:

im jContentPane

```
jContentPane = new JPanel();
			jContentPane.setLayout(new BorderLayout());
			jContentPane.add(getJDesktopPane(), java.awt.BorderLayout.CENTER);
		}
		return jContentPane;
```

im jDesktopPane: nichts

im jInternalFrame

```
Dimension desktopSize = FensterKlasse.getJDesktopPane().getSize();
	    this.setBounds((desktopSize.width-250)/2, (desktopSize.height-200)/2, 300, 200);
```

beim Aufrufen des jInternalFrames

```
IFLandAnlegen ifLandAnlegen = new IFLandAnlegen();
					ifLandAnlegen.setVisible(true);
					FensterKlasse.getJDesktopPane().add(ifLandAnlegen);
```


----------



## André Uhres (25. Mrz 2006)

Das ist vom Prinzip her das Gleiche wie mein Beispiel.
Nur daß du ein neues "ContentPane" erstellst obschon JFrame schon eins hat.
Dein  "ContentPane" musst du dann dem JFrame noch hinzufügen 
bzw. mit setContentPane übergeben.
Gruß
André


----------

