Toon posts:

Java class vraagje.

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb het volgende probleem, wanneer ik onderstaand stukje code probeer te compilen, geeft de compiler een error in regel 35 "b.teken(g);". Can't resolve symbol (g), ik ben redelijk ten einde raad, welke tweaker kan mij helpen.

// oefenen met strings

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



public class Test extends Applet implements ActionListener
{
final int AANTAL_BALLEN = 3;
Button btKnop = new Button ("Nieuwe bal");
Bal b;


public void init ()
{
b = new Bal();
setLayout (null);
btKnop.setBounds(100,30,100,30);
btKnop.addActionListener(this);
add(btKnop);



}

public void paint (Graphics g)

{
}
public void actionPerformed (ActionEvent e)
{
if(e.getSource() == btKnop)
b.teken(g);

}
}

class Bal
{
int links = (int)(300*Math.random()+1);
int boven = (int)(240*Math.random()+1);
int lengte = (int)(10*Math.random()+10);
int breedte = (int)(10*Math.random()+10);

void teken (Graphics g)
{
g.setColor (Color.green);
g.fillOval (this.links, this.boven, this.lengte, this.breedte);

}

private void setWaarden (int links, int boven, int lengte, int breedte)
{
this.links = links;
this.boven = boven;
this.lengte = lengte;
this.breedte= breedte;
}


}

Verwijderd

code:
1
2
3
4
5
6
7
8
9
10
11
public void paint (Graphics g)

{
}
public void actionPerformed (ActionEvent e)
{
if(e.getSource() == btKnop)
b.teken(g);

}
}

Dat is niet goed, lege paint en je gebruikt ene graphics object in actionperformed waar je alleen this en een paramter e hebt.

  • Onno
  • Registratie: Juni 1999
  • Niet online
Op zaterdag 08 december 2001 15:42 schreef bleker het volgende:
Ik heb het volgende probleem, wanneer ik onderstaand stukje code probeer te compilen, geeft de compiler een error in regel 35 "b.teken(g);". Can't resolve symbol (g), ik ben redelijk ten einde raad,
Is 'g' dan ergens gedeclareerd? Ik zie 't niet hoor...

En gebruik voortaan de code-tag rond code, en spring netjes in. Dat maakt het een stuk leesbaarder:
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
// oefenen met strings

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



public class Test extends Applet implements ActionListener
{
  final int AANTAL_BALLEN = 3;
  Button btKnop = new Button ("Nieuwe bal");
  Bal b;

  public void init ()
  {
    b = new Bal();
    setLayout (null);
    btKnop.setBounds(100,30,100,30);
    btKnop.addActionListener(this);
    add(btKnop);
  }

  public void paint (Graphics g)
  {
  }

  public void actionPerformed (ActionEvent e)
  {
    if(e.getSource() == btKnop)
    b.teken(g);
  }
}

class Bal
{
  int links = (int)(300*Math.random()+1);
  int boven = (int)(240*Math.random()+1);
  int lengte = (int)(10*Math.random()+10);
  int breedte = (int)(10*Math.random()+10);

  void teken (Graphics g)
  {
    g.setColor (Color.green);
    g.fillOval (this.links, this.boven, this.lengte, this.breedte);

  }

  private void setWaarden (int links, int boven, int lengte, int breedte)
  {
    this.links =  links;
    this.boven = boven;
    this.lengte = lengte;
    this.breedte= breedte;
  }
}

Verwijderd

Topicstarter
Dank voor de snelle hulp, daar ik echter een enorme Java newbie ben, is er iemand die een oplossing aan zou kunnen willen bieden?

Verwijderd

Topicstarter
Het Applet moet bij het klikken op de button random een balletje op het scherm zetten.

  • ^Mo^
  • Registratie: Januari 2001
  • Laatst online: 04-11-2025
je kunt een boolean variable aanmaken, het teken( g) in de paint zetten, (met een if-statement er om heen die de boolean test) en dan in de actionevent zet je de boolean op true en roep je repaint() aan.

"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs


  • roelio
  • Registratie: Februari 2001
  • Niet online

roelio

fruitig, en fris.

je zegt hier:
code:
1
2
3
4
5
public void actionPerformed (ActionEvent e)
{
   if(e.getSource() == btKnop)
   b.teken(g);
}

dat methode teken() aangeroepen moet worden met als parameter g, maar je hebt noch in deze methode noch in de klasse van de methode de variabele of het object g gedeclareerd. Wat wil je dat er meegegeven wordt aan de methode teken() ??

