/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Opdatering af JTree's efter ændring af dat~
Fra : Karl Peder Olesen


Dato : 10-02-03 23:16

Hej,

Jeg sidder med en applikation, hvor man skal kunne editere data i en
træstruktur (et JTree). Jeg har lavet en custom TreeModel og på hver
node hænger der et dataobject. Når der klikkes på en node i træet,
bliver der vist et editor vindue (JInternalFrame), hvor man kan
editere dataobjectets attributter.

Dette virker for så vidt fint. Nu kunne jeg så godt tænke mig at træet
blev opdateret når der laves ændringer i editor vinduet (man kan
f.eks. ændre en name attribut, der anvendes som display tekst i
træet). Til dette formål har jeg lavet en event, som udsendes fra
editor vinduet - og modtages fra hovedklassen som holder træet.

Men hvad gør jeg så for at få lavet en (visuel) opdatering af træet??

Jeg har forsøgt med et simpelt kald som tree.repaint(). Det opdaterer,
men ikke godt nok. Hvis f.eks. display teksten bliver længere, bliver
ikke det hele vist. F.eks. ændring fra "element" til "special element"
vil blive vist som noget i retning af "special..." (med prikker når
teksten er længere end den oprindelige tekst).

Håber nogen "derude" har et bud!?

mvh
Karl Peder

PS: Jeg har forsøgt at skrive mig ud af det her - jeg kan ikke lige
umiddelbart overskue hvilken del af koden jeg skulle gengive for
forståelsens skyld.


 
 
Lars Dam (11-02-2003)
Kommentar
Fra : Lars Dam


Dato : 11-02-03 08:22

On Mon, 10 Feb 2003 22:15:46 GMT
kpo@mail1dotstofanetdotdk (Karl Peder Olesen) wrote:

> Hej,

træet). Til dette formål har jeg lavet en event, som udsendes fra
> editor vinduet - og modtages fra hovedklassen som holder træet.
>
> Men hvad gør jeg så for at få lavet en (visuel) opdatering af træet??

Umiddelbart vil jeg gætte på at din data klasse (modellen) skal sende en update event når data ændres, så vieweren kan opdatere grafikken.

Hvis du arver fra DefaultTreeModel, vil flg. måske virke:

fireTreeNodeChanged(...);


vh. ld


Karl Peder Olesen (11-02-2003)
Kommentar
Fra : Karl Peder Olesen


Dato : 11-02-03 23:19

On Tue, 11 Feb 2003 08:21:31 +0100, Lars Dam
<larsdam___YeahNoUnderscores_____@______post2.tele.dk> wrote:

<snip>
>> Men hvad gør jeg så for at få lavet en (visuel) opdatering af træet??
>
>Umiddelbart vil jeg gætte på at din data klasse (modellen) skal sende en update event når data ændres, så vieweren kan opdatere grafikken.
>
>Hvis du arver fra DefaultTreeModel, vil flg. måske virke:
>
>fireTreeNodeChanged(...);
>
Hej,

Jeg har nu arbejdet lidt på sagen og har udnyttet både ovenstående -
og hintet fra Ulrik omkring brug af reload(...). Tak for tippene.

Nu ligger det sådan at både fireTreeNodeChanged(...) og reload(...) er
metoder på DefaultTreeModel - og jeg har valgt at implementere min
egen model (implementerer TreeModel interfacet som det nu skal). Det
gav mig så lidt arbejde - og forhåbentlig meget lærdom.

Implementering blev (bare sådan hvis andre kunne få glæde af det):

1) Inkluder fireTreeNodeChanged(...) i model klassen. Den udsender
TreeNodesChanged events til listeners (hvoraf en åbentbart automatisk
er tree viewet - derfor success med visuel opdatering).

2) Implementer reload() i model klassen. Den gør følgende (kaldt med
en parameter = den node der er ændret:
a) Find path til parent og andet info, som skal bruges til
TreeNodeChanged eventet.
b) Kalder fireTreeNodeChanged(...)

Ideen er så at man der hvor man føler et pludseligt behov for
opdatering, kalder reload(...)

Tog lidt tid - men nu virker det. Tak for hjælpen

mvh
Karl Peder

Ulrik Magnusson (11-02-2003)
Kommentar
Fra : Ulrik Magnusson


Dato : 11-02-03 08:21



Karl Peder Olesen wrote:

> Hej,
>
> Jeg sidder med en applikation, hvor man skal kunne editere data i en
> træstruktur (et JTree). Jeg har lavet en custom TreeModel og på hver
> node hænger der et dataobject. Når der klikkes på en node i træet,
> bliver der vist et editor vindue (JInternalFrame), hvor man kan
> editere dataobjectets attributter.
>
> Dette virker for så vidt fint. Nu kunne jeg så godt tænke mig at træet
> blev opdateret når der laves ændringer i editor vinduet (man kan
> f.eks. ændre en name attribut, der anvendes som display tekst i
> træet). Til dette formål har jeg lavet en event, som udsendes fra
> editor vinduet - og modtages fra hovedklassen som holder træet.
>
> Men hvad gør jeg så for at få lavet en (visuel) opdatering af træet??
>
> Jeg har forsøgt med et simpelt kald som tree.repaint(). Det opdaterer,
> men ikke godt nok. Hvis f.eks. display teksten bliver længere, bliver
> ikke det hele vist. F.eks. ændring fra "element" til "special element"
> vil blive vist som noget i retning af "special..." (med prikker når
> teksten er længere end den oprindelige tekst).
>
> Håber nogen "derude" har et bud!?

Prøv at kalde reload() på den associerede model - det skulle gerne
gennemtvinge en opdatering af view'et.

Ulrik Magnusson


Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408925
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste