# Frage zu MouseListener --> mousePressed()



## v0rTex (27. Jul 2007)

hallo   

also ich habe ein kleines Problem.
ich habe einen JButton. Diesem habe ich einen
mouseListener hinzugefügt. Dieser soll dazu dienen
einen Wert bei gedrückthalten der Maustaste (button1)
stetig zu erhöhen.
Mit einen KeyListener funktioniert das (ohne klicken) mit der Methode keyPressed(KeyEvent k).
Halte ich beispielsweise die Pfeil-Hoch-Taste (VK_UP) gedrückt so erhöht sich mein Wert konstant.
Mit dem MouseListener der ja auch über die 'pressed'-Methode verfügt, funktioniert das selbe nicht.
Ich habe nach langem Probieren und suchen auch keine ausweich-methode gefunden, die mir zb. konkret
sagt ob im moment ein mousebutton gedrückt ist oder nicht (sowas wie zb.  x.isPressed():boolean  ).




```
a.addMouseListener(new MouseListener(){  // 'a' ist der Button

        int k=0;

        public void mousePressed(MouseEvent e){  //erfordert immer wieder neues klicken
        System.out.println(++k);
        }
        public void mouseClicked(MouseEvent e){

        }
        public void mouseEntered(MouseEvent e){
      
        }
        public void mouseExited(MouseEvent e){

        }
        public void mouseReleased(MouseEvent e){

       }
     });
```

das funktioniert nicht so wie oben beschrieben.


```
a.addKeyListener(new KeyListener(){
      
      int k=0;  

      public void keyPressed(KeyEvent e) {
        
        if ( e.getKeyCode() == KeyEvent.VK_UP ) {
          System.out.println(++k);
        }
        if ( e.getKeyCode() == KeyEvent.VK_DOWN ) {
          System.out.println(--k);
        }
      }

      public void keyReleased(KeyEvent e) {
        
      }

      public void keyTyped(KeyEvent e) {}
    });
```

das wiederum schon :\
warum???
irgendwelche lösungsvorschläge??

danke schonmal


----------



## merlin2 (27. Jul 2007)

Ich weiß nicht, warum das so ist, aber du könntest beim Herunterdrücken der Maustaste doch einen boolean auf true setzen und ihn beim Loslassen wieder auf false setzen.
In einem Thread erhöhst du den Wert dann abhängig von der Variable (natürlich mit Pausen!).

Oder du könntest beim Drücken einen Thread starten, der endlos (wieder mit Pausen) den Wert der Variablen erhöht und den Thread beim Loslasen wieder stoppen.

Wenn niemandem eine bessere Lösung einfällt, kannst du ja eine der obigen nehmen.


----------



## Marco13 (27. Jul 2007)

Beim KeyListener funktioniert das deswegen, weil die Tastatur schon "Hardwareseitig" immer neue Key-Events schickt. Die Wiederholrate kann man auch einstellen, z.B. in Windows->Systemsteuerung->Tastatur. Bei der Maus würde das alleine schon deswegen keinen Sinn machen, weil beim Draggen dann eine Flut von "Doppel"-Klicks ankäme  :lol: Eine andere Lösung als die von merlin2 wüßte ich daher auch nicht.


----------



## merlin2 (27. Jul 2007)

Tja, Marco13s Erklärung klingt logisch, also musst du das Erhöhen des Werts wohl tatsächlich in einen Thread auslagern. :bae:  :wink:


----------



## v0rTex (28. Jul 2007)

sehr aufschlussreich 
das mit nem zusätzlichem thread hatte ich befürchtet ^^ wollte ich eigentlich umgehen zumal es in java ja nun wirklich für FAST alles ne funktion gibt  außer hierzu :x 
danke sehr 

//edit : hat sehr gut funktioniert mit dem zusätzlichen thread, jedoch muss man beachten den thread nach dem erhöhen 
           um beispielsweise 1 kurz in den sleep-modus (ca. 50ms sind ganz gut) zu schicken da sonst bei einem einzigen 
           mouseklick der wert gleich bis auf fast 2000 springt  :wink:


----------



## Leroy42 (28. Jul 2007)

v0rTex hat gesagt.:
			
		

> //edit : hat sehr gut funktioniert mit dem zusätzlichen thread, jedoch muss man beachten den thread nach dem erhöhen
> um beispielsweise 1 kurz in den sleep-modus (ca. 50ms sind ganz gut) zu schicken da sonst bei einem einzigen
> mouseklick der wert gleich bis auf fast 2000 springt  :wink:


Dast hat merlin2 doch schon von Anfang an geschrieben:


			
				merlin2 hat gesagt.:
			
		

> In einem Thread erhöhst du den Wert dann abhängig von der Variable (*natürlich mit Pausen!*).


----------

