Videregående programmering i Java



Relaterede dokumenter
Jacob Nordfalk. Ingeniørhøjskolen i København. Nykøbing F itvisioncenter 24. februar 2004

Videregående programmering i Java

Objektorienterede metoder

Dag 10 Flertrådet programmering

Videregående programmering i Java

Grundlæggende Programmering ITU, Efterår Skriftlig eksamen i Grundlæggende Programmering

Eksempel på en database: studenter, kurser, eksamener

Kursus i OOP og Java

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java

Kursusgang 12. Oversigt: Sidste kursusgang Layout-manager Event-håndtering. Design af brugerflader 12.1

Databaseadgang fra Java

Software Construction 1 semester (SWC) Spørgsmål 1

Videregående programmering i Java

Tree klassen fra sidste forelæsning

Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004

Webserverprogrammering

Eksamens spørgsmål i Java HTML - DataBase 3. Semester (i)

Web- og serverprogrammering

RMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation).

Ugeseddel 4 1. marts - 8. marts

Polymorfi. Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type. Coercion

DM507 Algoritmer og datastrukturer

Programmering. Udvidet Programmering. Kurserne. Kurset: programmering i sproget Java. Lærerne: Morten Larsen og Peter Sestoft

Tabelbegrebet. Klassediagrammer (III) Oversigt. Anvendelse af Tabeller. Tabeller og qualified associations

DM507 Algoritmer og datastrukturer

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3

DANMARKS TEKNISKE UNIVERSITET

Klasser og nedarvning

//Udskriver System.out.println("Hej " + ditfornavn + " " + ditefternavn + "."); System.out.println("Du er " + dinalder + " aar gammel!

Hvad er Objekter - Programmering

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11

Anvendelse af metoder - Programmering

SWC eksamens-spørgsmål. Oversigt

Introduktion til ActionScript

Hvad er et distribueret objekt? Plan Objekter, objektreferencer, metoder, parameteroverførsel. Objekter: notation

Threads i Java. Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java

Objects First with Java A Practical Introduction Using BlueJ

Løsning af møntproblemet

Skriftlig eksamen i Datalogi

RMI med BlueJ. Tutorial lavet af Jákup W. Hansen TSU semester 11. desember 2007

Introduktion til ActionScript, fortsat

Indledning. Hvorfor det forholder sig sådan har jeg en masse idéer om, men det bliver for meget at komme ind på her. God fornøjelse med læsningen.

A Profile for Safety Critical Java

Undtagelseshåndtering i C#

Eksempel: et ordresystem note 5 Lagdeling s. 1

DM507 Algoritmer og datastrukturer

Skriftlig eksamen i Datalogi

Videregående programmering i Java

Transkript:

Videregående programmering i Java Dag 6 Komponenter (og lidt Swing og MVC) Læsning: VP 4, evt. VP 6 Dette materiale er under Åben Dokumentlicens, se http://www.sslug.dk/linuxbog/licens.html

Grafiske komponenter import java.awt.*; public class GrafiskVindue extends Frame Label labelhvaderditnavn = new Label(); TextField textfieldnavn = new TextField(); public GrafiskVindue() try jbinit(); catch(exception e) e.printstacktrace(); private void jbinit() throws Exception labelhvaderditnavn.settext("hvad er dit navn?"); labelhvaderditnavn.setbounds(new Rectangle(15, 69, 108, 15)); textfieldnavn.settext("jacob"); textfieldnavn.setbounds(new Rectangle(141, 61, 112, 29)); this.setlayout(null); this.add(textfieldnavn, null); this.add(labelhvaderditnavn, null); public void paint(graphics g) g.drawline(0,0,50,50); g.filloval(5,20,300,30); g.setcolor(color.green); String navn = textfieldnavn.gettext(); for (int i=0; i<50; i=i+10) g.drawstring("hej "+navn+"!",100+i,30+i);

Visuelt design af et grafisk program 5 3 2 4 1 (1) Design fanen (2) Visuelt designområde (3) Struktur af programmet (4) Egenskaber (og hændelser) på valgt element (5) Komponentfaner

Karakteristika ved javabønner Bønner skal have en konstruktør uden parametre Udviklingsværktøjet kan oprette komponenter på en ensartet måde: Rystetekst rystetekst1 = new Rystetekst(); Bønner kan have egenskaber Udviklingsværktøjet kan generere koden, der sætter egenskaber. Egenskaben tekst understøttes ved at bønnen definerer metoderne: public void settekst(string t) public String gettekst() Bønner bør defineres i en pakke Bønner bør være afgrænsede og uafhængige Bønner kan understøtte hændelses-lyttere Udviklingsværktøjet kan generere koden, der registrerer lyttere. Bønnen kan understøtte Action-hændelser ved at definere metoderne: public void addactionlistener(actionlistener l) public void removeactionlistener(actionlistener l) Bønner kan have tilknyttet ekstra information Denne information er kun til hjælp for udviklingsværktøjet: Hvilket ikon bønnen skal repræsenteres af i værktøjet Hvilke egenskaber der findes, beskrivelser og hvordan den aflæses/sættes Hvordan de redigeres. Der kan tilknyttes en klasse, der bestemmer f.eks.: Hvilke værdier der er mulige Hvilken javakode der skal sættes ind i kildeteksten Om et skræddersyet redigeringsvindue skal dukke op

