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?
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).
Ellers er jeg tilbage på min pind og fuld af gode ideer :-)
Synes godt om
Ny brugerNybegynder
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.