Toon posts:

[java] mousehandler

Pagina: 1
Acties:

Verwijderd

Topicstarter
hello,

ik heb een stuk code die een plaatje op het scherm zetten. Dit stuk code is een aparte klasse en ik vroeg me af of je ook een 'onclick'/'onmouseover' event kan maken voor alleen die klasse.

Ik had al iets geprobeerd met extends Components, maar dat lijkt niet te werken. Weet iemand of het mogelijk is en hoe ik dat moet doen?

ik had nu iets als:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Mijnklasse extends Component {
...
private String s;

 public Mijnklasse(int x,  int y, Applet applet) { // constructor
  ...
  addMouseListener(new MuisHandler());
 }
 public void teken(Graphics g) { 
     //teken gebeuren hier
       g.drawString("" +s, 200, 250);
 }
 class MuisHandler implements MouseListener
  {
    public void mouseClicked (MouseEvent e) {
      x = e.getX();
      y = e.getY();
      s = "Je hebt geklikt";
      repaint();
    }
 }
}


is misschien in deze code iets fout, of moet er nog iets bij?

many tnx,

[ Voor 4% gewijzigd door Verwijderd op 07-12-2002 12:58 ]


  • judgem
  • Registratie: December 2001
  • Laatst online: 28-04-2014

judgem

Lord of Metal

Allereerst is het belangrijk WAAR je in je applet wilt gaan klikken want dat wordt me uit he verhaal niet helemaal duidelijk...

NB: de code die ik hier typ is noodzakelijk voor de MouseListener, de rest moet je er zelf bij doen...

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
import java.awt.event.*;

class Mijnklasse extends Applet implements ActionListener, MouseListener 
{

   private int x, y;
   private String s;

   public void init()
   {
       this.addMouseListener(this);
   }

    public void mouseClicked (MouseEvent e) // Als er geklikt wordt
   {
        x = e.getX();
        y = e.getY();
        s = "Je hebt hier geklikt";
        repaint();
   }

   public void mouseExited (MouseEvent e) // als de muis een vlak verlaat
   {
   }  

   public void mousePressed (MouseEvent e) // op het moment van drukken
  {
  }

   public void mouseEntered (MouseEvent e) // als de muis op een bepaald vlak komt te staan
   {
   }

   public void mouseReleased (MouseEvent e) // als de linkerknop wordt losgelaten
   {
   }

   public void paint(Graphics g) 
   { 
         g.drawString("" +s, x, y);
    }
}


let er wel op dat je alle 5 de items uit de MouseEvent klasse (zoals mouseReleased) opneemt in je code ook al doe je er verder niks mee!

[ Voor 10% gewijzigd door judgem op 07-12-2002 15:10 ]

- Ik bespreek ook harde waren en dan wel op www.lordsofmetal.nl - en ik draai en programmeer ze in DYNAMO


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Verwijderd schreef op 07 december 2002 @ 12:57:
hello,

ik heb een stuk code die een plaatje op het scherm zetten. Dit stuk code is een aparte klasse en ik vroeg me af of je ook een 'onclick'/'onmouseover' event kan maken voor alleen die klasse.
Maak een anonymous inner class
Java:
1
2
3
4
5
6
public class blaat {

   addActionListener( new ActionListener {
                          public void actionPerformed() { }
                      }
                     );

Maar een inner class maken, zoals je hier doet, is ook heel goed, maar dan moet hij wel even een veilige access modifier hebben :)
Ik had al iets geprobeerd met extends Components, maar dat lijkt niet te werken. Weet iemand of het mogelijk is en hoe ik dat moet doen?
Daarmee zorg je er dus voor dat alleen de MouseEvents op het component opgepakt worden door je mouseListener en dat is niet wat je wilt iig :)

Persoonlijk zou ik het zo doen:
In je classcontructor krijg je de desbetreffende applet mee. Daarop registreer je de MouseListner en voila :) U is klaar. Mooier is het om nog een methode op de applet te hangen.

Nouja omdat code meer zegt dan gewauwel, hier een vrij voorbeeld naar de hand van uw case:
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
class Mijnklasse extends Component {

        private String _theMessage;
        private Applet _theApplet;

        public Mijnklasse(String Message, Applet applet) { 
        
                setMessage( Message );
                setApplet( applet );
                //Hier de mouseHandler registeren op Applet
                getApplet().addMouseListener(new MuisHandler());
        }
 
       
        protected class MuisHandler implements MouseListener {
                
                public void mouseClicked (MouseEvent e) {
                        
                        getApplet().addMessage( getMessage() );
                }

                // Hier de rest van de stoere MouseListener interface methods
                // extend anders gewoon MouseAdapter :)
        }
}


Verwijderd

Waarom MouseListener implementeren als je ook MouseAdapter kan extenden :?

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
minne: Waarom MouseListener implementeren als je ook MouseAdapter kan extenden :?
Die adapaters hebben 1 nadeel: als je een tikfout maakt in de methode naam (of de naam verkeerd uit je hoofd gokt) meldt de compiler niet dat dit geen methode uit de interface is: deze is immers al geimplementeerd in de adapater.

Het 'override' keyword uit C# lost dit op ...

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment