[java]Hoe mouseevent toevoegen aan bewegende ballen

Pagina: 1
Acties:
  • 100 views sinds 30-01-2008
  • Reageer

  • arjandijk162
  • Registratie: November 2000
  • Laatst online: 18-08 20:25
PHP:
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
 package project_4;

import java.awt.*;
import ia_animator.Animator;

/**
 * Title:        Project_4
 * Description:  Middag 4 v. Applicatiebouw
 * Copyright:    Copyright (c) 2003
 * Company:      UT
 * @author A Dijk 
 * @version 1.0
 */

 public class BalloonsApplet extends Animator
 {
  private Balloon b1,b2;



   public void startup()
  {
   
    b1 = new Balloon();
    b1.x = 50;
    b1.kleurtje = Color.yellow;
    Animator.write("Voer een ballon-diameter in voor ballon 1, en klik op Go");
    b1.setDiameter(50);
    b1.y = Animator.getSceneHeight() - b1.getDiameter();

    b2 = new Balloon();
    b2.x = 120;
    b2.kleurtje = Color.red;
    Animator.write("Voer een ballon-diameter in voor ballon 2, en klik op Go");
    b2.setDiameter(59);
    b2.y = Animator.getSceneHeight() - b2.getDiameter();

  }

  public void draw(int t, Graphics g)
  {
    b1.draw(g);
    b2.draw(g);
  }

}


PHP:
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
package project_4;

import java.awt.*;
import ia_animator.Animator;
/**
 * Title:        Project_4
 * Description:  Middag 4 v. Applicatiebouw
 * Copyright:    Copyright (c) 2003
 * Company:      UT
 * @author W.E.Helmich 0049832
 * @version 1.0
 */

public class Balloon
{
  private int diameter;
  public int x,y;
  public Color kleurtje;
  private int vy;

  public int getDiameter()
  {
    return diameter;
  }

  public void setDiameter(int waarde)
  {
    diameter = waarde;
    vy = -Math.max((diameter/10),1);
  }

  public void draw(Graphics g)
  {
    y = y + vy;
    if(y<0){Animator.getSceneHeight();}
    g.setColor(kleurtje);
    g.fillOval(x,y,diameter,diameter);
  }

}


Hier moet ik een listener aan toevoegen om een teller met één op te hogen als je op de bewegende ballen klikt, deze listener moet volgens mij in de startup, maar daar werktie niet. Juist als ik buiten een methode bijvoorbeeld "b1."tik krijg ik een lijst erachter met bijvoorbeeld addMouseListener, als ik m dan execute zegtie dat het commando daar niet hoort, zet ik m binnnen een method dat kannie de opdracht niet vinden

  • momania
  • Registratie: Mei 2000
  • Laatst online: 00:32

momania

iPhone 30! Bam!

Je zal 1 van je classes de mouseListener moeten laten implementeren.
Of de Balloon of de BalloonsApplet.
Doe je bv de BalloonsApplet dan diet dat er ongeveer zo uit:
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package project_4; 

import java.awt.*; 
import ia_animator.Animator; 

/** 
* Title:        Project_4 
* Description:  Middag 4 v. Applicatiebouw 
* Copyright:    Copyright (c) 2003 
* Company:      UT 
* @author A Dijk 
* @version 1.0 
*/ 

public class BalloonsApplet extends Animator implements MouseListener
{ 
  private Balloon b1,b2; 



   public void startup() 
  { 
    
    b1 = new Balloon(); 
    b1.x = 50; 
    b1.kleurtje = Color.yellow; 
    Animator.write("Voer een ballon-diameter in voor ballon 1, en klik op Go"); 
    b1.setDiameter(50); 
    b1.y = Animator.getSceneHeight() - b1.getDiameter(); 

    b2 = new Balloon(); 
    b2.x = 120; 
    b2.kleurtje = Color.red; 
    Animator.write("Voer een ballon-diameter in voor ballon 2, en klik op Go"); 
    b2.setDiameter(59); 
    b2.y = Animator.getSceneHeight() - b2.getDiameter(); 

    // hier kan je dan jezelf (de BalloonsApplet ) toevoegen als Listener aan een Balloon
    b2.addMouseListener(this);

  }

// ook moet de dan de standaard methodes uit 
// de MouseListener Interface implementeren
  public void mousePressed (MouseEvent me) {
    // reageer hier op een pressed event
  }
// de overige moet je maar even uit de documentatie halen...
//etc

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


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Je kan trouwens beter voor een interne class gaan:

Java:
1
2
3
4
5
6
7
8
9
10
class BaloonApplet extends Applet{

      public void startUp(){
         b2.addMouseListener(new MouseHandler());
      }

