/ 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
Langsom tegning
Fra : AHM


Dato : 12-05-04 17:36

Hej Gruppe

Jeg har nedenstående kode, som i sin korthed går ud på, at der tegnes en
horisontal linje på panel'et der hvor musens markør befinder sig. Mit
problem er, at denne tegning foregår langsomt, hvilket medfører at den
horisontale linje er en smule efter markøren ved selv den mindste
markørhastighed.

Nogen som kan hjælpe mig med at optimere? På forhånd tak.

[TestApplet.java]

import java.applet.Applet;
import java.awt.*;

public class TestApplet extends Applet {
TestPanel testPanel = new TestPanel();

public void init() {
this.setLayout(new BorderLayout());
add(testPanel, BorderLayout.CENTER);
}
}

[TestPanel.java]

import java.awt.*;
import java.awt.event.MouseMotionListener;
import java.awt.event.MouseEvent;

public class TestPanel extends Panel implements MouseMotionListener {
Graphics graphics;
Image image;
Dimension dimension;

int currentMousePositionY;

TestPanel() {
this.addMouseMotionListener(this);
this.setBackground(Color.white);
}

public Dimension getPreferredSize() {
return new Dimension(250, 300);
}

public void update(Graphics g) {
paint(g);
}

public void paint(Graphics g) {
dimension = getSize();
image = createImage(dimension.width, dimension.height);
graphics = image.getGraphics();
graphics.setColor(Color.lightGray);
graphics.drawLine(0, currentMousePositionY, dimension.width,
currentMousePositionY);
g.drawImage(image, 0, 0, this);
}

public void mouseDragged(MouseEvent e) {
}

public void mouseMoved(MouseEvent e) {
currentMousePositionY = e.getY();
repaint();
}
}


 
 
Lars Dam (12-05-2004)
Kommentar
Fra : Lars Dam


Dato : 12-05-04 18:53

On Wed, 12 May 2004 18:36:29 +0200
AHM <nej@tak.dk> wrote:

> Hej Gruppe
>
> Jeg har nedenstående kode, som i sin korthed går ud på, at der tegnes en
> horisontal linje på panel'et der hvor musens markør befinder sig. Mit
> problem er, at denne tegning foregår langsomt, hvilket medfører at den
> horisontale linje er en smule efter markøren ved selv den mindste
> markørhastighed.
>
> Nogen som kan hjælpe mig med at optimere? På forhånd tak.

Lav image't uden for paint() rutinen - for at sikre den rette størrelse, så brug
en component listener der ændre imaget hver gang komponenten resizes.


> [TestApplet.java]


vh. ld

Niels Dybdahl (17-05-2004)
Kommentar
Fra : Niels Dybdahl


Dato : 17-05-04 09:56

> Nogen som kan hjælpe mig med at optimere? På forhånd tak.

Ofte klarer man sådanne problemer ved ikke at bruge en fuld "repaint" hver
gang der skal ændres noget.
Istedet gentegner man kun det der skal ændres, f.eks direkte fra mouseMoved
funktionen.
Det bedste resultat nås ofte ved at linien tegnes med en XOR funktion, så
den kan fjernes igen med en XOR funktion. Så har man reduceret tegneopgaven
fra en total gentegning af hele panelet til to linietegninger.

Niels Dybdahl



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

Månedens bedste
Årets bedste
Sidste års bedste