Holger: JPanelgröße

Morgen,
kann mir jemand erklären, warum mein Panel Startseite immer nur ca. 10 *10 Pixel groß ist? Ich habe doch die Size mit get Size bestimmt, das wird einfach ignoriert. Auch wenn ich versuche ein weitere Panel einzufügen, um das Panel von Innen aufzudrücken bleibt es so winzig, es sei denn, ich fülle tatsächlich Komponenten ein, die Drücken das Panel dann größer.
Weiß jemand Rat?
Das Panel Startseit wird aufs ContentPane vom JFrame geadded. Sonst befindet sich gar nichts auf dem Frame, also Platz ist vorhanden.
Gruß

Holger

class Startseite extends JPanel
{
  private Image img;

Startseite()
 {
 setSize(650,400);

JPanel $Start = new JPanel();
    $Start.setSize(650,400);
    $Start.validate();

repaint();
 add($Start);
     validate();
 }

public void paint(Graphics g)
  {
   Image img;
   img = getToolkit().getImage( "cover.jpg" );
   g.drawImage(img,0,0, this );
  }

}

  1. Guude!

    Das Panel Startseit wird aufs ContentPane vom JFrame geadded. Sonst befindet sich gar nichts auf dem Frame, also Platz ist vorhanden.

    Je nachdem, in welchen LayoutManager der ContentPane Du das Panel einfügst, wird seine Grösse verändert. Kommt es zum Konflikt zwischen setSize und der ContentPane, dürfte IMO die ContentPane das Rennen machen... Wie sieht denn die Passage aus, in der Du das Panel der ContentPane hinzufügst und welchen LayutManager (BorderLayout, GridLayout, FlowLayout, ...) verwendest Du?

    LG ausm Hesseland
    Lemmy

    1. Hallo, vielen Dank erstmal.

      So sieht das aus:
      $Hauptpanel.add($Startseite);
      getContentPane().add($Hauptpanel);

      startseite ist das Panel, welches ich am Anfang gepostet hatte.

      weder bei ContentPane, noch bei Hauptpanel habe ich ein Layout angegeben. Default Layout ist dann BorderLayout?

      und Default add dann CENTER..?!

      1. Guude!

        weder bei ContentPane, noch bei Hauptpanel habe ich ein Layout angegeben. Default Layout ist dann BorderLayout?

        Nein, das wäre dann FlowLayout, sprich die Grösse der Elemente werden vom LayoutManager nicht geändert.

        Ich selbst habe noch nie mit setSize in Verbindung mit Panels gearbeitet, daher kann ich Dir da auch nicht so genau weiterhelfen. Meistens schachtel ich verschiedene Panels mit unterschiedlichen LayoutManagern, um eine Grösse der Panels bzw. deren Elemente zu erreichen (BorderLayout.CENTER streckt ja z.B. horizontal und vertikal, BorderLayout.NORTH nur horizontal etc.). Eigentlich macht es ja auch nicht allzuviel Sinn, ein Panel zu einer gewissen Größe aufzublähen, wenn dieses nichts enthält. Es ist schließlich nur ein Container für andere Elemente, der einen eigenen LayoutManager besitzen kann.

        LG ausm Hesseland
        Lemmy

        1. Wie komme ich bloss auf die Idee dass Default Layout sei BorderLayout??
          OK, ich habe dem $HauptPanel ein BorderLayout verpass und schon klappt es.
          Besten Dank!!

    2. Entferne ich mit removeAll() auch das Layout?