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
27932484.051.png 27932484.058.png 27932484.059.png 27932484.060.png 27932484.001.png 27932484.002.png
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
27932484.003.png 27932484.004.png 27932484.005.png 27932484.006.png 27932484.007.png 27932484.008.png 27932484.009.png 27932484.010.png 27932484.011.png 27932484.012.png 27932484.013.png 27932484.014.png 27932484.015.png 27932484.016.png 27932484.017.png 27932484.018.png 27932484.019.png 27932484.020.png 27932484.021.png 27932484.022.png 27932484.023.png 27932484.024.png 27932484.025.png 27932484.026.png 27932484.027.png 27932484.028.png 27932484.029.png 27932484.030.png 27932484.031.png 27932484.032.png 27932484.033.png
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
27932484.034.png 27932484.035.png 27932484.036.png 27932484.037.png 27932484.038.png 27932484.039.png 27932484.040.png 27932484.041.png
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
27932484.042.png 27932484.043.png 27932484.044.png 27932484.045.png 27932484.046.png 27932484.047.png 27932484.048.png 27932484.049.png
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
27932484.050.png 27932484.052.png 27932484.053.png 27932484.054.png 27932484.055.png 27932484.056.png 27932484.057.png
Zgłoś jeśli naruszono regulamin