Problem mit remove(Component)

takidoso

Erfahrenes Mitglied
Halli hallo,
Es ist cshon wirklich drollig. ich habe eine Anwendung die je nach Berechtigung entsprechende Buttons in diversen Panels anzeigen oder nicht anzeigen soll.
Dafür verwende ich eigetnlich add(Component) bzw remove(Component)
Nun Stelle ich aber fest das das remove nich sonderlich zuverlässig zu sein scheint.
Ein Blick in die Java sourcen offenbart folgende Routine
--------------------------------------------------------------------------
Code:
    /** 
     * Removes the specified component from this container.
     * @param comp the component to be removed
     * @see #add
     */
    public void remove(Component comp) {
	synchronized (getTreeLock()) {
	    if (comp.parent == this)  {
    		/* Search backwards, expect that more recent additions
		 * are more likely to be removed.
    	    	 */
		Component component[] = this.component;
		for (int i = ncomponents; --i >= 0; ) {
		    if (component[i] == comp) {
    	    	    	remove(i);
		    }
		}
	    }
	}
    }

--------------------------------------------------------------------------
Also zunächst verstehe ich nicht warum eigentlich hier einem Component[] als Variable die entsprechende Member zugewiesen wird, zumal diese absolut typengleich ist. allerdings ist dies nciht mein eigentliches Problem.
Die Routine hat in ihrer Fallunterscheidung if (comp.parent == this) die Anweisung zu removen aber sie tut nix, wenn dieses Container nicht das Parent der gegebene Component ist. Soweit so gut.
Aber was kann einen Button der auf einem Panel ist veranlassen nicht den Container auf dem er liegt als parent gelten zu lassen? Denn diese Fallunterscheidung schlägt bei mir fehl und der Button wird nicht removed.

für Hinweise besten Dank im Voraus,

takidoso
 
Du musst die Componente sich neu initialisieren lassen.
mit Component.validate(); probier das mal aus müsste eigenltich funktionieren.
Greetz Steff
 
ah ich habe meinProblem gefunden,
ich hatte das Panel auf dem der Button liegt abgleitet und da es ein zusammengesetztes ist habe ich die die add-Mehtoden überschrieben (delegiert an das eigetnlcihe Panel wo die Buttons erscheinen sollen) aber vergessen das selbe mit den remove-methoden zu tun.
Meine Güte, das ist immer so eine Sache wenn das ursprüngliche Entwickeln der Anwendung so ewig zurückliegt, da hilft nur Analysieren bis zum letzen Etwas.

takidoso
 

Neue Beiträge

Zurück