Rotes Label auf GridLayout einfuegen

Hallo zusammen,

ich moechte mir nacheinander Label, dessen Hintergrund rot ist und dessen Rahmen 5x5 ist, im GridLayout auf einem Panel anzeigen lassen.

Ich habe ein Array mit 10000 Objekten vom Typ Label.

Urspruenglich wollte ich dieses durchgehen und hatte geplant, statt Label wieder Panels zu nehmen und auf einem Panel hinzuzufuegen.

public void setPanels(JPanel[] panels){
    for (int i=0;i<10000;i++) {   //das Array durchlaufen
      panels** = new JPanel();   //JPanel dem Array hinzufuegen
      for (int x=0;x<200;x=x+2) {            //um Lücken zwischen den Panels zu erschaffen
        for (int y=0;y<200;y=y+2) {
          panels**.setBounds(x, y, 5, 5);
        }
      }
      panels**.setOpaque(true);
      panels**.setBackground(Color.RED);
      cp.add(panels**);
    }
  }

Ich bin also panels[] durchgelaufen und habe mir ueberlegt, dass ich die Koordinaten ja immer aendern muss, also 2 Schleifen drumgebaut. Problem war nun, dass ich bestimmt so die Panels nebeneinander ohne Luecke gehabt haette und diese nicht haette voneinander unterscheiden koennen. Also dachte ich, statt x++, inkrementiere ich mit 2, und erhalte so die erwuenschte Luecke. Demnach durfte ich aber nicht bis 100 gehen, da ich ja sonst nur 50 Elemente gehabt haette. Also geh ich bis 200. So sollte mein Array mit 10000 Elementen in einer 100x100 Matrix erscheinen. Allerdings hat mich meine Lehrerin dann darauf hingewiesen, dass ich doch LayoutManager nutzen soll, die das Problem mit der Luecke automatisch loesen. Sonst wuerden sich meine Label verschieben, wenn sich die Aufloesung des Monitors aendert.

Also habe ich mit das GridLayout angesehen.

 private JLabel[] labels = new JLabel[10000];    //Array mit 10000 Plaetzen fuer JPanels angelegt
  private Container cp;
  private JPanel jPanel1 = new JPanel(null, true);
  private GridLayout experimentLayout = new GridLayout(3,100); //Zeile,Spalte

Dieses Objekt deklariere ich ja und gebe ihm 2 ints mit, die fuer Zeileund Spalte stehen, oder? also muesste ich mit new GridLayout(100,100) doch meine 100x100 Matrix bekommen? Habe ich getestet, sah aber scheusslich aus, der Grund folgt weiter unten.

Es folgt der Konstruktor meiner GUI:

public GUI (String title) {
    super (title);
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    int frameWidth = 960; 
    int frameHeight = 712;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    cp = getContentPane();
    cp.setLayout(null);     
    setResizable(false);
    jPanel1.setBounds(0, 0, 961, 577);
    jPanel1.setOpaque(false);
    cp.add(jPanel1);
    jPanel1.setLayout(this.experimentLayout); //Layout festlegen
    this.setzteLabel(); //Panels der GUI hinzufuegen
    setVisible(true);
    
   } 

Ich habe das Layout von weiter oben an mein Panel uebergeben, soweit habe ich das denke ich verstanden. Dann rufe ich meine Methode setzeLabel() auf.

public void setzteLabel(){
    
     for (int i=0;i<100;i++){ //100 zum Test, da 10000 zu lang dauert
      labels** = new JLabel("label");
      this.jPanel1.add(labels**);
      labels**.setBackground(Color.RED);

    }
    
  }

In dieser Methode gehe ich nun das Array bis Index [99] durch und schreibe jedes Mal ein neues Label in labels[]. Dabei gebe ich den Namen „label“ mit, wie es der Konstruktor verlangt. Danach fuege ich jedes Label aus labels[] auf das Panel ein und moechte den Background auf rot setzen. Dies funktioniert jedoch nicht. Kompiliert wird der Code und meine Gui sieht wie folgt aus:

Es wird also der Name angezeigt und Luecken gibt es demnach auch nicht. Wie kann ich eigentlich nun die Groesse auf 5x5 aendern? Warum wird der Hintergrund nicht auf rot gesetzt?
Wuerde mir new GridLayou(100,100) meine 100x100 Matrix ueberhaupt erstellen?

Der vollstaendige SourceCode ist auf ``` GUI - Pastebin.com

Vielen Dank schonmal.

Gruss
f10

wenn man mal in die API von [JAPI]GridLayout[/JAPI] geschaut hätte wäre vielleicht der Konstruktor mit 4 int- Parametern aufgefallen… Und die Bedeutung von 0 ist eigentlich auch gut beschrieben.

Ausserdem verlangt der Konstruktor von (J)Lable lediglich ein String-Objekt. Es steht nirgens, dass das nicht "" sein darf…

Achja: Dein Hauptproblem ist wohl dieses:cp.setLayout(null)

bye
TT

…oder ins Byte-Welt-Wiki: GridLayout

Achso, wegen dem roten Label. Dein Label muss undurchsichtig gesetzt werden.
Also: labels**.setOpaque(true);

[quote=f10] Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); int x = (d.width - getSize().width) / 2; int y = (d.height - getSize().height) / 2; setLocation(x, y);[/quote]
ginge kürzer mit setLocationRelativeTo(null);

Die relevanten Anmerkungen zu Deinem Problem wurden ja schon gemacht: Dem GridLayout kann man mitteilen wie viel Abstand zwischen den Komponenten eingehalten werden soll und JLabels sind transparent und müssen erst undurchsichtig gemacht werden, damit man auch deren Hintergrund sieht.
GridLayout und 100x100 Matrix hört sich eher nach Tabelle also JTable an. Ist allerdings kein Anfängerthema