Probleme mit Löschen von JPanels

Status
Nicht offen für weitere Antworten.

Lemieux

Mitglied
Hallo!
Habe eine Art Breadcrum Menü geschrieben und will, wenn man jetzt auf ein Parent klickt alle Childs davon von einem JLabel in der PanelHeader-Klasse löschen. Habe alle Breadcrumelemente (auch JLabels) in eine Liste geschrieben, damit ich mittels for Schleife die Indizes zuweisen kann.
Ist ein Index kleiner Null, also negativ, so soll der Button gelöscht werden.

Die Berechnung funktioniert, leider gibts noch ein Problem in der if Anweisung.
Es wird nämlich nur jedes zweite Element gelöscht 🙁
Ich weiß auch an was es liegt, und zwar, dass wenn ich ein Element aus der Liste lösche, der size() auch um eines kleiner wird, finde aber derzeit einfach keine Lösung, einfach ne Blocke *gg*

Hier der Code:

Code:
        int iParentCount = getParentCount();

        for (int i = 0; i < olBreadcrum.size(); i++)
        {
            System.out.println(olBreadcrum.get(i).getText() + ": ");
            System.out.print(olBreadcrum.get(i).getParentCount());
            System.out.print(" - " + iParentCount);
            int iNewParentCount = olBreadcrum.get(i).getParentCount() - iParentCount;
            System.out.print(" = " + iNewParentCount + "\n");
            olBreadcrum.get(i).setParentCount(iNewParentCount);

            if (olBreadcrum.get(i).getParentCount() < 0)
            {
                PanelHeader.lBreadcrum.remove(olBreadcrum.get(i));
                olBreadcrum.remove(i);
            }
        }

Hier die Konsolenausgabe:
Code:
Gebäudeansicht: 
6 - 2 = 4
>>: 
5 - 2 = 3
Amtsgebaeude: 
4 - 2 = 2
>>: 
3 - 2 = 1
Erdgeschoss: 
2 - 2 = 0
>>: 
1 - 2 = -1
Das JPanel ">>" mit dem Endwert -1 wurde gelöscht!

Ein JPanel wird nicht gelöscht:
Code:
Daniel:
0 - 2 = -2



Bitte um Hilfe! 🙂

mfg
Lemieux
 
Auf Anhieb würd ich mal darauf tippen, dass das was du hier machst nicht das ist was du willst:

Code:
  for (int i = 0; i < olBreadcrum.size(); i++) { 

        ....

         if (olBreadcrum.get(i).getParentCount() < 0) {
                olBreadcrum.remove(i);
         } 
   }

Schreib mal noch ein i--; ans Ende in den Rumpf der If-Bedingung. Du überspringst ja so immer einen Eintrag, da durch das remove() die Liste um eins gekürzt wird.
 
Habe den Fehler gefunden! Musste nach dem Löschen ein repaint() aufrufen! Das i--; natürlich auch, das war mir aber auch klar, weil ich ja wusste, dass die Liste um 1 kleiner wird, nur durch das Probieren hab ich es mal versehentlich weggelassen 😉
Code:
        for (int i = 0; i < olBreadcrum.size(); i++)
        {
            System.out.println(olBreadcrum.get(i).getText() + ": ");
            System.out.print(olBreadcrum.get(i).getParentCount());
            System.out.print(" - " + iParentCount);
            int iNewParentCount = olBreadcrum.get(i).getParentCount() - iParentCount;
            System.out.print(" = " + iNewParentCount + "\n");
            olBreadcrum.get(i).setParentCount(iNewParentCount);

            if (olBreadcrum.get(i).getParentCount() < 0)
            {
                PanelHeader.lBreadcrum.remove(olBreadcrum.get(i));

                PanelHeader.lBreadcrum.repaint();              //DIESES REPAINT() HAT GEFEHLT!

                olBreadcrum.remove(i);
                i--;                                                            //DIESES i--; HAT AUCH GEFEHLT!
            }
        }




Danke,
Lemieux
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben