# solange Maustaste gedrückt Event



## Novi (30. Nov 2008)

Hi!

Wie kann ich eigentlich drauf reagieren wenn die Maus Taste die ganze zeit gedrückt wird?

Bsp.

```
mousPressed(MouseEvent arg0)
        while(Maustaste gedrückt)
                i++;
```

Danke im Voraus!


----------



## Wildcard (30. Nov 2008)

mouseDragged im MouseMotionListener


----------



## Novi (30. Nov 2008)

Stimmt nicht ganz!
MouseDragged funktioniert nur wenn die Maus Bewegt wird!(MousemotionListener = MausBewegung)


----------



## Wildcard (30. Nov 2008)

Ich dachte darum geht es. Solange die Maus gedrückt ist, wäre ein eher unsinniges Event, da man ja weiß ob die Taste wieder losgelassen wurde, oder nicht.


----------



## Novi (30. Nov 2008)

Nicht zwingend, denn wenn ein Ereignis(Clicked, Pressed) ausgelöst wird und ich will solange drauf reagieren bis das nächste Ereignis(Released) ausgelöst wird, aber dadurch das die weitere Ausführung blockiert wird somit kein neues Ereignis ausgelöst werden kann, dann gibts ein Problem. 
Mein Ansatz wär ein Thread, aber geht es nicht noch anders?


----------



## Wildcard (30. Nov 2008)

mousePressed und mouseReleased. Dazwischen ist die Maus gedrückt. Dafür braucht man keine Schleife und keinen Thread, sondern ein boolean.


----------



## Gast (30. Nov 2008)

Wie lasse ich denn den Wert hoch Zählen ohne Schleife mit boolean?


----------



## Wildcard (30. Nov 2008)

Welchen Wert?


----------



## Gast (30. Nov 2008)

Im Bsp. i++


----------



## Wildcard (30. Nov 2008)

mousePressed lässt sich zählen, aber wie zählt man bitte eine Zeitspanne?


----------



## Gast (30. Nov 2008)

Wieso messen? Pressed < Zeitspanne > Released!
Denke hab ne alternative gefunden einfach innerhalb der schleife euen Listener implementieren und dann das Release ereicgnis abfangen! mal schaun ob es geht, sonst werd ich mal den Thread schreiben trotzdem Danke!


----------



## Gast (30. Nov 2008)

Naja ist wahrscheinlich ziemlich dreckig programmiert da ja bei jedem schleifen Aufruf neuer Listener erstellt wird! Mache wohl den Thread der dann den boolean Wert setzt.

Falls du ne bessere Lösung, lass es mich Wissen?

Nochmals Danke!


----------



## Wildcard (30. Nov 2008)

Also willst du eine Zeitspanne in zB Sekunden messen? Sag das doch. In deinem Beispielcode zählst du ein int hoch, mit Zeitmessung hat das wenig zu tun. 
mousePressed: System.currentTimeMillis in einem long ablegen
mouseReleased: System.currentTimeMillis - gespeicherterLong 
Schon hast du deine Zeitspanne.


----------



## Gast (30. Nov 2008)

Ich will eigentlich schon einen Wert hochzählen solang die Maus gedrückt wird. Bsp. Lade Balken solange Mazs gedrückt!


----------



## Wildcard (30. Nov 2008)

In welchem Abstand willst du einen Wert hochzählen?


----------



## Marco13 (30. Nov 2008)

Ganz grob im Pseudocode, das, was du VERMUTLICH(!!!) meinst:

```
Counter counter = new Counter();

    void mousePressed()
    {
        counter.setPaused(false);
    }
    void mouseReleased()
    {
        counter.setPaused(true);
    }


class Counter
{
    private int value = 0;
    private boolean paused = false;

    public Counter()
    {
        Thread t = new Thread(new Runnable()
        {
            while(true)
            {
                while (paused)
                {
                    synchronized(Counter.this) { try { wait(); } catch(...) }
                }
                value++;

                try { Thread.sleep(10); } catch(...)

            }
        };
        t.start();
    }

    public synchronized void setPaused(boolean p)
    {
        if (paused && !p)
        {
            paused = false;
            notify();
        }
        else
        {
            paused = p;
        }
    }

}
```


----------

