Zdarzenia, komponenty

Transkrypt

Zdarzenia, komponenty
PWSG – Java w. 4
1
plan
• Zdarzenie / obsługa zdarzeń
• Komponenty
• Menu
2
• Jeżeli jesteśmy zainteresowani reagowaniem na
wystąpienie konkretnego zdarzenia, musimy w kodzie
programu zidentyfikować źródło zdarzenia,
• Dla akcji użytkownika polegających na wciśnięciu
przycisku programowego, źródłem jest przycisk (obiekt
typu JButton)
• Add???Listener(???)
Źródło zdarzenia
Kod obsługi umieszczony w obiekcie ???
3
• zdarzeniem generowanym przez obiekty typu 'przycisk'
są zdarzenia typu 'akcja‘
• addActionListener(.)
• dla zdarzeń typu akcja, metodą uruchamianą przez JVM
jest metoda
• public void actionPerformed(ActionEvent e)
• {…}
• informacja o implementacji odpowiedniego
interfejsu programowego
• java.awt.event.
4
przykład
•
•
•
•
•
•
•
•
•
•
public class przyklad implements ActionListener{
public void actionPerformed(ActionEvent e){
String tekst=e.getActionCommand();
System.out.println(tekst);
}
…przykład(){
JButton b = new JButton(”przycisk”);
…b.addActionListener(this);
…
}
5
•
import java.awt.event.*;
•
import javax.swing.*;
•
class obrazek extends JFrame implements ActionListener{
•
int count=0;
•
JButton b;
•
obrazek(){
•
–
b = new JButton(„licznik: 0");
–
getContentPane().add(b);
–
b.addActionListener(this);
–
pack();
–
}
public void actionPerformed(ActionEvent e){
–
count++;
–
b.setText(„licznik:"+count);
–
}
•
public static void main(String[] args) {
•
obrazek okno = new obrazek();
•
okno.show();
•
}
•
}
6
7
Typy zdarzeń
• ActionEvent: kliknięcie przycisku, wybór
elementu z menu, z listy, naciśnięcie
ENTER w polu tekstowym
• AdjustmentEvent: przesuwanie suwaka
• ItemEvent: wybór jednego z pól wyboru
lub elementów z listy
• TextEvent: zmiana zawartości pola
tekstowego
8
• ComponentEvent: komponent został przesunięty,
wyświetlony, ukryty, lub został zmieniony jego rozmiar
• KeyEvent: naciśnięcie lub zwolnienie klawisza
• MouseEvent: naciśnięcie lub zwolnienie klawisza myszki,
lub przesunięcie kursora myszki
• FocusEvent: Komponent został uaktywniony lub
dezaktywowany
• WindowEvent: okno zostało uaktywnione,
zminimalizowane lub zamknięte
• ContainerEvent: komponent został dadany lub usuniety z
pojemnika graficznego
9
ActionEvent
• Zdefiniowane 4 stałe całkowite:
ALT_MASK, CTRL_MASK, META_MASK i
SHIFT_MASK.
• ActionEvent( Object src, int type, String cmd)
• ActionEvent( Object src, int type, String cmd,
int modifiers)
10
KeyEvent
• trzy typy zdarzeń tej klasy:
• KEY_PRESSED KEY_RELEASED KEY_TYPED
• KeyEvent
(Component src, int type, long when, int
modifiers, int code, char ch)
VK_A … VK_Z
getKeyCode()
getKeyChar()
11
MouseEvent
• MOUSE_CLICKED MOUSE_DRAGGED MOUSE_ENTERED
• MOUSE_EXITED MOUSE_MOVED MOUSE_PRESSED
• MOUSE_RELEASED
• MouseEvent
• (Component src, int type, long when,
int modifiers, int x, int y, int clicks,
boolean triggersPopup)
getX(), getY(), getClickCount(), isPopupTrigger()
12
TextEvent
• Zmiany w polach i obszarach tekstowych,
• Klasa definiuje stałą całkowitą
TEXT_VALUE_CHANGED.
TextEvent(Object src, int type)
W programie należy użyć innych metod
związanych z polem lub obszarem tekstowym,
by pobrać dane.
13
Rozpoznawanie zdarzeń
Jeśli wywołanie metody obsługi może być
spowodowane zajściem więcej niż jednego
zdarzenia, to istotne staje się jego rozpoznanie.
get-Source
instanceof.
14
15
16
Komponenty SWING
• Menu – efektywny interfejs programów
okienkowych
• setJMenuBar Klasa JMenuBar
• Menu podręczny (kontekstowy)
• Klasa JPopupMenu
17
Klasa JMenuBar
• Do każdego z rodzajów menu można
dodawać elementy typu:
– JMenu (dalej rozwijalne)
– JMenuItem (koncowe).
18
• http://java.sun.com/docs/books/tutorial/uis
wing/components/menu.html.
19
LISTY
• Listy umożliwiają użytkownikowi wybór
jednej (lub kilku) spośród dostępnych
opcji.
• Dwa rodzaje list:
• rozwijalne
• i zwykłe.
20
Listy rozwijane
• można zmieniać dynamicznie zawartość;
• można
wybierać
jedynie
spośród
dostępnych na liście wartości;
21
Metody JComboBox
void addItem
addItem(Object item)
– dodaje element do listy,
void insertItemAt(Object item, int index)
– wstawia element na wybranej pozycji
void removeItem(Object item)
– usuwa z listy wskazany element,
void removeItemAt(int index)
– usuwa z listy element o podanym indeksie,
void addActionListener(ActionListener l)
– dodaje słuchacza akcji, zdarzenie actionPerformed
wywoływane jest w momencie zmiany wyboru na liscie
(takze przy jej tworzeniu).
22
Przykład
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
23
1.
2.
3.
4.
public class ComboBoxy extends JFrame {
private JComboBox lista = new JComboBox();
private JPanel panel = new JPanel();
String[] nazwy = {"biały", "zółty", "czerwony",
"niebieski"};
5. Color[] kolory = {Color.WHITE, Color.YELLOW,
Color.RED, Color.BLUE};
6. Color kolor = kolory[0];
7. …
24
•
•
•
•
•
•
•
•
public ComboBoxy()
{
super("Przyklad listy");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(new BorderLayout());
setBounds(200, 200, 300, 300);
lista.addActionListener(new ActionListener()
{…
25
•
•
•
•
lista.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
– JComboBox cb = (JComboBox) e.getSource();
– int i = cb.getSelectedIndex();
– if (i >= 0 && i < kolory.length)
–
panel.setBackground(kolory[i]);
• }
• }
• };
26
•
•
•
•
•
•
for (int i = 0; i < nazwy.length; i++)
lista.addItem(nazwy[i]);
add(lista, BorderLayout.NORTH);
add(panel, BorderLayout.CENTER);
setVisible(true);
}
27
• public static void main(String[] args) {
• new ComboBoxy();
• }
• }
28
Etykieta JLabel
29
Klasa JButton
30
Klasa JTextField
31
Przykład Menu
private JMenuBar glowne = new JMenuBar();
private JMenu[] kategorie = {
new JMenu("Tydzien"), new JMenu("Miesiac")};
32
private JMenuItem[] tydzien = {
new JMenuItem("poniedzialek"), new JMenuItem("sroda"), new
JMenuItem ("piatek")};
private JMenu[] miesiac = {
new JMenu("styczen"), new
JMenu("luty"),new JMenu("marzec"),new
JMenu("...")};
33
uwaga
private JMenuItem[] tydzien = {
new JMenuItem("poniedzialek"), new JMenuItem("sroda"), new JMenu
("piatek")};
34
• private JMenuItem[] styczen = {
•
new JMenuItem("1-wszy tydzien"),
new JMenuItem("2-gi tydzien")};
• private JMenuItem[] luty = {
•
new JMenuItem("1-wszy tydzien"),
new JMenuItem("2-gi tydzien")};
35
private JPanel panel = new JPanel();
private JPopupMenu kontekstowe = new JPopupMenu();
private JMenuItem[] podreczne = {
new JMenuItem("zapisz"), new JMenuItem("uwagi")};
36
składamy
•
•
•
•
•
•
•
•
•
•
•
private void ulozMenuGlowne() {
for (int i = 0; i < kategorie.length; i++)
glowne.add(kategorie[i]);
for (int i = 0; i < tydzien.length; i++)
kategorie[0].add(tydzien[i]);
for (int i = 0; i < miesiac.length; i++)
kategorie[1].add(miesiac[i]);
for (int i = 0; i < styczen.length; i++)
miesiac[0].add(styczen[i]);
for (int i = 0; i < luty.length; i++)
miesiac[1].add(luty[i]);
•
•
•
•
•
•
styczen[0].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(KartaDan.this, "zapisano!");
}
});
}
37
38
• private void ulozMenuKontekstowe() {
•
for (int i = 0; i < podreczne.length; i++)
•
kontekstowe.add(podreczne[i]);
• podreczne[1].addActionListener(new ActionListener() {
• public void actionPerformed(ActionEvent e) {
• JOptionPane.showMessageDialog(KartaDan.this,
"UWAGI DODANO!!!");
• }
• });
• }
39
Ruszamy - konstruktor
• public KartaDan() {
•
•
•
•
•
•
•
• …
super("Przykłady menu");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(new BorderLayout());
setBounds(200, 200, 300, 300);
ulozMenuGlowne();
setJMenuBar(glowne);
ulozMenuKontekstowe();
40
Konstruktor cd.
•
•
•
•
•
•
•
•
•
•
panel.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
if (e.isPopupTrigger())
kontekstowe.show((JPanel)e.getSource(), e.getX(),
e.getY());
}
public void mouseReleased(MouseEvent e) {
if (e.isPopupTrigger())
kontekstowe.show((JPanel)e.getSource(), e.getX(),
e.getY());
}
});
41
Mysz
•
•
•
•
•
Public void mouseClicked (MouseEvent e){}
Public void mousePressed (MouseEvent e){}
Public void mouseExited (MouseEvent e){}
Public void mouseEntered (MouseEvent e){}
Public void mouseReleased (MouseEvent e){}
42
• class ObsługaMyszy impelements MouseListener
{ ObsługaMyszy()
{ addMouseListener(this);
// rejestracja zainteresowania zdarzeniami }
• public void mouseClicked(MouseEvent e)
{ System.out.println("Kliknięto " +
e.getClickCount() + "razy"); System.out.println("w
punkcie: (" + e.getX() + "," + e.getY() + ")"); }
// metody dla nieinteresujących nas zdarzeń zostawiamy puste
•
•
•
•
•
public void mousePressed(MouseEvent e) { }
public void mouseReleased(MouseEvent e) { }
public void mouseEntered(MouseEvent e) { }
public void mouseExited(MouseEvent e) { }
}
43
• Na rzecz obiektu MouseEvent można
wywoływać następujące metody:
– getClickCount() - zwraca całkowitą liczbę
kliknięć przyciskiem myszy,
– getPoint() - zwraca obiekt Point - współrzędne
(x,y) klikniętego punktu,
– getX() - zwraca współrzędną x pozycji
kursora,
– getY() - zwraca współrzędną y pozycji
kursora.
44
45
koniec
•
•
•
•
•
•
•
•
panel.setBackground(Color.BLUE);
add(panel, BorderLayout.CENTER);
setVisible(true);
}
public static void main(String[] args) {
new KartaDan();
}
}
46