mehrere Panels einfügen

Schuri

Grünschnabel
Ich bin ganz verwirrt. Ich habe das eigentl. schon mehrmals gemacht und jetzt klappt es plötzlich nicht mehr. Ich möchte meiner Anwendung mehrere Steuerelemente zuweisen, die komplett selber arbeiten und auf die ich nie wieder ein Handle brauche, es sei denn, die Klasse gibt es von selbst zurück (ausnahmefall). Deshalb hab ich in meinem Frame-Konstruktor folgende Schleife gebaut:
Code:
        int color = 0;
        for (int i=0; i < 8; i++) {
            for (int j=0; j < 8; j++) {
                contentPane.add(new JFeldPanel(20 + j*20, 10 + i*20, (color == 0) ?  
                                                                                        Color.white : Color.black));
                color = 1 - color;
            }
        }

Und der fügt mir jetzt einfach nur noch das letzte Panel ein. Achja, die Klasse "JFeldPanel" ist von JPanel abgeleitet und positioniert einfach das Panel und setzt die Hintergrundfarbe (bisher, soll später noch mehr Funktionen übernehmen).

Ich habe aber in einem anderen Zusammenhang ähnliches gemacht und da sieht die Schleife so aus:
Code:
        // Komponenten hinzufügen
        JComponent component = new JPanel(); // Standardinitialisierung

        getContentPane().setLayout(null); // Da Element absolut positioniert werden

        for (int i=0; i < GetComponentsCount(); i++) {
            // Elementtyp erzeugen
            switch (elements[i].GetType()) {
            case 0: // Button
                component = new JButton(elements[i].GetTitle());
                break;
            }

            // Größe und Position des Elements übernehmen
            component.setBounds(elements[i].GetBoundingRect());

            // Element der ContentPane hinzufügen
            getContentPane().add(component);
        }

Und da funktioniert das alles super... Wo liegt mein Fehler?! Kann mir jmd. helfen?!
MfG, Schuri
 
servus!
das einzige was ich erkenne ist, dass du vergessen hast, die grösse des Feldpanels zu bestimmen. Danach würde es funktionieren,sofern du sonst keine Fehler gemacht hast ( was ich aufgrund des kleinen Code-Schnipsels nicht beurteilen kann).

*grüssle*
MeinerEiner

Nachtrag:
Was ich erst jetzt gelesen habe, du schreibst, es würde nur das letzte Panel angezeigt werden. Klingt danach, als ob du das Layout nicht auf null gesetzt hast
 
Zuletzt bearbeitet von einem Moderator:
Die Größe ist im Konstruktor der Klasse "JFeldPanel" festgelegt:

public class JFeldPanel extends JPanel {
// Variablen
private int xLocation, yLocation;
private Color backgroundColor;


public JFeldPanel(int x, int y, Color c) {
super();

xLocation = x;
yLocation = y;
backgroundColor = c;
}

public void paintComponent(Graphics g) {
setBackground(backgroundColor);
setSize(new Dimension(20, 20));
setLocation(xLocation, yLocation);

super.paintComponent(g);

// Graphikausgaben

}
}
 
Ich weis nicht, ob du meinen Nachtrag gelesen hast, daher schreib ichs nochmal:
Da du ja meintest, es würde nur das letzte Panel angezeigt werden, würde ich annehmen, du hast das Layout nicht auf null gesetzt.


*grüssle*
MeinerEiner
 
Zuletzt bearbeitet von einem Moderator:
Ok, das hatte ich in der Tat vergessen. Danke.
Aber jetzt seh ich gar nichts mehr :(

Das ist auch nicht besser :p
 
Ausserdem, setze mal die Anweisungen:
setBackground(backgroundColor);
setSize(new Dimension(20, 20));
setLocation(xLocation, yLocation);

aus der repaint methode in den konstruktor. diese anweisungen werden immer ausgeführt, wenn dein panel neu gezeichnet wird.. und ich nehme nicht das du die grösse oder so nochmal änderts, oder?

Ich hab das mal alles gemacht und bei mir läufts tadellos
 
Danke. Jetzt läuft es alles.
Ich war halt auch irritiert, weil es bei dem anderen Programm auch alles tadellos lief. Aber da hab ich das irgendwie alles intuitiv richtig gemacht :D

Danke ;)
 
Zurück