w6_java.pdf
(
317 KB
)
Pobierz
w6_java
Warstwy Graficznego
Interfejsu U
Ŝ
ytkownika GUI
JAVA
Interaktywno
ść
aplikacji Java
Zdarzenia
•
System operacyjny
(wykrywa niskopoziomowe zdarzenia
np. naciskanie klawiszy lub przycisków myszy)
•
Wirtualna maszyna Javy JVM
(tłumaczy zdarzenia na
komunikaty - naleŜy poinformować JVM, jakich zdarzeń
chcemy nasłuchiwać oraz napisać kod, który przeprowadzi
odpowiednie operacje po wystąpieniu zdarzenia. JVM
wywołuje metody zdefiniowane w interfejsach -
implementując interfejsy w swoich klasach, tworzymy
mechanizm obsługi zdarzeń. Takie interfejsy nazywane są
zarz
ą
dcami zdarze
ń z ang.
event listeners
)
•
Warstwa aplikacji
(tłumaczy komunikaty na działania
programu prowadzące do spełnienia Ŝyczeń uŜytkownika)
Beata Pańczyk - Java (Wykład 6)
2
Procesy obsługuj
ą
ce zdarzenia -
pakiet java.awt.event (1)
Procesy obsługuj
ą
ce zdarzenia (2)
•
ActionListener
- obsługa zdarzeń akcji
generowanych przez uŜytkownika (kliknięcie
przycisku)
•
AdjustmentListener
- obsługa zdarzeń regulacji
generowanych w momencie zmian kontrolek
ekranowych (suwaków, pasków przewijania)
•
MouseListener
- obsługa zdarzeń generowanych
w momencie naciśnięcia przycisków myszki
•
WindowListener
- obsługa zdarzeń
generowanych przez okno (maksymalizacja,
minimalizacja, przesunięcie, zamknięcie)
•
FocusListener
- obsługuje zdarzenia generowane
w momencie aktywacji lub dezaktywacji
komponentów (np. pole tekstowe staje się lub
przestaje być aktywne)
•
ItemListener
- obsługuje zdarzenia generowane
przy zaznaczaniu pola wyboru
•
KeyListener
- obsługuje zdarzenia generowane
przy wpisywaniu tekstu z klawiatury
•
MouseMotionListener
- obsługuje zdarzenia
generowane w momencie przesuwania wskaŜnika
myszki nad danym składnikiem
3
4
Przygotowanie składników do obsługi
zdarze
ń
(1)
•
addActionListener()
- dla składników np. Button,
CheckBox, TextField (z pakietu AWT) i JButton,
JCheckBox, JComboBox, JTextField, JRadioButton (z
pakietu Swing)
•
addAdjustmentListener()
- dla ScrollBar, JScrollBar
•
addFocusListener()
- dla wszystkich składników z
pakietu Swing
•
addItemListener()
- dla JButton, JCheckBox,
JComboBox, JRadioButton
•
addKeyListener()
,
addMouseListener(),
addMouseMotionListener()
- dla wszystkich składników
z pakietu Swing
•
addWindowListener()
- dla obiektów typu Frame i
Window (z AWT) oraz JFrame, JWindow (ze Swinga)
Przygotowanie składników do obsługi
zdarze
ń
(2)
• Procesy obsługujące zdarzenia powinny być
powiązane z odpowiednimi składnikami i
skonfigurowane
zanim
zostaną dodane do kontenera
(w przeciwnym razie wszystkie ustawienia zostaną
pominięte)
• Wszystkie metody
add...
pobierają tylko jeden
argument - obiekt, który nasłuchuje zdarzeń danego
rodzaju. Zastosowanie słowa kluczowego
this
wskazuje, Ŝe zarządcą zdarzeń jest bieŜąca klasa np.
Button koniec=newButton("Koniec");
koniec.addActionListener(this);
5
6
1
Zdarzenia typu Action (1)
• Aby obsługiwać zdarzenia typu
Action
, dana
klasa musi posiadać zaimplementowany interfejs
ActionListener();
metoda
addActionListener()
musi być wywołana na rzecz kaŜdego składnika
generującego zdarzenie typu Action;
• Interfejs ActionListener posiada jedynie metodę
actionPerformed(ActionEvent) o prototypie:
Zdarzenia typu Action (2)
• Metody
getSource()
i
getActionCommand()
wywoływaną na rzecz obiektu ActionEvent przekazują
informację, który obiekt wygenerował zdarzenie;
domyślnie polecenie ActionCommand jest opisane za
pomocą tekstu powiązanego z danym składnikiem (np.
etykieta na przycisku); wywołanie metody
setActionCommand(String)
zmienia domyślne polecenie
dla danego składnika; np.
Button rysuj=newButton("Rysuj");
TextField tekst=newTextField();
rysuj.setActionCommand("Rysowanie");
tekst.setActionCommand("Rysowanie");
publicvoidactionPerformed(ActionEventevt)
{//kodobsługującyzdarzenie
}
7
8
Obsługa zdarze
ń
akcji - przykład 1
import java.awt.*;importjava.awt.event.*;importjava.applet.*;
publicclass akcja extendsAppletimplementsActionListener
{Button b1;
TextField t1;
publicvoidpaint()
{b1=newButton("Powiedzcześć!");
add(b1);
b1.addActionListener(this);
t1=newTextField("",8);
add(t1);
} //koniecmetodypaint
publicvoidactionPerformed(ActionEvent e)
{ Object ob1=e.getSource();
if (ob1==b1)t1.setText("Cześć!");
Zdarzenia typu Adjustment
• Interfejs AdjustmentListener posiada metodę o
prototypie:
publicvoidadjustmentValueChanged
(AdjustmentEventevt)
{//kodobsługującyzdarzenie
}
• Metoda
getValue()
zwraca liczbę całkowitą
reprezentującą bieŜącą wartość na suwaku
}
//koniecmetodyactionPerformed
}
//koniecklasyakcja
9
10
Obsługa zdarze
ń
regulacji - przykład 2
import java.awt.*;importjava.awt.event.*;importjava.applet.*;
publicclass regulacja extendsAppletimplementsAdjustmentListener
{ Scrollbar sb1; TextField t1; Label l1;
publicvoidinit()
{ setLayout(null);
l1=newLabel("Wynik:", Label.RIGHT);
l1.setBounds(36,36,60,26);
add(l1);
t1=newTextField("",8);
t1.setEditable(false);
t1.setBounds(108,36,48,26);
add(t1);
sb1=newScrollbar(Scrollbar.HORIZONTAL,0,10,0,100);
sb1.setBounds(180,36,137,26);add(sb1);
t1.setText(String.valueOf(sb1.getValue()));
sb1.addAdjustmentListener(this);}
Obsługa zdarze
ń
regulacji - przykład 2
publicvoidadjustmentValueChanged(AdjustmentEvent e)
{ Object ob1=e.getSource();
if (ob1==sb1)
{ int wynik=sb1.getValue();
t1.setText(String.valueOf(wynik));
}
}
}
11
12
2
Zdarzenia typu Window
Zdarzenia typu Window:
• otwarcie lub zamknięcie okna (np. obiektu Frame,
JFrame);
Obsługa zdarze
ń
okna - przykład 3
import java.util.*; importjava.awt.*; importjava.awt.event.*;
publicclass okno extendsObjectimplementsWindowListener
{publicvoidwindowOpened(WindowEvent e)
{ System.out.println("Oknootwarte.");
}
publicvoidwindowClosing(WindowEvent e)
{ System.out.println("Oknozamyka sie.");System.exit(0);
}
publicvoidwindowClosed(WindowEvent e)
{ System.out.println("Okno zamkniete.");
}
publicvoidwindowIconified(WindowEvent e)
{System.out.println("Okno zikonizowane.");
}
Interfejs
WindowListener
:
• WindowActivated(WindowEvent)
• WindowClosed(WindowEvent)
• WindowClosing(WindowEvent)
• WindowDeactivated(WindowEvent)
• WindowDeiconified(WindowEvent)
• WindowIconified(WindowEvent)
• WindowOpened(WindowEvent)
13
14
Obsługa zdarze
ń
okna - przykład 3
publicvoidwindowDeiconified(WindowEvent e)
{System.out.println("Okno przywrocone.");
}
publicvoidwindowActivated(WindowEvent e)
{System.out.println("Oknoaktywne.");
}
publicvoidwindowDeactivated(WindowEvent e)
{System.out.println("Oknonieaktywne.");
}
publicstaticvoidmain(Stringarg [])
{ Frame f=newFrame("Okna");
f.addWindowListener(new okno());
f.setTitle("Obsługazdarzeńokna");
f.add(newLabel("Powodzenia!!!"),"Center");
f.pack();f.setVisible(true);
} }
Obsługa zdarze
ń
okna - przykład 3
15
16
Zdarzenia typu Mouse (1)
Zdarzenia typu
Mouse
:
• naciśnięcie dowolnego przycisku myszki
• ustawienie wskaźnika myszki nad obszarem zajmowanym
przez dany składnik
• Upuszczenie przez wskaźnik myszki obszaru
zajmowanego przez dany składnik
Interfejs
MouseListener
:
• mouseClicked(MouseEvent)
• mouseEntered(MouseEvent)
• mouseExited(MouseEvent)
• mousePressed(MouseEvent)
• mouseReleased(MouseEvent)
Zdarzenia typu Mouse (2)
Metody wywoływane na rzecz obiektów
MouseEvent
• getClickCount()
- zwraca liczbę kliknięć
przyciskiem myszy
• getPoint()
- zwraca obiekt Point reprezentujący
współrzędne (x,y) miejsca w obszarze
zajmowanym przez składnik, w którym został
naciśnięty przycisk myszki
• getX()
- zwraca współrzędną X powyŜszej
pozycji
• getY()
- zwraca współrzędną Y
17
18
3
Obsługa zdarze
ń
myszy - przykład 4
import java.awt.*;importjava.awt.event.*;
class mysz extendsFrameimplementsMouseListener,ActionListener
{publicstaticvoidmain(Stringargs[])
{ new mysz();}
mysz()
{ setLayout(newFlowLayout());
Button b1=newButton("A|1");
Button b2=newButton("A|2");
Button b3=newButton("A|3");
b1.addActionListener(this);b1.addMouseListener(this);
b2.addActionListener(this);b2.addMouseListener(this);
b3.addActionListener(this);b3.addMouseListener(this);
add(b1); add(b2); add(b3);
pack();
setVisible(true);
Obsługa zdarze
ń
myszy - przykład 4
publicvoidmouseEntered(MouseEvent e)
{e.getComponent().setBackground(Color.yellow);
}
publicvoidmouseExited(MouseEvent e)
{e.getComponent().setBackground(SystemColor.control);
}
publicvoidmousePressed(MouseEvent e) {}
publicvoidmouseReleased(MouseEvent e){}
publicvoidmouseClicked(MouseEvent e) {}
publicvoidactionPerformed(ActionEvent e)
{ System.out.println("Akcjawykonanana"+e.getActionCommand());
}
}
}
19
20
Obsługa zdarze
ń
myszy - przykład 4
Adaptery
•
Adaptery
- puste implementacje interfejsów nasłuchu (np.
klasa
MouseAdapter
definiuje puste metody:
mousePressed, mouseReleased, mouseEntered,
mouseExited, mouseClicked)
• dostępne w pakiecie
java.awt.event
• Sposoby wykorzystania:
– jeśli klasa nie dziedziczy innych i jeśli obsługuje tylko
jeden rodzaj zdarzeń -
adapter mo
Ŝ
na odziedziczy
ć i
przedefiniować jego wybrane metody
– wykorzystanie
anonimowych klas wewn
ę
trznych
(klasa wewnętrzna - zdefiniowana w innej klasie;
anonimowe klasy wewnętrzne - nie mają nazwy a ich
definicja pojawia się w instrukcji
new
)
21
22
Dziedziczenie adapteru
Anonimowe klasy wewn
ę
trzne
class X extends MouseAdapter
{
• Utworzenie obiektu - słuchacza zdarzeń:
MouseAdapter ma=new MouseAdapter() {
public void mouseEntered(MouseEvent e) {
// obsługa zdarzenia
}
public void mouseEntered(MouseEvent e)
{
};
• przyłączenie utworzonego słuchacza do zdarzenia:
x.addMouseListener(ma);
• powyŜsze 2 konstrukcje moŜna zapisać w jednym:
x.addMouseListener(new MouseAdapter() {
public void mouseEntered(MouseEvent e) {
// obsługa zdarzenia
}
//przedefiniowanie metody mouseEntered
}
}
} );
23
24
4
Przykład 4a - zastosowanie
anonimowej klasy wewn
ę
trznej
import java.awt.*;import java.awt.event.*;
class mysz1 extendsFrameimplementsActionListener
{ publicstaticvoidmain(Stringargs[])
{ new mysz1();}
mysz1()
{ setLayout(newFlowLayout());
//uzycie anonimowejklasywewnętrznej
MouseListener m1=newMouseAdapter(){
publicvoidmouseEntered(MouseEvent e)
{e.getComponent().setBackground(Color.yellow);
Przykład 4a - c.d.
for(int i=0;i<3;i++){
Button b=newButton("A|"+(i+1));
b.addActionListener(this);
b.addMouseListener(m1);//dodajemywewnętrznegosłuchacza
add(b);
}
pack();
setvisible(true);
}
}
publicvoidactionPerformed(ActionEvent e)
{ System.out.println("Akcjawykonanana"+e.getActionCommand());
}
}
publicvoidmouseExited(MouseEvent e)
{e.getComponent().setBackground(SystemColor.control); }
};//koniecklasy wewnetrznej
25
26
Zdarzenia typu Item
Obsługa zdarze
ń
wyboru - przykład 5
import java.awt.*;
importjava.awt.event.*;
publicclasswyborextendsFrameimplementsItemListener
{
• Zdarzenia na komponentach wyboru (Button,
RadioButton, CheckBox, Combobox, Choice, List):
zaznaczenie lub usunięcie zaznaczenia
Iterfejs
ItemListener
posiada jedną metodę o prototypie:
• voiditemStateChanged(ItemEvente)
Metody wywoływane na rzecz obiektów
ItemEvent
:
• getItem()
- podaje informację o obiekcie, który
wygenerował zdarzenie
• getStateChange()
- w wyniku otrzymujemy
informację czy dany element został zaznaczony
(
ItemEvent.SELECTED
) lub czy jego zaznaczenie
zostało usunięte (
ItemEvent.DESELECTED
)
publicstaticvoidmain(Stringargs[])
{ newwybor();
}
wybor()
{setLayout(newFlowLayout());
Listl1=new List();
l1.add("Navigator");l1.add("Explorer");l1.add("Mozilla");
l1.addItemListener(this);
add(l1);pack();show();
} //koniecmetodywybor
27
28
Obsługa zdarze
ń
wyboru - przykład 5
Obsługa zdarze
ń
wyboru - przykład 5
publicvoiditemStateChanged(ItemEvent e)
{
if (e.getStateChange()==ItemEvent.SELECTED)
{System.out.println("Element"+e.getItem()+
""+e.getItemSelectable()+"zaznaczony");}
else
{System.out.println("Element"+e.getItem()+
""+e.getItemSelectable()+"odznaczony");}
}//koniecmetodyitemStateChanged
}//koniecklasywybor
29
30
5
Plik z chomika:
lazarusp22
Inne pliki z tego folderu:
w6_java.pdf
(317 KB)
w11_java.pdf
(177 KB)
w7_java.pdf
(477 KB)
w1_java.pdf
(293 KB)
w8_java.pdf
(281 KB)
Inne foldery tego chomika:
Java A. Zoła
Wykład dla studentów Informatyki Stosowanej i Fizyki
Zgłoś jeśli
naruszono regulamin