170 likes | 338 Views
Programski jezici. proleće/leto 2009. Grafičko programiranje. Programiranje grafičkih programa se zasniva na događajima Grafički program reaguje na razne vrste događaja Događaji se dešavaju u nepredvidljivim trenucima i po nepredvidljivom redosledu. Grafičko programiranje.
E N D
Programski jezici proleće/leto 2009
Grafičko programiranje • Programiranje grafičkih programa se zasniva na događajima • Grafički program reaguje na razne vrste događaja • Događaji se dešavaju u nepredvidljivim trenucima i po nepredvidljivom redosledu Programski jezici
Grafičko programiranje • Događaji su predstavljeni objektima klasa koje su naslednice EventObject • Događaji su razvrstani prema tipu događaja: ActionEvent MouseEvent WindowEvent KeyEvent . . . Programski jezici
Grafičko programiranje • Mehanizam rukovanja događajima • Komponenta u kojoj se događaj desio je izvor događaja • Kada se desi događaj, JVM konstruiše objekat koji opisuje nastali događaj • Konstruisani objekat događaja se prenosi tačno određenom metodu rukovaoca događaja i taj metod se poziva radi obrade događaja Programski jezici
Grafičko programiranje • Rukovalac događaja mora biti objekat klase koja implementira specijalni interfejs • Rukovalac događaja se mora eksplicitno pridružiti komponenti koja je potencijalni izvor događaja Programski jezici
Grafičko programiranje • Tipovi događaja koje generišu komponente (izvori događaja) Tip događaja Dodeljeni interfejs rukovaoca ActionEvent ActionListener MouseEvent MouseListener WindowEvent WindowListener KeyEvent KeyListener FocusEvent FocusListener ItemEvent ItemListener TextEvent TextListener ComponentEvent ComponentListener ContainerEvent ContainerListener . . . . . . Programski jezici
Grafičko programiranje • Rukovalac događaja implementira odgovarajući XxxxListener interfejs • Rukovalac događaja se dodaje komponenti metodom addXxxxListener() • U rukovaocu događaja se izvršava tačno određeni metod koji obrađuje događaj Programski jezici
Grafičko programiranje • Primer: akcijski događaj (action event) za pritisak na dugme tasterom miša (i izbor iz menija) • akcijski događaj se obrađuje pomoću ActionListener objekta • ActionListener objekat mora imati metod actionPerformed() • Taj metod se automatski poziva kada se desi akcijski događaj Programski jezici
Grafičko programiranje • Format klase RD koja predstavlja rukovaoca događaja i služi za konstruisanje ActionListener objekta: public class RD implements ActionListener { ... public void actionPerformed(ActionEvent e) { // naredbe koje obrađuju događaj // pritiska tasterom miša na dugme } } Programski jezici
Grafičko programiranje • Rukovalac događaja za pritisak tasterom miša na dugme mora biti objekat klase koja implementira interfejs ActionListener • To obezbeđuje da rukovalac događaja za pritisak tasterom miša na dugme ima metod koji se poziva kada se desi događaj pritiska na dugme Programski jezici
Grafičko programiranje • Primer: brojanje pritisaka tasterom miša na dugme Programski jezici
Grafičko programiranje import java.awt.*; import javax.swing.*; import java.awt.event.*; // Početna klasa public class TestDugmeBrojač { public static void main(String[] args) { DugmeBrojačOkvir okvir = new DugmeBrojačOkvir(); okvir.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); okvir.setVisible(true); } } Programski jezici
Grafičko programiranje // Okvir sa dugmetom i prikazom broja pritisakadugmeta public class DugmeBrojačOkvir extends JFrame { private JLabel oznaka; //prikaz broja pritisakadugmeta // Unutrašnja klasa rukovaoca akcijskog događaja private class RukovalacDugmeta implements ActionListener { private int brojač; // brojač pritisaka dugmeta public void actionPerformed(ActionEvent e) { brojač++; oznaka.setText("Broj pritisaka = " + brojač); } } Programski jezici
Grafičko programiranje // Konstruktor public DugmeBrojačOkvir() { setTitle("Brojanje pritisaka na dugme "); setSize(300, 150); setLayout(new FlowLayout(FlowLayout.CENTER,30,20)); oznaka = new JLabel("Broj pritisaka = 0"); add(oznaka); JButton dugme = new JButton("Pritisni me"); add(dugme); dugme.addActionListener(new RukovalacDugmeta()); } } Programski jezici
Grafičko programiranje • Adapterske klase • Nisu svi tipovi događaja tako jednostavni za obradu kao pritisak tasterom miša na dugme • Primer: okvir tipa JFrame je izvor događaja tipa WindowEvent public interface WindowListener { public void windowOpened(WindowEvent e); public void windowClosing(WindowEvent e); public void windowClosed(WindowEvent e); public void windowIconified(WindowEvent e); public void windowDeiconified(WindowEvent e); public void windowActivated(WindowEvent e); public void windowDeactivated(WindowEvent e); } Programski jezici
Grafičko programiranje • Primer: odustajanje od zatvaranja okvira public class ZatvaračOkvira implements WindowListener { public void windowClosing(WindowEvent e) { if (korisnik se slaže) System.exit(0); } public void windowOpened(WindowEvent e) {} public void windowClosed(WindowEvent e) {} public void windowIconified(WindowEvent e) {} public void windowDeiconified(WindowEvent e) {} public void windowActivated(WindowEvent e) {} public void windowDeactivated(WindowEvent e) {} } Programski jezici
Grafičko programiranje • Adapterska klasa formalno implementira interfejs tako što su svi metodi interfejsa trivijalno definisani public class ZatvaračOkvira extends WindowAdapter { public void windowClosing(WindowEvent e) { if (korisnik se slaže) System.exit(0); } } okvir.addWindowListener(new ZatvaračOkvira()); Programski jezici