• Nie Znaleziono Wyników

Interfejs MouseListener i klasa MouseEvent

N/A
N/A
Protected

Academic year: 2021

Share "Interfejs MouseListener i klasa MouseEvent"

Copied!
2
0
0

Pełen tekst

(1)

Laboratorium z informatyki sem. II/ćw. 11 Wydział Transportu PW - 2020/21

Materiały do użytku wewnętrznego strona 1

M

ATERIAŁY POMOCNICZE DO ĆWICZENIA

11 Interfejsy

Komponenty Swing generują zdarzenia. Generowane są one za każdym razem, kiedy użytkownik używa klawiatury bądź myszki. Każdy obiekt może być informowany o takich zdarzeniach. Jedyne, co trzeba w tym kierunku zrobić, to wyposażyć obiekt w odpowiedni interfejs i zarejestrować go jako słuchacza zdarzeń pochodzących od konkretnego źródła.

Interfejsy stanowią mechanizm interakcji między niepowiązanymi wzajemnie obiektami różnych klas.

Interfejs to nazwany zbiór metod. Klasa może implementować interfejs, czyli zawarte w nim metody, odpowiednio do jej specyfiki. Dzięki takiemu rozwiązaniu różne klasy mogą w indywidualny sposób realizować metody, które z zewnątrz są dostępne w sposób jednorodny, tj. za pośrednictwem nagłówka określonego w definicji interfejsu.

• Interfejs definiuje zbiór (kolekcję) publicznych metod, zwykle powiązanych tematycznie i realizujących określoną funkcjonalność. W definicji interfejsu mogą ponadto występować stałe statyczne.

• Interfejs zawiera same nagłówki (sygnatury) definiowanych w nim metod abstrakcyjnych. Klasa implementująca interfejs musi zaimplementować wszystkie jego metody, albo będzie klasą abstrakcyjną.

• Nazwa interfejsu poprzedzona słowem kluczowym implements występuje na końcu nagłówka klasy, która go implementuje, po ewentualnej specyfikacji klasy nadrzędnej, np.:

public classMysz extends JFrameimplements MouseListener

• Klasa może dziedziczyć tylko z jednej klasy, natomiast może implementować wiele interfejsów.

Wówczas ich nazwy, po słowie kluczowym implements, są oddzielone przecinkami.

public classSkoczek extends JFrame implements ActionListener, MouseListener

Interfejsy na równi z klasami mogą być organizowane w pakiety oraz tworzyć hierarchie dziedziczenia.

W ćwiczeniu zastosowaliśmy interfejs MouseListenerdo obsługi zdarzeń myszy oraz

ActionListener do obsługi akcji zegara

Interfejs MouseListener i klasa MouseEvent

Poniżej zamieszczono definicję wykorzystanego w ćwiczeniu interfejsu MouseListener, który zawiera metody obsługujące zdarzenia myszy. Interfejs MouseListener należy do pakietu Javy java.awt.event oraz dziedziczy od zdefiniowanego w pakiecie java.util (pustego) interfejsu EventListener.

