Witam
Dopiero się uczę, więc nie posiadam wystarczającej wiedzy.
Napisałem klasę w której przypuścimy są pola z zmiennymi typu "integer", dla przykładu positionX, oraz positionY;
W innej klasie która nazywa się "MouseHandler" która implementuje interfejs "MouseMotionListener" są 2 metody które są wywoływane w zależności zastosowanie w tym przypadku ruchu myszki metoda moveMouse(MouseEvent e), chciałbym żeby ta metoda na bieżąco przekazywała najlepiej cały obiekt "e" do klasy w której są 2 zmienne "positionX oraz... Y", odpada stworzenie w pierwszej klasie metody statycznej bo nie moge w tedy edytować tych dwóch zmiennych. Czy w jakiś sposób mogą pomóc interfejsy ?
Rozumiem wszytko za wyjątkiem
odpada stworzenie w pierwszej klasie metody statycznej bo nie moge w tedy edytować tych dwóch zmiennych
Czemu uważasz że metodą statyczną nie możesz edytować dwóch zmiennych? Ja kiedyś napisałem kod który metodą statyczną edytował trzy zmienne (nie żebym był dumby z tamtego kodu :( )
plugan300 napisał(a):
Napisałem klasę w której przypuścimy są pola z zmiennymi typu "integer", dla przykładu positionX, oraz positionY;
Jeśli twierdzisz, że napisałeś kod, to go pokaż od razu i nie czekaj na nasze pytania.
- MouseHandler może mieć "uchwyt" do obiektu klasy z atrybutami positionX/Y (np. przekazywany w konstruktorze)
- Klasa z atrybutami positionX/Y może być MouseHandlerem.
- MouseHandler może mieć uchwyt do jakiegoś medium pośredniczącego w komunikacji z obiektem "klasy z atrybutami positionX/Y" (szyna esb, kolekcja listenerów których należy powiadomić o zmianie stanu etc.)
...
@plugan300 problem polega na tym ze nie rozumiesz czym różni sie KLASA od OBIEKTU i bez tego nie da się napisać żadnego sensownego kawałka kodu. Klasa określa TYP, tak jak np. String czy Integer, to są klasy. W praktyce w kodzie pracujesz z OBIEKTAMI bo np. masz stringa String ala = "ala ma kota"
oraz stringa String sierotka = "sierotka ma rysia"
. Jakiekolwiek dyskutowanie o polach albo metodzie w klasie
nie ma żadnego sensu, bo przecież wartości pól w obiekcie ala
i w obiekcie sierotka
są zupełnie inne i w ogóle ze sobą nie związane. Analogicznie jak zrobisz Integer x = 1;
oraz Integer y = 2;
to znów wartości pół tych obiektów nie maja żadnego związku ze sobą.
Teraz więc zrobiłeś KLASĘ, spoko, ale potrzebujesz OBIEKTU tej klasy zeby tego jakoś uzywać. Musisz taki obiekt gdzieś stworzyc i przekazać go do twojego Listenera.
*
istnieje bardzo wąska kwestia tzw. metod statycznych
niepowiązanych z obiektem (np. jakieś Integer.parse... które ze stringa robi integera) ale na początku w ogóle nie powinieneś o nich myśleć bo zastosowanie jest bardzo szczególne i w 99% przypadków nie chcesz mieć static
.
@Shalom: akurat wiem czym różni się klasa od obiektu takie podstawy to mam w garści
@yarel: ale Klasa implementuje interfejs MouseMotionAction który cały czas w momencie przemieszczania myszki wywołuje metode "moved" i potrzebuje cały czas aktualizować w innej klasie atrybuty positionx i Y
@plugan300: która część mojej odpowiedzi albo @Shalom nie jest dla Ciebie jasna?
Pokaż jakiś kod, bo ciężko zgadnąć, o czym rozmawiamy. Dlaczego w klasie MouseHandler nie masz tych pól? Miałbyś łatwiejszy dostęp.
plugan300 napisał(a):
@yarel: ale Klasa implementuje interfejs MouseMotionAction który cały czas w momencie przemieszczania myszki wywołuje metode "moved" i potrzebuje cały czas aktualizować w innej klasie atrybuty positionx i Y
To nie możesz, żeby ta inna
klasa implementowała interfejs MouseMotionAction
i wtedy w metodzie moved
aktualizowała swoje pola positionX
i positionY
? No i jeszcze obiekt tej klasy trzeba zarejestrować jako słuchacza zdarzeń z interfejsu MouseMotionAction
, pewnie w jakimś okienku, kontenerze itd. przy pomocy metod w stylu addMouseListener
.