Fortsättningskurs i programmering F 5 GUI händelsehantering - undantagshantering Hugo Quisbert 20130205 1 Abstract Window Toolkit Paket för hantering av grafik dvs skapa grafisk användargränssnitt java.awt 2 1
Plattformberoende Utseende av GUI-komponenter varierar mellan olika plattformar byggstenen kallas Component(komponent) rektangulärt område på skärm flera olika typer av komponenter ämnade för olika användningsområde 3 Två grupper (efter användningsområde) Kontrollkomponenter Erbjuder interaktion med användaren reagerar på händelser Behållarkomponenter organiserar andra komponenter 4 2
Component Container Canvas Button List Choise Scrollbar Checkbox TextComponent Panel Window Label Applet Frame Dialog TextArea TextField FileDialog 5 6 3
7 import java.awt.*; class FrameEx5{ public static void main(string args[]){ Frame f = new Frame("Window to the World"); f.setsize(300, 400); f.setvisible(true); f.setbackground(color.black); f.setresizable(false); 8 4
import java.awt.*; class LabelEx3{ public static void main(string args[]){ Frame f = new Frame("Label example"); Label l = new Label("My first label"); f.add(l); f.pack(); f.setvisible(true); 9 10 5
11 import java.awt.*; class LayoutEx5{ public static void main(string args[]){ Frame f = new Frame("Layout example"); Label n = new Label("North"); Label s = new Label("South"); Label c = new Label("Center"); Label e = new Label("East"); Label w = new Label("West"); f.setlayout(new BorderLayout()); f.add(borderlayout.north, n); f.add("south", s); f.add(borderlayout.center, c); f.add("east", e); f.add("west", w); f.pack(); f.setvisible(true); 12 6
13 import java.awt.*; class ButtonEx3 extends Frame{ public static void main(string args[]){ ButtonEx3 f; f = new ButtonEx3(); Button b = new Button("OK..!"); f.setlayout(null); f.setsize(200, 300); b.setbounds(70, 260, 60, 20); f.add(b); f.setvisible(true); 14 7
15 import java.awt.*; class TextEx2{ public static void main(string args[]){ Frame f = new Frame("Text example"); f.setsize(400, 400); TextField tf = new TextField(10); TextArea ta = new TextArea(10, 10); Panel p1 = new Panel(); Panel p2 = new Panel(); p1.setsize(200, 200); p2.setsize(200, 200); f.setlayout(new BorderLayout()); f.add("north", p1); f.add("south", p2); p1.setlayout(null); p2.setlayout(null); tf.setbounds(100, 50, 200, 20); ta.setbounds(100, 50, 200, 100); p1.add(tf); p2.add(ta); f.setvisible(true); 16 8
Användning av ett GUI 1 main 2 3 GUI Tar emot och visar data Bearbetning av data 17 import java.awt.*; class Awtexmp1{ public static void main(string args[]){ Application app = new Application(); class Application { private GUI thegui; public Application() { thegui = new GUI(); /*ev andra metoder */ 18 9
import java.awt.*; class Demo1{ public static void main(string args[]){ Application app = new Application(); class Application { private GUI thegui; public Application() { thegui = new GUI("Demo 1"); class GUI{ private Frame f; Label l1; TextField tf; Button ok; GUI(String ftitel){ f = new Frame(ftitel); f.setsize(200, 300); f.setlayout(null); l1 = new Label("Iåur näjm, pliss"); l1.setbounds(50, 30, 100, 20); tf = new TextField(); tf.setbounds(50, 60, 100, 20); ok = new Button("OK..!"); ok.setbounds(70, 260, 60, 20); f.add(l1); f.add(tf); f.add(ok); f.setvisible(true); 19 class GUI implements ActionListener{ private Frame f; Label l1, l2; TextField tf; Button ok; GUI(String ftitel){ f = new Frame(ftitel); f.setsize(200, 300); f.setlayout(null); l1 = new Label("Iåur näjm, pliss"); l1.setbounds(50, 30, 100, 20); tf = new TextField(); tf.setbounds(50, 60, 100, 20); ok = new Button("OK..!"); ok.setbounds(70, 260, 60, 20); ok.addactionlistener(this); f.add(l1); f.add(tf); f.add(ok); f.setvisible(true); public void actionperformed(actionevent e){ if(e.getsource() == ok){ l2 = new Label("Iåur najm is: " + tf.gettext()); l2.setbounds(50, 90, 100, 20); f.add(l2); 20 10
- Händelsehantering GUI = ingen sekvens i programmets exekvering Händelsestyrd programmering Varje åtgärd av användaren genererar ett händelseobjekt Händelseobjektet tas sedan hand om av ett lyssnarobjekt 21 - Händelsehantering Superklassen Event subklasser som : FocusEvent KeyEvent MouseEvent WindowEvent ActionEvent AdjustmentEvent ItemEvent TextEvent 22 11
- Händelsehantering Ett lyssnarobjekt är ett objekt av en klass som implementerar ett Listener-inteface(mer om det senare) Det finns en ActionListener-interface med en operation ActionPerformedför att ta hand om ActionEvent-objekt TextListener > TextValueChanged > TextEvent osv... 23 import java.awt.*; import java.awt.event.*; class Demo4{ public static void main(string args[]){ Application app = new Application(); class Application{ GUI thegui; String str = "Of course Java is...: "; Application(){ thegui = new GUI(this); public String getj(checkbox c){ String ret; ret = c.getlabel(); return str + ret; public String getk(checkbox c){ String ret; ret = c.getlabel(); return str + ret + " Isn't it!?"; public String geto(checkbox c){ String ret; ret = c.getlabel(); return str + ret + ". I knew that!!!"; 24 12
class GUI implements ItemListener, ActionListener{ Frame f; Application app; Label l, opinion; Panel p; CheckboxGroup cbg; Button quit; public Checkbox k, j, o; GUI(Application app){ this.app = app; f = new Frame("Demo 2");f.setSize(400, 300);f.setLayout(null); l = new Label("Java is...?"); l.setbounds(170, 30, 60, 20); f.add(l); p = new Panel();p.setBounds(30, 50, 200, 100); p.setlayout(new GridLayout(3, 1)); cbg = new CheckboxGroup(); 25 k = new Checkbox("Fun", cbg, false);j = new Checkbox("Funnier", cbg, false); o = new Checkbox("Funniest", cbg, false); p.add("north", k);p.add("center", j); p.add("south", o); k.additemlistener(this);j.additemlistener(this); o.additemlistener(this); quit = new Button("Quit"); quit.addactionlistener(this); quit.setbounds(300, 270, 60, 20);f.add(quit); f.add(p);opinion = new Label("The answer is:"); f.add(opinion);opinion.setbounds(50, 270, 350, 20); f.setvisible(true); 26 13
public void itemstatechanged(itemevent e){ String str = null; if(e.getsource() == k){ str = app.getk(k); opinion.settext(new String(str)); else if(e.getsource()== j) { str = app.getj(j); opinion.settext(app.getj(j)); else if(e.getsource() == o) opinion.settext(app.geto(o)); 27 public void actionperformed(actionevent e){ if(e.getsource() == quit){system.exit(0); 28 14
Bortom Swing SWT SwingX Jgoodies JavaFX Apache Pivot 29 Undantasghantering Do, or do not There is no try -Yoda (The empire Strikes Back) 30 15
Undantagshändelser Alla program måste innehålla kontroller Data som programmet behandlar är riktigt Vad skall det göras (i programmet) när ett fel upptäcks? Kontroller ligger utsprida, ej samlade 31 Undantagshändelser Ett undantag (Exception) indikerar ett fel eller en ovanlig situation ett program kastas till en special sektion av kod ett undantagsobjekt genereras Detta objekt tas hand om av den metod som är bäst lämpad för ändamålet 32 16
Undantagshändelser Alla undantagsobjekt skall vara subklasser till klassen Exception Klassen har som attribut en sträng som beskriver felet Konstruktorn har denna sträng som parameter 33 Undantagshändelser Satsen thrownew genererar ett undantagsobjekt undantagsobjektet kastas från någon punkt i exekveringen och fångas av en annan try/catch kombination fångar angivet undantag 34 17
Undantagshändelser try { foo(...);... catch (Exception e){ //... 35 Undantagshändelser try { foo(...); catch(filenofoundexception){... catch(ioexception e){... catch(exception e){... 36 18
Undantagshändelser Vad händer om man inte fångar ett undantag? Finns ingen try/catch undantaget propageras till högsta metoden och är kastad från den metoden 37 Undantagshändelser try tvingar ett villkor över de satser den vakar över. Om ett undantagsobjekt genreras resterande satser exekveras ej. 38 19
Undantagshändelser class MyException extends Exception { private String word; public MyException(String s){ super( Felbeskrivningen ); word = s; //andra ev metoder 39 Undantagshändelser public void amethod(parmetrar) throws MyExecption { if(villkorsfel) throw new MyException(sträng); 40 20