JFrame/Content Pane height Problem

larry

Mitglied
Java:
import java.awt.*;
import javax.swing.*;

public class Skalar extends JFrame{
	
	private final Container cp = this.getContentPane() ;
	
	public static void main(String[] args) {
		new Skalar();
	}
	
	public Skalar() {
	 super("Skalare und Winkel");
	 this.setLayout(null);
	 this.setSize(480, 400);
	 this.setLocation(50, 50);	
	 this.setDefaultCloseOperation(EXIT_ON_CLOSE);
	 this.setVisible(true);
	 init();
	}
		
	private void init() {
	 System.out.print("width:" + cp.getWidth() + "height" + cp.getHeight());
	 cp.add(new View(this));	
	}
	
	public Container getCp() {
	 return cp;
	}
}

import java.awt.*;
import javax.swing.*;

public class View extends JPanel {

	private Skalar frame;
	
	public View(Skalar frame) {
	 this.frame=frame;
	 this.setSize(frame.getCp().getWidth(), frame.getHeight());
	 System.out.print("\nwidth:" + frame.getCp().getWidth() + "height" + frame.getCp().getHeight());
	}
	
	public void paintComponent(Graphics g) {
	 g.drawString("test", 20, 20);	
	 g.setColor(Color.BLUE);
	 g.fillRect( 0, 0, frame.getWidth(), frame.getCp().getHeight() );
	}
}

Die Hoehe der Pane kann von mir nicht geändert werden sie geht über die Goesse des Frames hinaus hat jemand eine Idee was ich falsch mache ???:L .
 
> Die Hoehe der Pane kann von mir nicht geändert werden

inwiefern? wie du stellst du das fest, welche Probleme treten exakt auf?

> sie geht über die Goesse des Frames hinaus

inwiefern? inwiefern? inwiefern? sollen deine System.out.print-Ausgaben irgendwelche Aufschlüsse geben?

-----

allgemein gilt:
- Layout-Vorgaben nur per setPreferredSize(), setSize() hat für dich keine Funktion
- das ContentPane des JFrames hat üblicherweise BorderLayout, die Komponente die dort einfügt wird, wird immer maximal dargestellt, egal was an PreferredSize vorgegeben ist
 
Hallo Larry,

herzlich willkommen bei [c]java-forum.org[/c] 🙂.

Versuch mal die Zeile [c]this.setLayout(null);[/c] zu entfernen. Dadurch wird das BorderLayout benutzt, wodurch sich das Panel automatisch an den Frame anpasst.

Gruß,
André
 
Mit [c]this.setSize(frame.getCp().getWidth(), frame.getHeight());[/c] bekommt der Panel die selbe Größe wie der Frame, einschließlich der Titelleiste, was in deinem Fall unerwünscht ist. Das setzen der Größe ist bei Verwendung des BorderLayout nicht mehr nötig. Allgemein wird empfohlen, das Nullayout nicht zu benutzen.

Gruß,
André
 

Neue Themen


Zurück
Oben