Tworzenie i obsługa graficznego interfejsu uŝytkownika Programowanie w środowisku rozproszonym. Wykład 3. Aplety aplikacje uruchamiane w środowisku przeglądarki - przykład import java.applet.applet; import java.awt.graphics; public class PierwszyAplet extends Applet public void paint(graphics g) g.drawstring("to jest pierwszy aplet",30,30); 2 1
Uruchamianie apletu <HTML> <HEAD> <TITLE>To jest tytuł strony </TITLE> </HEAD> <BODY> <APPLET CODE="PierwszyAplet.class WIDTH=150 HEIGHT=100> </APPLET> </BODY> </HTML> 3 Podstawowe metody apletu init - w chwili inicjalizacji start - wyświetlenie strony stop - minimalizacja strony destroy - usunięcie apletu z pamięci (poprzedzone realizacją metody stop) paint - gdy zachodzi potrzeba ponownego przerysowania powierzchni apletu 4 2
Komponenty AWT - struktura 5 Komponenty AWT 6 3
Tworzenie komponentów (na przykładzie przycisków i etykiet) import java.awt.*; import java.applet.applet; public class ObslugaZdarzen extends Applet Button p1 = new Button("Polecenie 1"); Button p2, p3; Label et1 = new Label("To jest pierwsza etykieta"); Label et2; 7... public void init() p2 = new Button("Polecenie 2"); p3 = new Button(); p3.setlabel("polecenie 3"); p3.setenabled(false); et2 = new Label(); et2.settext("to jest druga etykieta"); add(et1); add(et2); add(p1); add(p2); add(p3); 8 4
... 9 Obsługa zdarzeń Elementy uczestniczące w procesie obsługi zdarzeń: uŝytkownik programu - który wykonuje pewną akcję element interfejsu, którego dotyczyło zdarzenie (np. przycisk lub pole tekstowe) obiekt reprezentujący zdarzenie interfejs definiujący nagłówek metody obsługującej zdarzenie, klasa implementująca interfejs 10 5
Obsługa zdarzenia kliknięcie myszką na przycisku W interfejsie ActionListener zdefiniowany jest nagłówek metody: public void actionperformed(actionevent e) uruchamianej jako odpowiedź na zdarzenie polegające na kliknięciu na przycisku. 11 Obsługa kliknięcia przykład 1 import java.awt.*; import java.awt.event.*; import java.applet.applet; public class ObslugaZdarzen extends Applet Button p1 = new Button("Polecenie 1"); Button p2 = new Button("Polecenie 2"); Label etykieta = new Label("Zaden przycisk nie zostal wcisniety!!"); 12 6
... public void init() p1.addactionlistener(new Obsluga1()); p2.addactionlistener(new Obsluga2()); add(p1); add(p2); add(etykieta); class Obsluga1 implements ActionListener public void actionperformed(actionevent e) etykieta.settext("przycisk 1"); class Obsluga2 implements ActionListener public void actionperformed(actionevent e) etykieta.settext("przycisk 2"); 13... 14 7
Przykład 2 import java.awt.*; import java.awt.event.*; import java.applet.applet; public class ObslugaZdarzen extends Applet implements ActionListener Button p1 = new Button("Polecenie 1"); Button p2 = new Button("Polecenie 2"); Label etykieta = new Label("Zaden przycisk nie zostal wcisniety!!"); public void init() p1.addactionlistener(this); p2.addactionlistener(this); add(p1); add(p2); add(etykieta); 15... public void actionperformed(actionevent e) if (e.getsource() == p1) etykieta.settext("przycisk 1"); else etykieta.settext("przycisk 2"); 16 8
Interfejs FocusListener public void focusgained(focusevent e) public void focuslost(focusevent e) 17 Przykład 3 import java.awt.*; import java.awt.event.*; import java.applet.applet; public class Przyciski extends Applet Button p1 = new Button("Polecenie 1"); Button p2 = new Button("Polecenie 2"); Button p3 = new Button("Polecenie 3"); Label etykietaklik = new Label(); Label etykietaskupiony = new Label(); 18 9
... public void init() add(etykietaklik); add(etykietaskupiony); p1.addactionlistener(new Klikniecie()); p2.addactionlistener(new Klikniecie()); p3.addactionlistener(new Klikniecie()); p1.addfocuslistener(new Skupiony()); p2.addfocuslistener(new Skupiony()); p3.addfocuslistener(new Skupiony()); add(p1); add(p2); add(p3); 19... class Klikniecie implements ActionListener public void actionperformed(actionevent e) Button przycisk = (Button) e.getsource(); etykietaklik.settext("wcisnieto przycisk: " + przycisk.getlabel()); validate(); 20 10
... class Skupiony implements FocusListener public void focusgained(focusevent e) Button przycisk = (Button) e.getsource(); etykietaskupiony.settext("elementem skupionym jest: " + przycisk.getlabel()); validate(); public void focuslost(focusevent e) Button przycisk = (Button) e.getsource(); etykietaskupiony.settext("elementem skupionym nie jest: " + przycisk.getlabel()); validate(); 21 Rozmieszczenie elementów Layout Manager - klasa odpowiedzialna za rozmieszczenie elementów w oknie 22 11
FlowLayout Manager import java.awt.*; import java.applet.applet; public class Rozmieszczenie extends Applet public void init() setlayout(new FlowLayout()); add(new Button("Jeden")); add(new Button("Dwa")); add(new Button("Sto siedemdziesiat osiem")); 23 FlowLayout Manager Konstruktory public FlowLayout() public FlowLayout(int alignment) public FlowLayout(int alignment, int horizontalgap, int verticalgap) Uwagi: Dopuszczalne wartości dla parametru alignment to: FlowLayout.LEFT, FlowLayout.RIGHT, oraz FlowLayout.CENTER Domyślne wartości dla horizontalgap i verticalgap wynoszą 5 24 12
GridLayout Manager import java.awt.*; import java.applet.applet; public class Rozmieszczenie extends Applet public void init() setlayout(new GridLayout(2,2)); add(new Button("Jeden")); add(new Button("Dwa")); add(new Button("Sto siedemdziesiat osiem")); 25 GridLayout Manager Konstruktory public GridLayout(int rows, int columns) public GridLayout(int rows, int columns, int horizontalgap, int verticalgap) GridLayout(0,2) dwie kolumny, niesprecyzowana liczba wierszy 26 13
BorderLayout Manager import java.awt.*; import java.applet.applet; public class Rozmieszczenie extends Applet public void init() setlayout(new BorderLayout()); add("north",new Button("Jeden")); add("west",new Button("Dwa")); add("center",new Button("Trzy")); add("east",new Button("Cztery")); add("south",new Button("Piec")); 27 BorderLayout Manager Konstruktory: public BorderLayout() public BorderLayout(int horizontalgap, int verticalgap) 28 14
Łączenie paneli 29 Łączenie paneli import java.awt.*; import java.applet.applet; import java.awt.event.actionlistener; import java.awt.event.actionevent; public class LaczeniePaneli extends Applet implements ActionListener TextField poleimie, polenazwisko, poleulica, polemiasto, poletelefon; Button akceptacja, rezygnacja; TextArea oknoedycyjne; final static String OK = "Akceptacja"; final static String CANCEL = "Rezygnacja"; 30 15
Łączenie paneli public void init() setlayout(new BorderLayout()); Panel opisy = new Panel(); opisy.setlayout(new GridLayout(5,1)); opisy.add(new Label("Imie")); opisy.add(new Label("Nazwisko")); opisy.add(new Label("Ulica")); opisy.add(new Label("Miasto")); opisy.add(new Label("Telefon")); Panel edycja = new Panel(); edycja.setlayout(new GridLayout(5,1,0,10)); edycja.add(poleimie = new TextField(30)); edycja.add(polenazwisko = new TextField(30)); edycja.add(poleulica = new TextField(40)); edycja.add(polemiasto = new TextField(20)); edycja.add(poletelefon = new TextField(15)); 31 Łączenie paneli Panel przyciski = new Panel(); przyciski.setlayout(new FlowLayout(FlowLayout.CENTER,10,10)); akceptacja = new Button("Wyslij"); akceptacja.addactionlistener(this); akceptacja.setactioncommand(ok); przyciski.add(akceptacja); rezygnacja = new Button("Anuluj"); rezygnacja.addactionlistener(this); rezygnacja.setactioncommand(cancel); przyciski.add(rezygnacja); Panel komunikat = new Panel(); komunikat.setlayout(new BorderLayout()); komunikat.add("north",new Label("Adres klienta:")); oknoedycyjne = new TextArea(6,30); oknoedycyjne.seteditable(false); komunikat.add("center",oknoedycyjne); 32 16
Łączenie paneli Panel tytul = new Panel(); tytul.setlayout(new FlowLayout(FlowLayout.CENTER,15,15)); tytul.setforeground(color.red); tytul.setfont(new Font("TimesRoman",Font.BOLD,24)); tytul.add(new Label("SKLEP INTERNETOWY")); add("west",opisy); add("north",tytul); add("center",edycja); add("east",komunikat); add("south",przyciski); 33 Łączenie paneli public void actionperformed(actionevent e) String polecenie = e.getactioncommand(); String nl = "\n"; if (polecenie.equals(ok)) oknoedycyjne.settext(null); oknoedycyjne.append("dane klienta: \n\n"); oknoedycyjne.append(poleimie.gettext() + nl); oknoedycyjne.append(polenazwisko.gettext() + nl); oknoedycyjne.append(poleulica.gettext() + nl); oknoedycyjne.append(polemiasto.gettext() + nl); oknoedycyjne.append(poletelefon.gettext() + nl); 34 17
Łączenie paneli else poleimie.settext(null); polenazwisko.settext(null); poleulica.settext(null); polemiasto.settext(null); poletelefon.settext(null); oknoedycyjne.settext(null); 35 Obsługa wierszy edycyjnych Intrefejs TextListener: public void textvaluechanged(textevent e) interfejs KeyListener public void keytyped(keyevent e) public void keypressed(keyevent e) public void keyreleased(keyevent e) 36 18
Obsługa wierszy edycyjnych 37 Obsługa wierszy edycyjnych import java.awt.*; import java.applet.applet; import java.awt.event.actionlistener; import java.awt.event.actionevent; import java.awt.event.textlistener; import java.awt.event.textevent; import java.awt.event.keylistener; import java.awt.event.keyevent; public class WierszEdycyjny extends Applet implements ActionListener, TextListener,KeyListener Label info; TextField wiersz; final static String KASUJ_TEKST = "KasujTekst"; final static String KASUJ_INFO = "KasujInfo"; 38 19
Obsługa wierszy edycyjnych public void init() setlayout(new BorderLayout()); Panel wyswietlacz = new Panel(); wyswietlacz.setlayout(new GridLayout(2,1,15,15)); info = new Label(); wyswietlacz.add(info); wiersz = new TextField(20); wiersz.addkeylistener(this); wiersz.addtextlistener(this); wyswietlacz.add(wiersz); 39 Obsługa wierszy edycyjnych Panel przyciski = new Panel(); Button p; p = new Button(" Kasuj tekst "); p.addactionlistener(this); p.setactioncommand(kasuj_tekst); przyciski.add(p); p = new Button(" Kasuj info "); p.addactionlistener(this); p.setactioncommand(kasuj_info); przyciski.add(p); add("north",wyswietlacz); add("south",przyciski); 40 20
Obsługa wierszy edycyjnych public void textvaluechanged(textevent e) info.settext(info.gettext() + "change "); public void actionperformed(actionevent e) String polecenie = e.getactioncommand(); String nl = "\n"; if (polecenie.equals(kasuj_tekst)) wiersz.settext(""); if (polecenie.equals(kasuj_info)) info.settext(""); wiersz.requestfocus(); 41 Obsługa wierszy edycyjnych public void keytyped(keyevent e) info.settext(info.gettext() + "T "); public void keypressed(keyevent e) info.settext(info.gettext() + "P "); if (e.getkeychar() == KeyEvent.VK_SPACE) e.consume(); public void keyreleased(keyevent e) info.settext(info.gettext() + "R "); 42 21
Obsługa list interfejs ItemListener: public void itemstatechanged(itemevent e) 43 Obsługa list import java.awt.*; import java.applet.applet; import java.awt.event.actionlistener; import java.awt.event.actionevent; import java.awt.event.itemlistener; import java.awt.event.itemevent; public class Lista extends Applet implements ActionListener, ItemListener List lista; Label opis1 = new Label(); Label opis2 = new Label(); 44 22
Obsługa list public void init() lista = new List(8); lista.add("aaa"); lista.add("bbb"); lista.add("ccc"); lista.add("xxx",0); lista.remove(3); lista.remove("bbb"); lista.addactionlistener(this); lista.additemlistener(this); add(lista); add(opis1); add(opis2); 45 Obsługa list public void actionperformed(actionevent e) //dwukrotne klikniecie String polecenie = e.getactioncommand(); opis1.settext("dwukrotne klikniecie: " + polecenie + " " + lista.getselectedindex()); validate(); public void itemstatechanged(itemevent e) opis2.settext("klikniecie: " + lista.getselectedindex()); validate(); 46 23
Obsługa pól wyboru 47 Obsługa pól wyboru import java.awt.*; import java.applet.applet; import java.awt.event.itemlistener; import java.awt.event.itemevent; public class PolaWyboru extends Applet Checkbox wybor1, wybor2, wybor3, wybor4, wybor5, wybor6; CheckboxGroup grupa; Label opis1 = new Label(); Label opis2 = new Label(); ObslugaParametrow obsparam = new ObslugaParametrow(); ObslugaOpcji obsopcji = new ObslugaOpcji(); 48 24
Obsługa pól wyboru public void init() setlayout(new BorderLayout()); Panel opisy = new Panel(); opisy.setlayout(new GridLayout(2,0)); opisy.add(opis1); opisy.add(opis2); Panel parametry = new Panel(); parametry.setlayout(new GridLayout(0,1)); wybor1 = new Checkbox("Parametr 1"); wybor1.setname("par01"); wybor1.additemlistener(obsparam); 49 Obsługa pól wyboru wybor2 = new Checkbox(); wybor2.setlabel("parametr 2"); wybor2.setstate(true); wybor2.setname("par02"); wybor2.additemlistener(obsparam); wybor3 = new Checkbox("Parametr 3",true); wybor3.setname("par03"); wybor3.additemlistener(obsparam); parametry.add(wybor1); parametry.add(wybor2); parametry.add(wybor3); 50 25
Obsługa pól wyboru Panel opcje = new Panel(); opcje.setlayout(new GridLayout(0,1)); grupa = new CheckboxGroup(); wybor4 = new Checkbox("Opcja 1",false,grupa); wybor4.setname("opcja01"); wybor4.additemlistener(obsopcji); wybor5 = new Checkbox("Opcja 2",true,grupa); wybor5.setname("opcja02"); wybor5.additemlistener(obsopcji); wybor6 = new Checkbox("opcja 3",false,grupa); wybor6.setname("opcja03"); wybor6.additemlistener(obsopcji); opcje.add(wybor4); opcje.add(wybor5); opcje.add(wybor6); 51 Obsługa pól wyboru Panel polawyboru = new Panel(); polawyboru.setlayout( new FlowLayout(FlowLayout.CENTER,10,10)); polawyboru.add(parametry); polawyboru.add(opcje); add("north",opisy); add("center",polawyboru); 52 26
Obsługa pól wyboru class ObslugaParametrow implements ItemListener public void itemstatechanged(itemevent e) StringBuffer sb = new StringBuffer(); Checkbox wsk = (Checkbox) e.getsource(); if (wsk.getstate()) sb.append("włączono: " + wsk.getname() + ""); else sb.append("wyłączono: " + wsk.getname() + ""); 53 Obsługa pól wyboru sb.append("ustawione parametry to: ["); if (wybor1.getstate()) sb.append(wybor1.getname() + " "); if (wybor2.getstate()) sb.append(wybor2.getname() + " "); if (wybor3.getstate()) sb.append(wybor3.getname() + " "); sb.append("]"); opis1.settext(sb.tostring()); validate(); 54 27
Obsługa pól wyboru "); class ObslugaOpcji implements ItemListener public void itemstatechanged(itemevent e) StringBuffer sb = new StringBuffer(); Checkbox wsk = (Checkbox) e.getsource(); if (wsk.getstate()) sb.append("włączono: " + wsk.getname() + " opis2.settext(sb.tostring()); validate(); 55 Obsługa suwaków Interfejs AdjustmentListener: public void adjustmentvaluechanged(adjustmentevent e) 56 28
Obsługa suwaków import java.awt.*; import java.applet.applet; import java.awt.event.adjustmentlistener; import java.awt.event.adjustmentevent; import java.awt.event.actionlistener; import java.awt.event.actionevent; public class Pasek extends Applet Scrollbar suwak; Label opis1 = new Label(); Label opis2 = new Label(); ObslugaPrzyciskow obsprzyciskow = new ObslugaPrzyciskow(); 57 Obsługa suwaków public void init() setlayout(new BorderLayout()); Panel opisy = new Panel(); opisy.setlayout(new GridLayout(2,0)); opisy.add(opis1); opisy.add(opis2); suwak = new Scrollbar(Scrollbar.HORIZONTAL,0,10,0,100); suwak.addadjustmentlistener(new ObslugaSuwaka()); /* konstruktor - jeden z kilku!!! public Scrollbar(int orientation, int value,int visible, int minimum, int maximum) */ 58 29
Obsługa suwaków Panel przyciski = new Panel(); przyciski.setlayout(new FlowLayout(FlowLayout.CENTER)); Button p; p = new Button("Początek"); p.setactioncommand("pocz"); p.addactionlistener(obsprzyciskow); przyciski.add(p); p = new Button("Koniec"); p.setactioncommand("kon"); p.addactionlistener(obsprzyciskow); przyciski.add(p); add("north",opisy); add("center",suwak); add("south",przyciski); 59 Obsługa suwaków class ObslugaSuwaka implements AdjustmentListener public void adjustmentvaluechanged(adjustmentevent e) switch (e.getadjustmenttype()) case AdjustmentEvent.UNIT_INCREMENT: opis1.settext("zdarzenie: zwiększenie jednostkowe"); break; case AdjustmentEvent.UNIT_DECREMENT: opis1.settext("zdarzenie: zmniejszenie jednostkowe"); break; case AdjustmentEvent.BLOCK_INCREMENT: opis1.settext("zdarzenie: zwiększenie blokowe"); break; 60 30
Obsługa suwaków blokowe"); suwaka"); case AdjustmentEvent.BLOCK_DECREMENT: opis1.settext("zdarzenie: zmniejszenie break; case AdjustmentEvent.TRACK: opis1.settext("zdarzenie: przesunięcie break; default: opis1.settext("zdarzenie:????"); opis2.settext("wartość: " + e.getvalue()); validate(); 61 Obsługa suwaków class ObslugaPrzyciskow implements ActionListener public void actionperformed(actionevent e) String polecenie = e.getactioncommand(); if (polecenie.equals("pocz")) suwak.setvalue(0); opis1.settext("przycisk: Początek"); opis2.settext("wartość: " + suwak.getvalue()); if (polecenie.equals("kon")) suwak.setvalue(100); opis1.settext("przycisk: Koniec"); opis2.settext("wartość: " + suwak.getvalue()); 62 31