JFrame Größe an Inhalt anpassen

Hallo Sascha,

danke für die Antwort habs gleich ausprobiert und es geht schon mal besser als vorher!

Irgendwie is mir das grad etwas zu komplex....
Hier meine KlassenStruktur

Spielbrett extends JPanel
ButtonsPanel extends JPanel
Cascade extends JPanel
Main extends JFrame


In Cascade habe ich das Spielbrett eingebettet. Die Größe des Spielbretts ändert sich dynamisch. Ich muss also die Max breite von ButtonPanel und Spielbrett ermitteln und ebenso die Höhe. Diese muss ich dann verwenden um die Größe des CascadePanels zu setzen. Das wiederum verwende ich dann um die JFrame größe zu ändern.





Java:
frame.setLocationRelativeTo(null);

mach leider auch nicht das was ich will. Sondern setzt die linek obere Ecke des Frames in die Mitte des Bildschirms und nicht die Mitte des Frames in die Mitte des Bildschirms.

Gruß Screaper
 
mach leider auch nicht das was ich will. Sondern setzt die linek obere Ecke des Frames in die Mitte des Bildschirms und nicht die Mitte des Frames in die Mitte des Bildschirms.

Das finde ich sehr seltsam, weil es bei mir das Fenster mittig setzt und nicht die linke obere Ecke. An welcher Stelle hast du es denn eingefügt?
Die Größe des Fensters muss gesetzt sein, wenn du das aufrufst.

Gruß

Sascha
 
Hallo,

versuch es mal mit mit der Methode validate() vom JFrame.

Schau dir mal mein Beispiel an dann müsste es dir klar werden.
Java:
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

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


public class WindowResize extends JFrame {

	public WindowResize() {
		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(new Dimension(600,400));
		setLocationRelativeTo(null);
		
		JButton buttonSize1 = new JButton("800 * 600");
		JButton buttonSize2 = new JButton("400 * 300");
		
		buttonSize1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				setWindowSize(800, 600);
			}
		});
		
		buttonSize2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				setWindowSize(400, 300);
			}
		});

		JPanel panel = new JPanel();
		
		panel.add(buttonSize1);
		panel.add(buttonSize2);
		
		add(panel);
		
	}
	
	private void setWindowSize(int width, int height) {
		setSize(new Dimension(width, height));
		setLocationRelativeTo(null);
		validate();
	}
	
	public static void main(String[] args) {

		new WindowResize().setVisible(true);
		
	}
}

mfg,
swas
 
Ich dachte, das Hauptproblem wäre, dass das Fenster nicht seine Größe ändert. Da hat validate aber nichts mit zu tun.

Gruß

Sascha
 
hmmm..
aber jetzt gehts aus irgendwelchen Gründen.....


Aber es ist noch nicht ganz gelöst!! Die Größe des JFrames ändert sich jetzt perfekt mit der Größe der inneren Panels.

Aber die Positon der Panels innerhalb des JFrames gefällt mir noch nicht.

Verwendete LayoutManager
FlowLayout für ButtonPanel
GridLayout (1,1) für Spielbrett
BorderLayout für Cascade(in denen die bedien eingefügt sind)

ButtonPanel hat North
Spielfeld hat Center

Größe des ButtonPanels variiert zwischen 200 und 450 width 80px hoch
Spielfeld komplett variabel.

Durch das Flowlayout wird die Buttonleiste immer zentriert angezeigt.
Das Spielfeld ist aber immer linksbündig, obwohl ich CENTER ausgewählt hab.

Wie kann ich jetzt beide Panels immer zentriert im CascadePanel haben, acuh wenn sich die größe ständig ändert?

Gruß Screaper
 
Könntest du mal einen Screenshot posten? Im Moment kann ich mir leider nicht viel unter deiner Beschreibung vorstellen. :-)

Gruß

Sascha
 
Könntest du mal einen Screenshot posten? Im Moment kann ich mir leider nicht viel unter deiner Beschreibung vorstellen. :-)

Gruß

Sascha
 
Also anbei 2 Bilder.

Das erste zeigt die Nicht zentrierte Variante, wenn nämlich das ButtonPanel größer ist als das Spielfeld.

Das zweite Bild zeigt wie es sein soll. Geht aber momentan nur, wenn das Spielfeld größér ist als das ButtonPanel.

Ich möchte also ebim ersten Bild das Spielfeld in dem CascadePanel zentriert haben, so wie das ButtonPanel.
Also nciht Linksbündig wie jetzt.


Ich hoffe es ist einigermaßen erklärt.
Gruß Screaper
 

Anhänge

  • zentrierproblem 1.jpg
    zentrierproblem 1.jpg
    88,2 KB · Aufrufe: 55
  • zentriert 2.jpg
    zentriert 2.jpg
    86,2 KB · Aufrufe: 52
Zurück