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