Genbrugelige komponenter Komponenter er programmørens byggeklodser De kan bruges igen og igen i mange sammenhænge De kan sættes sammen på alle mulige måder De er nemme at indstille Udviklingsværktøj kan generere programkoden for programmøren Grafiske brugergrænseflader er som regel helt bygget op af komponenter! Komponenter i Java hedder Javabønner (eng.: JavaBeans)

Komponentbaseret udvikling Eksempel: Bønnen TextField Egenskab Type Egenskab sættes med Egenskab aflæses med text String settext(string t) gettext() editable boolean seteditable(boolean rediger) iseditable() columns int setcolumns(int bredde) getcolumns() echochar char setechochar(char tegn) getechochar() Bruge en javabønne fra et udviklingsværktøj import java.awt.*; import java.awt.event.*; public class BenytBoenneMedVaerktoej extends Frame TextField textfieldnavn = new TextField(); // opret bønnen public BenytBoenneMedVaerktoej() try jbinit(); catch(exception e) e.printstacktrace(); private void jbinit() throws Exception textfieldnavn.settext("jacob"); // sæt egenskaben text textfieldnavn.setbounds(new Rectangle(141, 61, 112, 29)); this.setlayout(null); this.add(textfieldnavn, null);

Hændelser - genereret af værktøj import java.awt.*; public class GrafiskVindue extends Frame Button buttonopdater = new Button(); TextArea textareahilsen = new TextArea(); private void jbinit() throws Exception buttonopdater.setlabel("opdater!"); buttonopdater.setbounds(new Rectangle(231, 60, 91, 32)); buttonopdater.addactionlistener(new java.awt.event.actionlistener() public void actionperformed(actionevent e) buttonopdater_actionperformed(e); ); textareahilsen.settext("her kommer en tekst"); textareahilsen.setbounds(new Rectangle(6, 102, 316, 78)); this.add(textareahilsen, null); this.add(buttonopdater, null); void buttonopdater_actionperformed(actionevent e) String navn = textfieldnavn.gettext(); System.out.println("Opdater! navn="+navn); textareahilsen.settext("hej kære "+navn); repaint(); // gentegn vinduet, så paint() bliver kaldt

Designmønstret Observatør/Lytter (eng.: Observer/Listener) eller Abonnent (eng.: Publisher Subscriber) ('abonnere' på, at en ting (hændelse) sker) Problem: Et objekt skal kunne underrette nogle andre objekter om en eller anden ændring eller hændelse, men det er ikke hensigtsmæssigt, at objektet kender direkte til de andre objekter. Løsning: Lad lytterne (observatørerne) implementere et fælles interface (eller arve fra en fælles superklasse) og registrere sig hos det observable (observerbare) objekt. Det observable objekt kan herefter underrette lytterne gennem interfacet, når der er brug for det.

Designmønstret Observatør/Lytter Eksempel: Fælles kalender for en forening, der udbyder foredrag Hvis der sker ændringer i planen, skal kun de interesserede medlemmer have besked, dvs. de, som har tilmeldt sig et givent foredrag. xxx Interface Observerbar slettes, MedlemsIF omdøbes til Observatoer

Designmønstret Observatør/Lytter Programkode til observabelt objekt (og javabønne) public class MinButton extends Component /** Lyttere til denne bønne */ private ArrayList lyttere = new ArrayList(2); Værktøjets kode: import java.awt.*; public class GrafiskVindue extends Frame MinButton buttonopdater = new MinButton(); public void addactionlistener(actionlistener l) lyttere.add(l); private void jbinit() throws Exception public void removeactionlistener(actionlistener l) lyttere.remove(l); buttonopdater.setlabel("opdater!"); /** Sender en hændelse til lyttere. Lytterne er de, der buttonopdater.addactionlistener(new tidligere blevet java.awt.ev public void actionperformed(actionevent e) * tilføjet med kald til addactionlistener() */ buttonopdater_actionperformed(e); protected void underretlytterne(actionevent hændelse) ); for (Iterator i=lyttere.iterator(); i.hasnext(); ) textareahilsen.settext("her kommer en tekst" ActionListener l = (ActionListener) i.next(); l.actionperformed(hændelse); void buttonopdater_actionperformed(actionevent e) System.out.println("Knappen blev trykket!"); public void enmetode() if () // opret en Action-hændelse, der kommer fra denne komponent og send den // brug konstruktøren new ActionEvent( afsenderobjekt, id, beskrivelse) ActionEvent hændelse = new ActionEvent(this, 0, "der skete noget!"); underretlytterne(hændelse);