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