/ 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
Swingkomponent - lifecycle
Fra : Soren


Dato : 27-08-03 23:10

Hejsa,

Jeg har en JTree - kunne for så vidt også være en anden JComponent - som
jeg gerne vil skrive ud med java.awt.print.*. Der er noget snask som
kalder print(Graphics g) metoden på JComponenten, som pr. default
implementation kalder videre til paint(g).

Så langt så godt. Hvis den komponent jeg vil skrive ud bare er
instantieret og initialiseret med f. x. TreeModel, men ikke er blevet
addet til en container som før eller siden bliver vist på skærmen,
kommer komponenten slet ikke med på udskriften. Den har size 0*0. Naive
forsøg på at sige setSize(getPreferredSize()) nytter ikke.

Så, hvad sker der egentlig med tilstanden i en Component når den bliver
sat i en synlig Container, og kan jeg få samme virkning uden at skulle
vise Componenten ?


Og en anden ting, med JTrees : Som det er lige nu, bruger jeg en instans
af et JTree til udskrift, som er indsat på en JScrollPane. Et kig på
getPreferredSize() på træet afslører at preferred size er stor nok til
at vise hele træet, selvom viewporten i scrolleren ikke viser det hele.
Men når kalder print(Graphics) på træet, er det som om træet krymper :)
Jeg mener, navnene udfor knuderne bliver kortet af og slutter med "...".
Jeg har sat clip på Graphics instansen op til at dække hele sidens
bredde, men træet - med dets forkertede navne - er meget smallere.

- Kender nogen en god forklaring ? Jeg skulle da ikke mene at det
egentlig kan have noget med clippet at gøre at træet laver "..." - for
så ville et træ vel også gøre det ved nogle reparations-paint med et
lille clip, og det skal det jo ikke. Men kan det være fordi træet er
indsat i scrolleren ? Er der noget generelt forkert i at jeg forventer
at trækomponentens rendering når jeg kalder paint(Graphics) ikke er
afhængig af hvad der er over træet i containment hierakiet ?

Swing forwirrer mig stadig.

MVH
Søren


 
 
Ulrik Magnusson (29-08-2003)
Kommentar
Fra : Ulrik Magnusson


Dato : 29-08-03 22:56



Soren wrote:

> Hejsa,
>
> Jeg har en JTree - kunne for så vidt også være en anden JComponent - som
> jeg gerne vil skrive ud med java.awt.print.*. Der er noget snask som
> kalder print(Graphics g) metoden på JComponenten, som pr. default
> implementation kalder videre til paint(g).
>
> Så langt så godt. Hvis den komponent jeg vil skrive ud bare er
> instantieret og initialiseret med f. x. TreeModel, men ikke er blevet
> addet til en container som før eller siden bliver vist på skærmen,
> kommer komponenten slet ikke med på udskriften. Den har size 0*0. Naive
> forsøg på at sige setSize(getPreferredSize()) nytter ikke.
>
> Så, hvad sker der egentlig med tilstanden i en Component når den bliver
> sat i en synlig Container, og kan jeg få samme virkning uden at skulle
> vise Componenten ?

Kig på java.awt.Component.isDisplayable() og java.awt.Component.addNotify().

Du kan evt. lave en usynlig Frame som du lægger dit Component objekt på og
kalder pack(). Jeg har ikke eksperimenteret med at kalde addNotify()
direkte.

Ulrik Magnusson




Søg
Reklame
Statistik
Spørgsmål : 177459
Tips : 31964
Nyheder : 719565
Indlæg : 6408188
Brugere : 218881

Månedens bedste
Årets bedste
Sidste års bedste