webForumDet fria alternativet

Problem med uppdatering

4 svar · 366 visningar · startad av SnowJim

SnowJimMedlem sedan sep. 200420 inlägg
#1

Tja!

Mitt program skriver ut ritningar till två JEditorPanels och visar skildnaden(genom olika färger)

När det är större ritningar(med mycket text) så hackar det en hel del när man scrollar ner, och detta gör att ibland så blir färger o limnande väldigt konstiga.

En stor anledning till att det går så långsamnt är att den klass som skriver ut Texten inehåller två strängar, en med texten och en med färgkoden till text strängen

Basicstr = "Hej på er"
Markedstr = "000055066"

i detta fallet färgas på och er i olika färger medan resten är svart(som vanligt)

När den så ska skriva ut de stora ritningarna så går mycket tid åt till att den går ingeom loopar (bokstav för bokstav) sätter färger och skriver ut på en viss position.

Jag jag försökt komma ifrån detta genom att skriva det till en bild första gången, och om bilden blir för stor för minnet(stor ritning) så får man bläddra mellan sidorna med hjälp av en knapp. Men att scrolla en bild som innehåller kanske 5 sidor verkar ändå ganska segt, det händer att det blir fel här o där(särskilt om man scrollar snabbt). Det ä alltså endast första gången den skapar bilden sen ritar den bara om bilden när man scrollar.

Så nu måste jag hitta ett bättre sätt!!!!

Jag har funderat på om man skapar html sidor utifrån ritiningarna och visar det i en JEditorPane, då tror jag det skule flyta på rätt bra. Problemet är att det blir inte lätt att bygga upp sidan med hjälp av html efter som man inte kan skriva ut pilar, text o liknande på en angiven kordinat utan måste istället använda tabeller o liknande.

Sen verkar det som om Javas stöd för HTML inte är någon höjdare.

Jag har även funderat lite på om man skapar en klass som lagrar ner informationen på ett enkelt sätt, alltså där den inte behöver gå igenom tecken för tecken varje gång den ska rita utan gör deta endast när den laddar in sidan(1 gånge).

Problemet kvar står dock lite med poisioneringen av text raderna, men man kan ju bygga något system där man sprar ner rad för rad och skriver ut dem rad för rad.

Så klart har jag provat använda Scrollpane på min JEditorpane, och detta borde fixat problemet så att det inte måste gå in o kallkulera färger o sådant varje gång, men det gör den inte?? Den måste gå in o göra detta annars skrivs inget ut när man scrollar.

Skule vara väldigt tacksam om någon kan hjälpa mig med detta!!

MVH
Jimmy

spangoMedlem sedan juni 20006 147 inlägg
#2

Re: Problem med uppdatering

SnowJim skrev:

Jag har även funderat lite på om man skapar en klass som lagrar ner informationen på ett enkelt sätt, alltså där den inte behöver gå igenom tecken för tecken varje gång den ska rita utan gör deta endast när den laddar in sidan(1 gånge).

Jag måste erkänna att jag inte till hundra procent fattar vad du gör, men det här låter som rätt spår. Du ska för Guds skull inte göra om alla uträkningar varje gång du renderar, gör det när informationen förändras i stället.

SnowJimMedlem sedan sep. 200420 inlägg
#3

Jo jag har börjat jobba lite med defaultStyleDocument, men jag hittar inte mycket info om hur det verkligen fungerar.

Jag kan lägga till text och det fungerar utmärkt(inget lagg)

Men grejen är att jag behöver ju kunna positionera ut text där jag vill ha den och även rita i detta documentet, går detta att genomföra? vad jag förstår så radar den själv upp texten och om det inte får plats i JTextPane så hänar texten på nästa rad!!, detta vill jag inte, jag vill att det ska gå utan för efter som jag måste hålla de rätta måtten på sidan.

Hur gör jag sen med grafik? det verkar inte gå att få ut någon Graphics objekt ur defaultStyleDocument, och i såfall kanske jag måste rita ut symboler o ritningar för sig och sen accosiera texten med JTextPane? om så är fallet måste det ju vara ganska stor risk att text och ritning inte hamnar där det ska?

Tacksam för hjälp!

MVH
Jimmy

spangoMedlem sedan juni 20006 147 inlägg
#4

Något Graphics-objekt får du inte ut ur ditt Document, du får subklassa JEditorPane och överlagra dess paintComponent (och glöm inte bort att, det första du gör, anropa super.paintComponent, annars blir det trist).

SnowJimMedlem sedan sep. 200420 inlägg
#5

Jag har kommit en lite bit på vägen nu.

Jag har en klass som sparar ner text strängar i en array med dess position och färg.

Så först så när man väljer att gå in på en sida så går den först igenom tecken för tecken för att sortera ut forområdena med ord, sen ett object i arrayn skrivs ut med en fäg medan ett annat object skrivs ut med en annan färg.

När allt är ner sparat så kalls paint metoden för JPane där texten ska visas, och då skickas dess graphics object vidare till klassen som håller orden, i denna skrivs varje ord ut på rätt position och med rätt färg.

Sen nästa gång som man scrollar så verkar den som om scrollen sköter resten, jag behöver alltså inte gå in i min array o skriva ut det till skärmen igen, utan allt detta verkar scrollen fixa själv.

Men det går ganska långsamnt ändå att scrolla, visst det är bättre än förut, om det är fortfarande ganska segt, och jag vill inte tänka på hur segt det blir sen när det kommer köras på långasammare clienter.

Kan det hjälpa att använda en JTextPane istället? jag har lyckats läsa in texten till en sådan, men scrollen verkar inte vilja fungera på dem, vad är det som man ska tänka på ?

jag sätter alltså setPreferredSize på området som jag skriver ut på, och detta fungerar när jag använder JPane men när jag går över till JTextPanel så fungerar det inte, scroll listerna finns där, men det finns inget att scrolla med trotts att sidan är större än vad man kan se.

Hoppas någon kan hjälpa mig med dessa problemen!

och jag använder dubbelbuffering redan på JPanel objektet

//Jimmy

Genererad på 379 ms · cache AV · v20260730165559-full.f96bc7eb