[Java Swing] detecteren van remove

Pagina: 1
Acties:

  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
simpel probleempje maar na een uurtje zoeken nog niets gevonden:

als ik een removeAll() doe op een container wil ik dat sommige 'children' weten
dat ze geremoved worden. Maar vind er niets over:

dus zoiets als
Java:
1
2
3
4
void onRemove()
{
    //clean myself?
}


Voorlopig heb ik zelf maar een interface geschreven maar dit moet toch echt wel ergens in swing steken?

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Ik geloof dat je ff de setParent moet checken. Als een child geremoved wordt van een container dan wordt de parent van dat child genulled (anders zouden geremovede componenten nooit gegc`d worden door de strongref. naar de parent).

[edit]
ik zie trouwens dat de getParent wel aanwezig is,maar de setparent niet. Check anders de sourcecode even van remove bij Container. Je ziet dan wel wat aangeroepen wordt op de component. Het kan trouwens zijn dat ze dat afgeschermt hebben.

zie trouwens: http://java.sun.com/j2se/...nt/ComponentListener.html
Ik denk dat je het hiermee wel voor elkaar krijgt.

En waarom gebruik je trouwens geen finalizer?? Die is gemaakt om allerlei opruimacties uit te voeren.

[ Voor 81% gewijzigd door Alarmnummer op 19-03-2003 14:40 ]


  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
finalize gaat niet omdat de child kan zeggen dat ie niet geremoved mag worden (ie dataconsistency) en hij moet wel direct iets kunnen doen.. (als reactie op UI-event)

die listener had ik al gezien maar not applicable... ik zal dus maar gaan snuffelen in remove he :)...

lovely Swing... (puke)

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

hobbit_be schreef op 19 March 2003 @ 14:51:
finalize gaat niet omdat de child kan zeggen dat ie niet geremoved mag worden (ie dataconsistency) en hij moet wel direct iets kunnen doen.. (als reactie op UI-event)

die listener had ik al gezien maar not applicable... ik zal dus maar gaan snuffelen in remove he :)...

lovely Swing... (puke)
Dit is absoluut geen argument om te zeggen dat Swing sucks imho. Swing zit duidelijker in elkaar dan menig ander widgetset. Kijk maar naar die bagger die bij delphi zit, of bij .NET. Het is wel gecompliceerd en daardoor kan er enige verwarring over ontstaan. Als je swing nou bagger vond omdat het zo traag is als de pest en dat het nergens op lijkt, dan kan ik je wel gelijk geven :)

En ik zie verder niet in waarom je niet met een component listener kan werken. Als je wilt dat een component iets gaat doen als hij geremoved wordt, dan zou je hem die componentlistener interface kunnen laten implementeren.

code:
1
2
3
4
5
6
7
8
9
10
11
class LiefComponent extends Component{
    public LiefComponent(){
          addComponentListener(new ComponentListenerImpl());
    }
    
    private class ComponentListenerImpl extends ComponentAdatper{
          public void removed(ComponentEvent e){
                //leuke actie:
          } 
    }      
}


Trouwens een component kan meerdere keren gefinalized worden. Als een component voor gc in aanmerking komt, dan wordt de finalizer aangeroepen. Als je toch vind dat je component niet verwijderd kan worden, dan zorg je ervoor dat er een strongreference naar dat object is.

zie dit voor meer info over gc.

[edit]
oeps.. removed(ComponentEvent e) is geen methode in die interface :X

[ Voor 18% gewijzigd door Alarmnummer op 19-03-2003 15:10 ]


  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
okok - swing zuigt niet volledig - i hou best van MVC approach :) (gisteren weer 1 uur kwijtgeraakt om te ontdekken wanneer een JComponent echt van content is veranderd - niet InputMethodListerner dus maar een listener op het model , logisch ja maar waarom dan nog InputMethodListener?). Traagheid neem ik erbij op het moment (alles wat ik doe is toch zo abstract dat ik gerust op een dag of twee alles naar SWT krijg). Zoals je zelf aanhaalt die component event doet in feite niets nuttigs :) - ook eeen HierarchyListener werkt niet...

geef het effe op heb gewoon een interface aan klasses gegeven...