      private class MouseHandler extends MouseAdapter{
            public void mousePressed(MouseEvent e){...}
      }
}


Stel dat bij een parent ook al een mouse listener is geimplementeerd, en jij doet het bij deze applet nog een keer. Dan kan het voorkomen dat de parent niet goed meer functioneerd, omdat jij de methodes bij de super niet meer ingaat. Verder vind ik het ook wel zo netjes, anders krijg je een hele rits methoden waarvan je op den duur niet meer weet waar ze bij horen.

  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
offtopic:
*nitpicking* Als ik zo'n code zie word ik steeds misselijk - 2x bijna net hetzelfde code voor 2 ballonnetjes: Containers people - ik neem aan dat dit huiswerk is? . Als ik je prof was was je al direct geflest. No offence but better learn it good 1st time. Om nog maar te zwijgen van de mix van private en public members...

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Dit gaat waarschijnlijk niet werken want Balloon heeft geen methode addMouseListener want het is geen Component. Dus of je moet je Balloon laten extenden van Component of je moet dmv de coordinaten van je applet bepalen of je op je balletje hebt geklikt.

[ Voor 3% gewijzigd door Woy op 01-07-2003 12:19 ]

“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.”


  • arjandijk162
  • Registratie: November 2000
  • Laatst online: 18-08 20:25
hobbit_be schreef op 01 July 2003 @ 12:07:
offtopic:
*nitpicking* Als ik zo'n code zie word ik steeds misselijk - 2x bijna net hetzelfde code voor 2 ballonnetjes: Containers people - ik neem aan dat dit huiswerk is? . Als ik je prof was was je al direct geflest. No offence but better learn it good 1st time. Om nog maar te zwijgen van de mix van private en public members...
ja is huiswerk, en ik was bezig om het allemaal in een for lus te stoppen, maar dat werkte nog niet, uiteindelijk heb ik een array met een random aantal ballonnen gemaakt. Met de hulp van een paar mensen die het wel snapten is het uiteindelijk gelukt. Idd met coordinatenstelsel, het werkt maar is eigenlijk heel slordig. Op de hoeken is nl geen cirkel maar klik je wel raak, maar goed. Zal morgen de hele zooi wel ff posten, maar ik vind het wel jammer dat we geen listener op de ballonnen hebben kunnen zetten. Ik ga misschien nog even wat proberen met de suggesties, maar het is al ingeleverd
rwb schreef op 01 July 2003 @ 12:19:
Dit gaat waarschijnlijk niet werken want Balloon heeft geen methode addMouseListener want het is geen Component. Dus of je moet je Balloon laten extenden van Component of je moet dmv de coordinaten van je applet bepalen of je op je balletje hebt geklikt.
hebben we dus gedaan

Verwijderd

Alarmnummer schreef op 01 July 2003 @ 08:50:
Je kan trouwens beter voor een interne class gaan:

Java:
1
2
3
4
5
6
7
8
9
10
class BaloonApplet extends Applet{

      public void startUp(){
         b2.addMouseListener(new MouseHandler());
      }

      private class MouseHandler extends MouseAdapter{
            public void mousePressed(MouseEvent e){...}
      }
}


Stel dat bij een parent ook al een mouse listener is geimplementeerd, en jij doet het bij deze applet nog een keer. Dan kan het voorkomen dat de parent niet goed meer functioneerd, omdat jij de methodes bij de super niet meer ingaat. Verder vind ik het ook wel zo netjes, anders krijg je een hele rits methoden waarvan je op den duur niet meer weet waar ze bij horen.
Wow, dat ziet er heel netjes uit. Ik had wel al gehoord/gelezen over het gebruik van inner classes en dat dat voor event handlers handig was met gebruik van *Adapter classen. Maar nu dat ik jou code snippet heb gezien begrijp ik echt meteen dat het echt handiger is, vooral imo omdat je al die dummy methodes niet hoeft te schrijven om de interface wel te implementeren ook al doe je niks met die events.

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
arjandijk schreef op 02 July 2003 @ 01:53:
[...]
, maar ik vind het wel jammer dat we geen listener op de ballonnen hebben kunnen zetten. Ik ga misschien nog even wat proberen met de suggesties, maar het is al ingeleverd
Dit kun je dus bereiken door te extenden van een Component. Dan zal je ook wel een rechthoekig component hebben dus je zult ook wat code moeten schrijven dat je op de hoeken niet kunt klikken maar dat lijkt me niet zo moeilijk.

Hint: straal van een circel + middelpunt

“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.”


  • arjandijk162
  • Registratie: November 2000
  • Laatst online: 18-08 20:25
maar je moet de coordinaten van het niet beschikbare gedeelte weten

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
arjandijk schreef op 02 juli 2003 @ 12:38:
maar je moet de coordinaten van het niet beschikbare gedeelte weten
Hoe bedoel je "je moet de coordinaten van het niet beschikbare gedeelte weten" dit kan je toch gewoon uitrekenen. Je kan tussen 2 punten de afstand berekenen ( Middelpunt en het punt waar geklikt is ). Is dit groter als de straal van de cirkel dan is er buiten de cirkel geklikt.

“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.”

Pagina: 1