Wpis z mikrobloga

Mirki mam dwie klasy jedną implementującą MouseMotionListener a druga która implementuje MouseListener.

Chcę by podczas przeciągania(metoda mouseDragged) metoda wykonała się tylko raz bo teraz wykonuję się ciągle(mouseDragged wykonuje się cały czas gdy przycisk jest nacisnięty i myszka się porusza).Macie jakiś pomysł może odwołać się do jakiejś metody albo coś?

Próbowałem jakoś zrobić ten sam event po kliknięciu myszki(metoda MouseClicked) ale jest ona w drugiej klasie, a potrzebny kod mam w pierwszej klasie.

#java #programowanie #pomocy #stawiampiwozapomoc
  • 11
@teemo: a może zrób sobie zmienna bool IsMouseAlreadyDragged i ustawiaj ją za pierwszym wywołaniem metody, i jeśli jest false, to wykonaj metodę mouseDragged, a jeśli true, to zrób return.
@nCore: spróbuję chociaż nie wiem czy zadziała to w przypadku jak mam przeciągać więcej obiektów(bo jak raz dam true to potem zostanie true)
@teemo: Hmm, to powiem tak - albo PEBKAC, albo gdzieś popełniłeś błąd w implementacji.

Powiedz mi, masz jakiś wspólny interfejs z którego dziedziczą te dwie klasy?

EDIT: albo odwrotnie - klasę "główną", która implementuje obie te klasy?
@teemo: no to niestety, ale jesteś w czarnej d. Bo mi się skończyły pomysły. Nie potrafie napisać czegoś by działało w A i B, mając dostęp do C, ale nie mogąc zmieniać nic w C.

A chociaż w MouseMotionListener i MouseListenerze możesz zmieniać? Bo jeśli nie, to musisz stworzyć sobie DupaMouseMainListener, którego podepniesz zamiast tego swojego niezmienialnego C ("główna klasa"), która z kolei będzie implementowała A, B i rozszerzała C, dodatkowo
@teemo: Tworzysz klasę implementującą oba interfejsy i odpowiednio delegujesz zdarzenia do klas, które już masz albo dopisujesz swoją logikę i dopiero po spełnieniu jakichś warunków delegujesz.

No i ten sam obiekt możesz przekazać do klasy głównej (tej której nie możesz zmieniać) jako MouseMotionListener i MouseListener.

Nie wiem, czy dobrze zrozumiałem problem, bo brakuje jakiegoś kodu...