Toon posts:

[Java] Applet paint functie zonder legen scherm ?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met het maken van een schoolopdracht.
Het is de bedoeling dat het een soort tekenprogrammatje wordt.., je kan via knoppen instructies geven aan een schilpad, naar links naar rechtsk, omdraaien x aantal pixels vooruit etc.

Nu is het probleem er moet iedere keer een lijn BIJ getekend worden.. dit wil mij niet goed lukken..

Wat is het gemakkelijkst om een paint methode aan te roepen die slechts 1 lijn tekent !

Ik wil GEEN dimensionale array of iets dergelijks om alle coordinaten op te slaan maar zodra er op de knop gedrukt wordt moet er gewoon een lijn bij komen...

g.drawLine(x,x,x,x) kan niet in de actie methode omdat je de g. dingus nog niet hebt...

De code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import java.awt.*;
import java.applet.Applet;
import java.awt.event.*;

public class Puzzel1 extends Applet implements ActionListener {

   private Button pen_naar_boven,pen_naar_beneden;
   private Button naar_links,naar_rechts,x_naar_voren;
   private int pixels=100;
   private int richting=1,co1,co2,pos1=0,pos2=0;

   public void init() {
      pen_naar_boven = new Button("pen naar boven");
      add(pen_naar_boven);
      pen_naar_boven.addActionListener(this);
      pen_naar_beneden = new Button("pen naar beneden");
      add(pen_naar_beneden);
      pen_naar_beneden.addActionListener(this);
      naar_links = new Button("90 naar links");
      add(naar_links);
      naar_links.addActionListener(this);
      naar_rechts = new Button("90 naar rechts");
      add(naar_rechts);
      naar_rechts.addActionListener(this);
      x_naar_voren = new Button("n pixels naar voren");
      add(x_naar_voren);
      x_naar_voren.addActionListener(this);
   }

   public void paint(Graphics g) {
    g.drawLine(pos1,pos2,co1,co2);
    pos1=co1;
    pos2=co2;
   }

   public void actionPerformed(ActionEvent event) {
     if (event.getSource() == naar_links) {
       if (richting == 1)       
         richting = 4;
       else
         richting = richting-1;
     }
     if (event.getSource() == naar_rechts) {
       if (richting == 4)      
         richting = 1;
       else
         richting = richting+1;
     }
     if (event.getSource() == pen_naar_beneden)
    richting = 3;
     if (event.getSource() == pen_naar_boven)
    richting = 1;
     if (event.getSource() == x_naar_voren){
    switch(richting){
        case 1 : { 
               co1 = pos1;
               co2 = pos2-pixels;
               break;
              }
        case 2 : {
               co1 = pos1+pixels;
               co2 = pos2;
               break;
             }
        case 3 : {
               co1 = pos1;
               co2 = pos2+pixels;
               break;
             }
        case 4 : {
               co1 = pos1-pixels;
               co2 = pos2;
               break;
             }
        default: break;
    }
     repaint();
   }}
      
}


Kan iemand mij helpen ?

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Je zou gebruik kunnen maken van een offscreen image en deze dan op het scherm tekenen. Als je je hele scherm niet wilt wissen kan je natuurlijk ook gewoon de Update methode overriden en hier het scherm niet wissen.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • Eelke Spaak
  • Registratie: Juni 2001
  • Laatst online: 27-05 10:14

Eelke Spaak

- Vlad -

Je kan twee Lists maken waar je steeds de nieuwe coördinaten inzet. In je paint() functie loop je dan die twee Lists door en teken je steeds een lijn tussen (x1,y1) en (x2,y2) en tussen (x2,y2) en (x3,y3) etc.

TheStreme - Share anything with anyone


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 19:57

Robtimus

me Robtimus no like you

Verwijderd schreef op 29 november 2003 @ 16:24:
g.drawLine(x,x,x,x) kan niet in de actie methode omdat je de g. dingus nog niet hebt...
Applet is een afstammeling van Panel, en heeft een getGraphics() method. Deze geeft je Graphics object g terug, en daarmee zou je moeten kunnen tekenen. Kijk daar maar eens naar.

More than meets the eye
There is no I in TEAM... but there is ME
system specs