Toon posts:

[JAVA] paint probleem

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ben sinds kort bezig met JAVA. Nu probeer ik enkele ideeën uit te werken en zit met het volgende probleem:

Via de methode paint() kunnen er verschillende vormen (vierkant, cirkel,...) getekent worden in een applet. Ik veronderstel dat het ook mogelijk is om een apparte klasse "Tekening" te maken (waarin er verschillende vormen getekent worden) en deze vanuit een andere klasse op te roepen om dan de tekening in het applet te tekenen... Hoe kan je de tekening op het applet laten tekenen vanuit een andere klasse?

Hier zijn mijn 2 klassen:


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

public class Main extends Applet {


public Main() {
//Dit lijkt mij de meest logische manier om de tekening op te roepen
//en op het applet te tekenen.... werkt niet helaas....
Tekening a = new Tekening(0,0);
}
}


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

public class Tekening{

//x en y zijn de X en Y waarden in het applet, waar de tekening moet komen
public Tekening(int x, int y) {

}

public void paint(Graphics g)
{
g.setColor(Color.green);
g.fillRect(x+50,y+100,600,250);
g.setColor(Color.black);
g.drawRect(x+50,y+100,600,250);
}
}


Op deze manier lukt het me dus niet, de compiler haalt er geen fouten uit maar de tekening komt niet in het applet. Als ik de methode paint in de klasse Main zelf zet, dan wordt de tekening wel weergegeven.

Heb al op java.sun.com gezocht en niks bruikbaar gevonden, kan iemand mij hiermee helpen? Alvast bedankt.

  • LegacyCode
  • Registratie: Maart 2002
  • Laatst online: 23-08 14:55

LegacyCode

De crack van de division

Zet eens
a.paint(a);
achter Tekening a = new Tekening(0,0);
Je instantieert wel een nieuw tekenfiguur,
maar je roept de paint method niet aan.

legacycode.net


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 21:25
(jarig!)
Of je voegt je laat je Tekening van Component erven (want dat is het feitelijk) en dan kun je 'm gewoon added aan je Applet, want dat is een Container.

Als je dat per se niet wilt, kun je de paint methode van je applet overriden en daar "a.paint(g)" aanroepen (ik neem aan dat JUNKIE_XL dat ook bedoelde, maar wat hij suggereert gaat niet werken).

Verwijderd

Topicstarter
Als ik "a.paint(a)" aanroep, dan krijg ik de volgende foutmelding:

Error #: 300 : method paint(Tekening) not found in class Tekening

Raar... de methode paint staat er toch? :? :/

  • momania
  • Registratie: Mei 2000
  • Laatst online: 22:41

momania

iPhone 30! Bam!

Wa je moet doen is zorgen dat je class Tekening de Graphics meekrijgt van je Applet.
Je class Tekening heeft geen Canvas om op te tekenen.
Je kan dan dus bv. een methode in Tekening maken als:
Java:
1
2
3
public void tekenOpApplet(Graphics g) {
   // hier iets tekenen
}

En dan in je Applet class ergens een nieuwe instantie van Tekening aanmaken.
Dan met de volgende code tekenen op je applet:
Java:
1
2
Tekening tek = new Tekening(0,0);
tek.tekenOpApplet(this.getGraphics());

Neem je whisky mee, is het te weinig... *zucht*


Verwijderd

Topicstarter
Momania, heb m'n code gewijzigd. Geeft geen fout tijdens compileren, maar ik krijg niks te zien als ik de code uitvoer (zelfs niet m'n applet).

Verder krijg ik de volgende opmerking:

The applet Main does not have a public constructor Main()

  • momania
  • Registratie: Mei 2000
  • Laatst online: 22:41

momania

iPhone 30! Bam!

Verwijderd schreef op 01 november 2002 @ 18:17:
The applet Main does not have a public constructor Main()
Dan lijkt het er op dat je public Main() methode weg hebt gehaald...
Dat had je dus niet moeten doen..

Ook kan je in je class Main een methode public void init() maken.
Dit is een abstracte methode van de class Applet die je kan overschijven en
automatisch aangeroepen wordt als je je Applet opstart.

