# Fenstergröße ermitteln



## PeFro (23. Okt 2005)

Hi,

checke nicht ganz die Logik, die hinter der Komponentenverwaltung von Java steckt.
Folgendes:

Ich hab eine von JFrame abgeleitete Klasse, welche in einem JPanel verschiedene andere Klassen anordnet, darunter auch eine, die von JPanel erbt.

Eigentlich will ich im JFrame die Größe nicht direkt über setSize(..) angeben, sondern einfach direkt im Vollbild über setExtendedState(JFrame.MAXIMIZED_BOTH) starten, darüberhinaus möchte ich abhängig von der JFrame Größe die Größe des JPanels in der anderen Klasse bestimmen.

1. Problem: lasse ich setSize(..) im JFrame weg, bekomme ich weder über getSize(), noch über getPreferredSize() die Größe des JFrames

gibt´s dafür ne andere Funktion, die mir noch nicht aufgefallen ist oder ist die Vorgehensweise falsch?


2. Problem: selbst wenn ich setSize(..) in JFrame nutze, um testhalber n Wert zu bekommen... wie krieg ich diesen möglichst flexibel in der JPanel Klasse verfügbar? eine Referenz auf die "aufrufende" Klasse mit JFrame als Argument um dann über owner.getSize() den Wert zu erhalten funktioniert nicht...(etwa weil es dann keine Referenz ist, sondern ne Kopie??) 

Oder mach ich mir allgemein zuviel Gedanken um die Anordnung und sollte das komplett den Layoutmanagern überlassen (und wie würde ich dann das JPanel automatisch auf die maximale Größe des JFrames bringen)?!

Bin verwirrt 

 :bahnhof: 

MfG
PeFro


----------



## Guest (23. Okt 2005)

PeFro hat gesagt.:
			
		

> ...
> Oder mach ich mir allgemein zuviel Gedanken um die Anordnung und sollte das komplett den Layoutmanagern überlassen (und wie würde ich dann das JPanel automatisch auf die maximale Größe des JFrames bringen)?!
> ...


Verwende einfach BorderLayout.


----------



## MPW (23. Okt 2005)

oder hol' dir einfach die screensize mit dem Toolkit...maximierte Fenster haben ja die gleiche Größe wie der Bildschirm...


----------



## PeFro (23. Okt 2005)

Jo würde gehen, aber was für ne Möglichkeit hätt ich, wenn ich nich die Größe von JFrame sondern von nem JPanel auslesen wollte, dessen Größe ich vorher nicht explizit gesetzt habe. Gibt es da keine Chance sowas pixelgenau auszulesen??


----------



## MPW (23. Okt 2005)

hö, meines Wissens muss dsa gesetzt werden, entweder manuell, oder durch einen Layoutmanager, welches Layout benutzt denn du?


----------



## lin (23. Okt 2005)

Dieser Code gibt dir die Dimensionen des JPanels, dessen Grösse nicht explizit gesetzt wurde.


```
import java.awt.Dimension;
import java.awt.Toolkit;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class PanelSize extends JFrame {
	JPanel pane;
	
	public PanelSize() {
		setSize(Toolkit.getDefaultToolkit().getScreenSize());
		pane = new JPanel();
		getContentPane().add("Center", pane);
	}
	
	public Dimension getPanelDimension() {
		return pane.getSize();
	}
	
	public static void main(String[] args) {
		PanelSize p = new PanelSize();
		p.setVisible(true);
		Dimension d = p.getPanelDimension();
		System.out.println("Width: " + d.width + "Height: " + d.height);
	}
}
```


----------



## PeFro (23. Okt 2005)

Funktioniert bei mir leider nicht so:


```
public class Gui extends JFrame {
    private JPanel jPanel = new JPanel();
    private SimField simField = new SimField();
    private SimConsole simConsole = new SimConsole(this);
    
    Gui() {
        setSize(1024,768);
        setExtendedState(JFrame.MAXIMIZED_BOTH);
        System.out.println(getSize());
        System.out.println(Toolkit.getDefaultToolkit().getScreenSize());
```

Er gibt mir dann beim ersten println 1024*768 aus, obwohl ich ne Auflösung von 1280*1024 hab und das Fenster auch im Vollbild ausgeführt wird. Irgendwas stimmt da also nich...

MfG
PeFro


----------



## lin (24. Okt 2005)

versuch mal die Grösse nach dem setVisible abzufragen.


----------