public interface MouseListener extends EventListener { public void mouseClicked(MouseEvent e); //kliknięcie myszą

public void mousePressed(MouseEvent e); //naciśnięcie przycisku myszy public void mouseReleased(MouseEvent e); //zwolnienie przycisku myszy public void mouseEntered(MouseEvent e); //nasunięcie kursora myszy public void mouseExited(MouseEvent e); //wycofanie kursora myszy }

Parametrem każdej z powyższych metod jest obiekt klasy MouseEvent, reprezentujący zdarzenie związane z użyciem myszy. Aby w naszej aplikacji sprawdzić, który przycisk myszy został wciśnięty i czy jednocześnie jest wciśnięty klawisz specjalny, wykorzystaliśmy następujące pola i metody klasy MouseEvent:

public static final int BUTTON1pole oznaczające lewy przycisk myszy (button#1)

podobnie pola

BUTTON2

i

BUTTON3

oznaczają przycisk środkowy i prawy

public int getButton() - metoda zwracająca informację, który przycisk wystąpił w zdarzeniu

public int getX()- metoda zwracająca współrzędną x położenia kursora myszy

public int getY()- metoda zwracająca współrzędną y położenia kursora myszy

public boolean isControlDown()- metoda zwracająca wartość true, gdy wciśnięty jest klawisz <Ctrl>, w przeciwnym przypadku metoda zwraca wartość false.

analogicznie metody isAltDown() i isShiftDown()dotyczą klawiszy <Alt> i <Shift>

Metoda addMouseListener() klasy java.awt.Component

Aby móc przechwytywać zdarzenia myszy musimy najpierw dodać do komponentu nasłuchującego odpowiedniego słuchacza, za pomocą metodyaddMouseListener, podając jako parametr klasę implementującą to zdarzenie. W aplikacji Mysz dodaliśmy nasłuch na obiekty tej klasy, wywołując w jej konstruktorze, metodę addMouseListener(this) , gdzie parametr this oznacza w tym przypadku klasę Mysz (która implementowała interfejs MouseListener

)

Tożsamość obiektu; słowo kluczowe

this

(2)

Laboratorium z informatyki sem. II/ćw. 11 Wydział Transportu PW - 2020/21

Materiały do użytku wewnętrznego strona 2

Jeśli podczas tworzenia definicji klasy chcemy odwołać się w metodzie do bieżącego obiektu tej klasy, na rzecz którego metoda będzie wywołana, należy w miejsce nazwy obiektu zastosować słowo kluczowe this.

Interfejs ActionListener

Obsługuje zdarzenia generowanego przez obiekt klasy

Timer l

ub generowane przez użytkownika aplikacji na rzecz danego składnika interfejsu (np. klikniecie przycisku)..Posiada tylko jedną metodę abstrakcyjną actionPerformed(), zdefiniowaną następująco:

public void actionPerformed(ActionEvent e){ }

Animacja

W dotychczas opracowanych przykładach grafiki w Javie wykorzystywaliśmy metodę rysowania paint() Aby przerysować dany składnik należy wywołać metodę repaint(), która aktualizuje obszar rysowania.

Tworząc animację należy umożliwić metodzie paint() rysowanie nowej zawartości grafiki w określonych odstępach czasu. W aplikacjach typu Swing zalecane jest sterowanie animacją za pomocą obiektu klasy Timer , który

w określonych, zadanych odstępach czasu generuje automatyczne wywołania metody actionPerformed( ) i to właśnie w tej metodzie wywołujemy metodę repaint()

Klasa Timer pakietu javax.swing

Klasa Timer umożliwia programowe generowanie zdarzeń w określonych odstępach czasu. Klasa, która ma te zdarzenia obsługiwać powinna implementować interfejs ActionListener i zawierać metodę actionPerformed().

Konstruktor klasy Timer ma postać:

Timer(int dt, ActionListener a) - tworzy nowy obiekt i ustawia odstęp między generowanymi zdarzeniami na dt( w milisekundach). Parametr a oznacza obiekt nasłuchujący akcji timera, może mieć wartość null. Jeśli obsługa akcji jest realizowana w klasie zawierającej timer, to parametr ma wartość this

Podstawowymi metodami klasy Timer są:

setDelay(int dt)– ustawia wartość odstępu czasu między zdarzeniami generowanymi przez timer dt – odstęp czasu w milisekundach

start()uruchamia generowanie zdarzeń

stop()zatrzymuje generowanie zdarzeń

restart()wznawia generowanie zdarzeń

Ikony, klasa Icon i ImageIcon

Ikona jest obiektem graficznym niewielkich rozmiarów, który można umieszczać np. na przyciskach lub poleceniach menu. Do wczytywania grafiki z pliku wykorzystuje się klasę ImageIcon. Klasa ta ma kilka konstruktorów, których parametry określają lokalizację lub nazwę pliku graficznego.

Przykład:

ImageIcon ic =new ImageIcon("T1.gif")

Instrukcja ta tworzy obiekt ic klasy ImageIcon i przypisuje mu grafikę załadowaną z pliku T1.gif Ponieważ nie jest określona ścieżka dostępu, plik powinien znajdować się w folderze projektu.

Cytaty

Powiązane dokumenty

Klasa Klasa implementuje też interfejs MouseListener, a więc jej obiekty mogą pełnić rolę słuchaczy zdarzeń typu MouseEvent.. Ponieważ implementuje interfejs MouseListener,

• Interfejs użytkownika jest dobrze zaprojektowany wówczas, gdy model programu jest zgodny z

kill [-nazwa_sygna łu | -numer_sygnału] pid pid PID procesu do którego wysyłany jest sygnał numer_sygna łu Numeryczne określenie sygnału. nazwa_sygna łu Symboliczne

Warunkiem zaliczenia przedmiotu jest aktywne uczestnictwo studenta w laboratoriach, realizowanie projektów w trakcie zajęć wpływające na oceny cząstkowe oraz

Sposób prowadzenia modelowania i analizy wyników Złożony problem, jakim jest poszukiwanie związków funkcyjnych pomiędzy parametrami geometrycznymi pustki wypełnionej

public void addTytul_ksiazki(Tytul_ksiazki tytul_ksiazki) – po procesie Reverse Engineering.. Zofia Kruczkiewicz, Podstawy in Ŝ

Zamykanie okna aplikacji za pomocą bezpośredniej obsługi zdarzenia zamykania okna (zamiast wykorzystania metody

Kiedy dana klasa implementuje interfejs, musi ona obsługiwać zdarzenia za pomocą metody, która jest wtedy wywoływana automatycznie, natomiast w programie trzeba ją