Ook is het verstandig om na de aanroep van je 'paint' methode van je Tekening
class even een repaint(); aan te roepen...

Neem je whisky mee, is het te weinig... *zucht*


Verwijderd

Topicstarter
Methode public Main() staat er nog steeds... Zo ziet m'n code er nu uit, met dus nog steeds die opmerking van "applet Main does not have a public constructor Main()":


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

public class Main extends Applet {


public Main() {
Tekening tek = new Tekening(0,0);
tek.tekenOpApplet(this.getGraphics());
}

public void init() {
}
}

Zou juist moeten zijn? :/

Verwijderd

Verwijderd schreef op 01 november 2002 @ 19:14:
Methode public Main() staat er nog steeds... Zo ziet m'n code er nu uit, met dus nog steeds die opmerking van "applet Main does not have a public constructor Main()":


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

public class Main extends Applet {


public Main() {
Tekening tek = new Tekening(0,0);
tek.tekenOpApplet(this.getGraphics());
}

public void init() {
}
}

Zou juist moeten zijn? :/
Je code zou gewoon moeten werken.
Wat je trouwens ook kan doen is je eigen klasse Canvas laten extenden. Dan krijgt hij zijn eigen paint(Graphics g) functie die ook automatisch wordt aangeroepen zoals bij de paint van de applet gebeurd.

Verwijderd

Topicstarter
Verwijderd schreef op 01 november 2002 @ 19:33:
[...]


Je code zou gewoon moeten werken...
Ja, "zou moeten" werken... ik krijg nog steeds die foutmelding... :?

Verwijderd

Java:
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
import java.awt.*;
import java.applet.Applet;

public class Main extends Applet {
  Tekening t;

  public Main (){
    t = new Tekening(0.0);
  }

  public void paint (Graphics g){
    t.showDrawing(g);
  }
}


public class Tekening {

  private int x,y;

  public Tekening (int x, int y){
    this.x=x;
    this.y=y;
  }
  
  public void showDrawing (Graphics g){
    g.setColor(Color.green);
    g.fillRect(x+50,y+100,600,250);
    g.setColor(Color.black);
    g.drawRect(x+50,y+100,600,250);
  }
}

[ Voor 0% gewijzigd door Verwijderd op 02-11-2002 15:38 . Reden: [/code] vergeten ]


Verwijderd

Topicstarter
Verwijderd schreef op 02 november 2002 @ 15:31:
Java:
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
import java.awt.*;
import java.applet.Applet;

public class Main extends Applet {
  Tekening t;

  public Main (){
    t = new Tekening(0.0);
  }

  public void paint (Graphics g){
    t.showDrawing(g);
  }
}


public class Tekening {

  private int x,y;

  public Tekening (int x, int y){
    this.x=x;
    this.y=y;
  }
  
  public void showDrawing (Graphics g){
    g.setColor(Color.green);
    g.fillRect(x+50,y+100,600,250);
    g.setColor(Color.black);
    g.drawRect(x+50,y+100,600,250);
  }
}
Yep yep, het werkt... :) :*)

Weet er toevallig iemand wat nu de beste manier is om dezelfde tekening achteraf te repainten op een andere positie?

Alvast badankt!

Verwijderd

Topicstarter
Heb de oplossing juist gevonden... toch bedankt voor alle hulp!

  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

Verwijderd schreef op 02 november 2002 @ 15:56:
[...]


Yep yep, het werkt... :) :*)

Weet er toevallig iemand wat nu de beste manier is om dezelfde tekening achteraf te repainten op een andere positie?

Alvast badankt!
De makkelijkste manier daarvoor is om het nulpunt te verleggen. Je hoeft dan in je tekenalgoritme niets te veranderen. En de tekening wordt toch op de juiste plek getekend.

Dat nulpunt verleggen doe je met de functie translate van het Graphics object:
http://java.sun.com/j2se/...aphics.html#translate(int, int)

edit: bug in URL script :) die haakjes horen erbij..
Pagina: 1