# Panel skalieren



## noch_anfänger (30. Mrz 2010)

Hallo,

meine Frame kann ich mit getScreenSize() an die Bildschirmgröße automatisch anpassen.


```
public class GridBagWindow extends JFrame {

    public GridBagWindow() {
	Container contentPane = getContentPane();
	GridLayout gridLayout = new GridLayout(4, 0);
	contentPane.setLayout(gridLayout);
	Dimension screensize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
	contentPane.setPreferredSize(new java.awt.Dimension(screensize));

        JPanel panelStoringPos = new JPanel();
        GridBagLayout gridB = new GridBagLayout();
	panelStoringPos.setLayout(gridB);
        contentPane.add(panelStoringPos);

	addWindowListener(new WindowAdapter() {
	    public void windowClosing(WindowEvent e) {
		System.exit(0);
	    }
	});
    }
     public static void main(String args[]) {
	GridBagWindow window = new GridBagWindow();
	window.pack();
	window.setVisible(true);
    }
}
```

Ich will meine Panel panelStoringPos an die Bildschirmgröße auch automatisch anpassen.

```
panelStoringPos.setPreferredSize(new java.awt.Dimension((screensize.getWidth()*75)/100, (screensize.getHeight()*75)/100));
```
 geht nicht, da nach Multiplikation und Division im Komstruktor für Dimension double-Werte stehen, was nicht erlaubt ist. Soll ich double nach integer umwandeln oder gibt es eine bessere Lösung?


----------



## Foermchen82 (30. Mrz 2010)

Lass einfach das pack() weg und pass den Frame auf Builschirmgröße an. Dein Panel wird dann skaliert.


----------



## noch_anfänger (30. Mrz 2010)

Ich habe leider nicht alles deteilliert beschrieben.
Auf meinem Fenster soll nicht nur ein Panel, sondern meherere Panels platziert werden. Jedes soll eigene Größe haben. Ich will die nicht fest anlegen.
Und habe kein Frame, sondern Window. Soll ich das ändern?


----------



## Foermchen82 (30. Mrz 2010)

Ja wenn du mit Swing arbeitest, nimm ein JFrame.

Und was genau soll bei dir jetzt Fenstergröße haben?


----------



## Michael... (30. Mrz 2010)

Wie gross eine Komponete dargestellt wird, kann von der Grösse der Komponente selbst aber auch von dem verwendeten LayoutManager abhängen. Die Lösung für Dein Problem:
Den für die Bedürfnisse passenden LayoutManager richtig einsetzen;-)

Konkrete Empfehlungen hängen von Deinem gewünschten Aussehen der GUI ab.

Ansonsten: AWT ist out ;-) wenn Window, dann JWindow verwenden.


----------



## noch_anfänger (30. Mrz 2010)

Ok,

ich nehme statt Window eine JFrame. Die kann man mit getScreenSize() evtl. an die Bildschirmgröße anpassen. Diese JFrame hat GridLayout. Auf dieser JFrame platziere ich 4 JPanels, die wiederum eigene Komponenten auf sich tragen. Diese 4 JPanels haben GridBagLayout. Nun, wenn ich die JFrame, auf der alles liegt, an die Bildschirmgröße anpasse, soll ich sowas auch für die anderen Komponenten machen. Oder? Wenn ich für jedes JPanel SetPrefferedSize() schreibe, werden sie nicht an die Fenstergröße angepasst. Zudem will ich, das diese 4 JPanels nicht den vollen Platz auf der JFrame einnehmen, sondern weiße Ränder herum haben.


----------



## Michael... (30. Mrz 2010)

Wie gesagt, wie gross eine Komponente dargestellt wird ist Sache des LayoutManagers. Mit setPreferredSize() kann man zwar seine Wünsche äussern, die z.B. beim BorderLayout u.U. auch Gehör finden.
Beim GridLayout werden die Komponenten auf die Grösse des "Feldes" aufgezogen, wobei alle Felder die gleiche Grösse haben. Man kann per Konstruktor noch einen vertikalen und horzontalen Spalt einfügen, so dass eine Lücke zwischen den Komponenten gelassen wird.
Ansonsten könnte man den Panels eine farbige Border verpassen StiWo BorderFactory.createLineBorder...


----------



## StrikeTom (30. Mrz 2010)

Versuch es do mal mit der Methodet setBounds();


Gruß Tom


----------