Ik vind trouwens je commentaar bovenaan (// oefenen met strings) ook erg sterk :D, waar ben je hier dan aan het stringmanipuleren?

AMD Phenom II X4 // 8 GB DDR2 // SAMSUNG 830 SSD // 840 EVO SSD // Daar is Sinterklaas alweer!!


Verwijderd

Topicstarter
Helemaal niets. Ik zou graag willen dat er op het moment dat de knop ingedrukt wordt, de class bal een balletje op het scherm tovert. Ik vind het echter moeilijk om dit te formuleren onder actionPerformed.

Verwijderd

Topicstarter
Dat commentaar moet je overigens gewoon vergeten, is een basis applet waarop ik verder aan het werken was. Is hier voor de goede orde misschien wat afleidend.

  • Nappa
  • Registratie: Februari 2001
  • Laatst online: 15-09 18:51

Nappa

The Barbaric Saiya-jin!

Als er een bal op een random plaats gezet moet worden is deze code wel wat onhandig! Als je een Bal aanmaakt dan worden de waarden op random gezet. Maar om ze te veranderen moet je de method setWaarden gebruiken.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Bal
{
  int links = (int)(300*Math.random()+1);
  int boven = (int)(240*Math.random()+1);
  int lengte = (int)(10*Math.random()+10);
  int breedte = (int)(10*Math.random()+10);
  void teken (Graphics g)
  {
    g.setColor (Color.green);
    g.fillOval (this.links, this.boven, this.lengte, this.breedte);
  }
  private void setWaarden (int links, int boven, int lengte, int breedte)
  {
    this.links =  links;
    this.boven = boven;
    this.lengte = lengte;
    this.breedte= breedte;
  }
}

Als je nou zoiets hebt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Bal
{
  int links, boven, lengte, breedte
  void teken (Graphics g)
  {
    g.setColor (Color.green);
    g.fillOval (this.links, this.boven, this.lengte, this.breedte);
  }
  private void setRandomValues ()
  {
    links = (int)(300*Math.random()+1);
    boven = (int)(240*Math.random()+1);
    lengte = (int)(10*Math.random()+10);
    breedte= (int)(10*Math.random()+10);
  }
}

dan gaat dat toch wat schoner! (Trouwens doet die cast naar integer gelijk een Math.round()????)

Maar het gaat inderdaad fout met die g omdat die niet bekend is. g is een graphics object, maar die is niet bekend binnen de class Test (behalve dan in de (lege) method paint()).

Alles wat ik zeg kan en zal tegen u gebruikt worden
Scream! Suffer! Panic! | Dark-future Dawnbringer | Unofficial Mordor community


  • ^Mo^
  • Registratie: Januari 2001
  • Laatst online: 04-11-2025
Op zaterdag 08 december 2001 16:00 schreef bleker het volgende:
Helemaal niets. Ik zou graag willen dat er op het moment dat de knop ingedrukt wordt, de class bal een balletje op het scherm tovert. Ik vind het echter moeilijk om dit te formuleren onder actionPerformed.
stukkie code:
bovenin:
code:
1
boolean TekenenMaar = false;

stukkie verder:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
public void paint( Graphics g)
{
   if( TekenenMaar) b.teken( g);
}

public void actionPerformed( ActionEvent e)
{
   if( e.getSource() == btKnop)
   {
    TekenenMaar = true;
    repaint();
   }
}

is een optie..

"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs


Verwijderd

Topicstarter
Precies wat ik nodig had.......Mijn dank is groot.

  • Nappa
  • Registratie: Februari 2001
  • Laatst online: 15-09 18:51

Nappa

The Barbaric Saiya-jin!

Je vergeet dat de method paint(Graphics g) nu ook een parameter mee moet hebben. Wat geef je daaraan mee nu dan?

Alles wat ik zeg kan en zal tegen u gebruikt worden
Scream! Suffer! Panic! | Dark-future Dawnbringer | Unofficial Mordor community


  • ^Mo^
  • Registratie: Januari 2001
  • Laatst online: 04-11-2025
Op zaterdag 08 december 2001 16:08 schreef Nappa het volgende:
Je vergeet dat de method paint(Graphics g) nu ook een parameter mee moet hebben. Wat geef je daaraan mee nu dan?
err, wat bedoel je precies? de functie paint krijgt altijd een graphics object mee ... hoef je niet expliciet door te geven. En repaint() voert alleen paint opnieuw uit, hoeft ook geen argument te hebben...

"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs


  • Nappa
  • Registratie: Februari 2001
  • Laatst online: 15-09 18:51

Nappa

The Barbaric Saiya-jin!

Op zaterdag 08 december 2001 16:14 schreef _Mo_ het volgende:

[..]

err, wat bedoel je precies? de functie paint krijgt altijd een graphics object mee ... hoef je niet expliciet door te geven. En repaint() voert alleen paint opnieuw uit, hoeft ook geen argument te hebben...
Uhhh maar... Je zegt dat de paint functie altijd een graphics object mee krijgt. Okee. Maar ik zie helemaal nergens in de code een graphics object aangemaakt worden! :?
Of zie ik het nu helemaal verkeerd? Ik moet bekennen dat ik niet zoveel ervaring heb met de grafische kant van java... :D

Alles wat ik zeg kan en zal tegen u gebruikt worden
Scream! Suffer! Panic! | Dark-future Dawnbringer | Unofficial Mordor community


  • ^Mo^
  • Registratie: Januari 2001
  • Laatst online: 04-11-2025
Op zaterdag 08 december 2001 16:21 schreef Nappa het volgende:

[..]

Uhhh maar... Je zegt dat de paint functie altijd een graphics object mee krijgt. Okee. Maar ik zie helemaal nergens in de code een graphics object aangemaakt worden! :?
Of zie ik het nu helemaal verkeerd? Ik moet bekennen dat ik niet zoveel ervaring heb met de grafische kant van java... :D
dat hoeft ook niet. Paint wordt ook niet expliciet aangeroepen, dat wordt vanuit de applet gedaan, en dus ook een Graphics object meegegeven, en vanaf dat moment bestaat object g (of hoe je het ook noemt).

"There are 10 kinds of people in the world, those who understand binary and those who don't" | Werkbak specs

Pagina: 1