Avatar billede mtilsted Nybegynder
06. juni 2001 - 11:33 Der er 3 kommentarer

Billed ved curser

I mit java program vil jeg gerne have et lille billed som følger muse curseren. Men hvordan laver man egentlig det??? Mit program bestaar af en JFrame
samt en masse standart JComponenter.

Min første ide var at kalde getGraphics() paa min JFrame, men problemet er hvordan jeg saa sletter
det gamle billed naar musen flytter. Jeg kan ikke kalde repaint da det er alt for langsomt. Saa tænkte jeg paa om jeg ikke kunne flytte grafikken bag mit image over i en cache lige inden jeg tegner det. Saa kunne jeg flytte den tilbage naar billeded skulle flytte. Men saa vidt jeg kan se er det slet ikke muligt i java.

Er det virkelig ikke muligt at flytte en del af inholdet af et Graphics object over i et image object?

Det skal virke med java 1.1.8

Martin Tilsted
Avatar billede logical Nybegynder
07. juni 2001 - 17:55 #1
Jeg gaar ud fra, at du har komponenter nedenunder, der skal tegnes korrekt, for saa kan det ikke rigtigt lade sig goere paa en nem maade.

AWT anvender native komponenter til at tegne med, og kan derfor ikke paa nogen nem maade faa informationer baglaens til din kode. Det skyldes den brede platformssupport, der desvaerre skulle til. Alt hvad der er skrevet paa et Graphics er i princippet flyttet til skaermen og derfor uopnaaelig igen.

Maaden man goer den slags ting paa er at tegne et nyt billede hvergang, hvor informationen placeres der hvor man vil have den. Evt. anvendes dobbeltbuffer saa man undgaar \"flicker\". Operationen kan betale sig, og optimeres, hvis man kender det omraade, der oenskes gentegnet. (Det som man ioevrigt fortaeller i repaint metoden).

For at lave det du gerne vil, skal du lave en offscreen buffer paa stoerrelse med din skaerm, kalde hver af komponenternes paint metode med din graphics, og derefter tegne dit image ovenpaa. DIne komponenter kan saa ikke vaere synlige samtidig, saa du skal selv implementere translation af museevents til koordinater.

Det lyder rigtigt voldsomt, og det er det ogsaa. Det er saa godt som umuligt i ren AWT (Som jeg tror du mener med java1.1.8, selv om der var swing biblioteket ekstra til 1.1.8).

Hvis du istedet bevaeger dig over til swing, har du flere paneler oven paa hinanden i Z-order, dvs. \"oeverst\" har du et normalt usynligt vindue, og nedenunder i har du dine komponenter. De to paneler er henholdsvis glasspane og contentpane i swing komponenter.
(Kendt fra JFrame.getContentPane() og JFrame.getGlassPane())
Der kan du tegne din cursor paa glass pane og dine komponenter virker uden problemer.

Min anbefaling er, tilfoej jfc biblioteket til dit projekt, saa du faar swing med. Det giver dig flere muligheder, uden at du behoever at skifte fra 1.1.8 (Selv om jeg ogsaa vil anbefale det med tiden).
Avatar billede mtilsted Nybegynder
07. juni 2001 - 18:53 #2
Det maa gerne bruge swing(Der er swing 1.1.1 til jdk 1.1.8) men jeg kan ikke se hvordan det hjælper mig.
Avatar billede logical Nybegynder
11. juni 2001 - 14:16 #3
Er det her egentlig det samme som du spørger om i spørgsmål:

http://www.eksperten.dk/spm/79010

Ellers er jeg tilbage på min pind og fuld af gode ideer :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester