|
| 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
| |
|
|