DOA Konstruktion av gränssnitt 5 april 2004 av Björn Eiderbäck
|
|
- Monica Falk
- för 7 år sedan
- Visningar:
Transkript
1 DOA Konstruktion av gränssnitt 5 april 2004 av Björn Eiderbäck Innehåll del 1, oh 1 oh 21 Användargränssnitt Något om tekniker för gränssnittsbyggande Typiskt gränssnitt Verktyg Knappar Vi hoppar en del i OH-bilderna Detaljerna får den intresserade läsa själv Textyta previous next previous next 2 Användargränssnitt Är den del av applikationen som låter användaren interagera och kontrollera tillämpningen med (vanligen) mus och tangentbord. Ett användargränssnitt består av grafiska komponenter (eng widgets eller gadgets) som knappar, inmatningsfält och listor. En komponent (widget) beskriver både utseende, delar av beteendet och koppling till applikationsmodellen. Bra användargränssnitt är självförklarande ger bra återkoppling kraschar mjukt med bra förklarande felmeddelanden stödjer både nybörjare och experter Som utvecklare: varför och hur? Varför är gränssnittet viktigt? Är interaktiva gränssnitt bra? Är en viss typ av gränssnitt bra i alla situationer? previous next 3 previous next 4 Vad bör man tänka på vid konstruktion? Vad är uppgiften? Vilken information behövs? Hur jobbar man idag? bra, dåligt. Vilka fel görs? Vilka (för-)kunskaper behövs för uppgiften? etc. Vem skall använda systemet? Nybörjare Tillfälliga eller sporadiska användare Personer som använder systemet ofta utan att vara experter Experter I vilken omgivning skall systemet fungera? Till oh 11 previous next 5 Shneidermans principer Princip 1: Var medveten om olikheter Människor är olika Människor lär, tänker och löser problem på olika sätt En del föredrar tabeller, visa gillar grafiska representationer och andra vill helst arbeta med text och siffror Vem skall använda systemet? Vilka uppgifter skall utföras och hur frekvent? Interaktionsstil Direktmanipulation Menyer Formulär Kommandospråk Naturligt språk previous next 6
2 Shneidermans Princip 2: Åtta gyllene regler Sträva efter enhetlighet Erbjud kortkommandon (för den erfarne användaren) Ge återkoppling Designa dialoger så att dom är slutna med handlingar organiserade med tydlig början, mitt och slut Undvik att låta användaren göra fel (tex genom att använda menyer istället för textbaserad inmatning) och försök göra felhanteringen enkel Gör det enkelt att ångra handlingar ( undo ) Sträva efter att användarna av systemet känner att dom har kontroll (och inte systemet som kontrollerar dem) Minimera belastning av korttidsminnet 7 ± 2 Shneidermans Princip 3: Undvik fel Användare gör fel hela tiden! I ordbehandlare, kalkylark, databaser, trafikledning, osv En undersökning visade att erfarna professionella användare av ordbehandlare och operativsystem gjorde misstag eller valde ineffektiva strategier i 31% av uppgifterna som tilldelades dem Vissa förbättringar genom bättre felmeddelanden fast bättre att undvika felen! För varje felmeddelande fundera på om det inte finns en lösning som undviker felet helt och hållet. Meddela vad som är fel (tex matchande parentesfel) Se till att kompletta sekvenser genomförs Korrigera kommandon Genom automatisk ifyllnad Eller hellre, undvik felen genom ett direktmanipulativt gränssnitt previous next 7 previous next 8 Hur presentera information? Organisera skärmen Var konsekvent terminologi, förkortningar, användning av stora bokstäver, etc Effektiv kunskapsinhämtning för användaren familjär och uppgiftsanpassad design Minimera belastning av användarens minne organisera informationen så att risken för att användaren glömmer något minimeras (använd etiketter mm) Gör ut- och inmatning så lika varandra som möjligt om möjligt skall data kunna matas in eller editeras där det presenteras Gör det möjligt för användaren att kontrollera eller anpassa form och format att passa sina egna önskemål Hur bör inmatning ske? Var konsekvent liknande sekvenser av operationer skall leda till liknande resultat Minimera antalet användaroperationer kopiera in tidigare inmatade data som defaultvärden tänk också på experter Minimera belastning av användarens minne undvik att användaren skall behöva komma ihåg långa listor eller koder Gör ut- och inmatning så lika varandra som möjligt Gör det möjligt för användaren att kontrollera eller anpassa form och format previous next 9 previous next 10 Frameworks (FW) Ett FW är centralt för konstruktion av interaktiva applikationer Varför ett framework? Svårt att tränga in i toolkits (bibliotek av komponenter), eller följa givna designregler Ett FW ger återanvändbar applikationsdesign eller delsystem Ett FW representeras av ett antal abstrakta klasser och definitioner av hur dessa klasser samarbetar, vilket vägleder programutvecklaren och gör det enklare att konstruera enhetliga gränssnitt och applikationer snabbare mer uniformt Vad är ett Framework? Ett framework beskriver hur ett problem skall brytas ner Inte bara klasserna utan också hur deras instanser samverkar definierar invarianter som objekten måste dela och anger också hur dom skall användas Ett framework påtvingar en modell som programmeraren måste anpassa sig till previous next 11 previous next 12
3 Hollywood Omvänd kontroll (Hollywood-principen) Ring inte oss vi ringer er! Koda med klassbibliotek Koda med framework Att använda ett framework Hur? skapa nya subklasser sätta ihop objekt (så att de samverkar) modifiera fungerande exempel Användarkod Framework kod i klassbibliotek användarkod previous next 13 previous next 14 Grafiskt Framework Ett grafiskt system fungerar ofta som ett framework i vilket man infogar egna applikationer Man anropar initieringsrutiner sätter upp anrop till egna rutiner (call-backs) huvudlooprutin (som sedan anropar dom tidigare definierade call-back-rutinerna) previous next 15 Exempel på FW Javas API (Application Programmer s Interface) Java:s API innehåller bla awt (abstract windowing toolkit) som delvis kan användas som ett FrameWork som bla stödjer konstruktion av applikationer med fönster Konstruktion av egna fönster Fundamental fönsterklass AWT: Frame Swing: JFrame Ett sätt att konstruera fönster med egna egenskaper (tex speciell utritning) är att subklassa fönsterklassen Beteendet ändras, dvs anpassas till dom egna önskemålen, genom att lämpliga metoder skrivs om i den konkreta (egna) subklassen Tex paint() eller paintcomponent() för att beskriva utritning Olika händelsehanterare definieras för att ta hand om olika inmatningshändelser I Swing subklassar man ofta JComponent previous next 16 Frame och Applet java.lang java.awt java.applet Object Object Component Component Container Container Window Window Panel Panel Frame Frame Applet Applet Ofta importeras alla klasser i java.awt Exempel 1 (AWT) package mypackage; // Klassdefinition (utan extends medför subklass till Object) public class MyApplication { Ofta är det tillräckligt att (Java 1.1) subklassa Frame och implementera tex WindowListener, MouseListener och MouseMotionListener senare skall vi titta på hur vi istället kan använda adaptorer skriva public static void main(string [] args) instansiera den egna klassen, ange fönsterstorlek och ange att fönster och mushändelser skall tas emot (addwindowlistener(this) osv), öppna det hela skriva public void paint(graphics g) rita på skärmen konstruera metoder för dom gränssnitt för dom "lyssnare" vi angett att vi skall implementera Instansiera Frame Sätt storlek Och öppna public static void main(string [] s) { Frame f = new Frame("Mitt första fönster"); f.setsize(200, 300); f.setvisible(true); previous next 17 previous next 18
4 och så sparar vi, kompilerar och kör Spara Spara filen med samma namn som klassen med extension.java, dvs här MyApplication.java Kompilera javac MyApplication.java Skapar en fil MyApplication.class Kör java MyApplication previous next 19 Vi definierar hur omritning av fönstret ska gå till Exempel 2 (AWT) package mypackage; public class MyFrame extends Frame { public MyFrame() { public MyFrame(String s) { super(s); public void paint(graphics g) { int x = 100, y = 200; for (int i = 0; i < 100; i++) { g.drawoval(x, y, i, i); public static void main(string [] s) { MyFrame f = new MyFrame("Mitt andra fönster"); f.setsize(200, 300); f.setvisible(true); previous next 20 För JFrame importerar vi javax.swing För mer avancerad grafik importerar vi java.awt.geom Med Graphics2D kan vi göra mer avancerade 2Dsaker Exempel 3, Swing, Graphics2D och JFrame package mypackage; import javax.swing.*; import java.awt.geom.*; public class MyJFrame extends JFrame { public void paint(graphics g) { Graphics2D g2 = (Graphics2D)g; g2.setstroke(new BasicStroke(8.0f)); g2.setcolor(color.magenta); g2.draw(new Arc2D.Double(40, 70, 200, 100, 120, 135, Arc2D.OPEN)); public static void main(string [] s) { MyJFrame f = new MyJFrame(); f.setsize(200, 300); f.setvisible(true); previous next 21 previous DOA 2003 Gränssnittskonstruktion Del 2 Innehåll, oh 22 resten Inmatningstyper Modeller för interaktiva applikationer Observer MVC Pluggbara komponenter Java Lyssnare Exempel adaptorer, MVC Enkel inmatning med knapp och fält Swing Referenser, ett axplock next Olika inmatningstyper Request mode Vänta tills dess att något sker tex på inmatning via tangentbordet eller klick på mus traditionell inmatning från tangentbord, scanf (C), readln (Pascal) sensor.waitbutton(); gc.displaystring("inmatning ", sensor.pos()); Där sensor är ett (tänkt) objekt som ger oss möjlighet att läsa av inmatningsverktygens status (dvs tex tangentbord och mus) Samplad/pollad Kontrollera status för enhet Omedelbar avläsning tex är någon knapp på musen nertryckt while(sensor.anybuttonpressed()) { pen.moveto(sensor.mousepoint()); inmatningstyper Händelsestyrd Förändringar hos enheter placeras i en kö intresserade program meddelas om att händelse inträffat från början av kön (flera kan alltså meddelas om samma händelse) Det är sedan upp till varje program att själv bestämma hur det skall (eller inte skall) reagera Exempel, en metod som reagerar om händelsen dubbeklick inträffar public void doubleclickevent(event event) { frame.setlocation(event.position()); previous next 23 previous next 24
5 Modeller för konstruktion av interaktiva tillämpningar Modeller Seeheim PAC MVC Morphing Tekniker Call-back Händelsebaserade Adaptorer, listeners Pluggbara Stil Direktmanipulativ, grafisk Drag-and-drop Objektorienterad Modeller för konstruktion av interaktiva tillämpningar Separation av applikation och presentation Newmans Reaction Handler, 1968 Var först med att separera applikation från presentation se [1, 2, 3] Seeheim, MVC och PAC Seeheim, 1985 På en Workshop i Seeheim konstruerade man den första konceptuella arkitekturen för ett User Interface Management System (UIMS). Man identifierade följande logiska komponenter i ett UIMS presentation - visualisering, in- och utmatning dialogkontroll - styr kommunikation mellan presentation och applikation tillämpningsgränssnitt - interfacesemantik i applikation previous next 25 previous next 26 Model View Controller (MVC), andra hälften av talet, se [4, 5, 6, 7] Delar upp applikationerna i tre komponenter applikationslogiken (modell) presentation (vy) interaktion (kontroll) Model View Controller (MVC) Model: logiken View: presentationen Controller: interaktionen Applikationslogiken Presentation Abstraction Control (PAC), 1989, se [8] Delar också upp applikationen i tre delar abstraktion presentation kontroll Mer konceptuell än MVC Presenterar V M C Interagerar previous next 27 previous next 28 Presentation Abstraction Control (PAC) Abstraction Presentation Control User Observer, beroenden mellan objekt Problem Hur kan vi konstruera en mekanism som tillåter att vissa objekt meddelas om någon vital del förändras i andra objekt utan att objekten görs starkt knutna till varandra? Krafter Vi vill undvika stark koppling och beroende mellan objekten Intresserade objekt skall informeras om något förändras. Lösning Upprätthåll en lista av objekt som är beroende av ett visst objekt. Om objektet förändras skall dom beroende objekten meddelas. Dom beroende objekten skall vart och en själva avgöra hur dom skall reagera på förändringen. previous next 29 previous next 30
6 ett sekvensdiagram som visar ett typiskt scenario Subject attach(observer) detach(observer) notify() observers for all o in observers { o.update(); * Observer update() :subject o 1 :observer o 2 :observer o 3 :observer :object attach(o 1 ) attach(o 2 ) attach(o 3 ) notify() update() update() update() notify() update() update() detach(o 3 ) previous next 31 previous next 32 Javalösning: observer Javalösning med Observer och Observable. I Java kan ett objekt som vill vara beroende av ett annat objekt implementera gränssnittet Observer medan det objekt som observeras görs till subklass till klassen Observable (eller möjligen använder ett fält som är subklass till denna typ). Gränssnittet Observer: package java.util; public interface Observer { void update(observable o, Object arg); Metod för att Lägga till observer Metod för att ta bort observer klassen Observable package java.util; public class Observable { private boolean changed = false; private Vector obs; private Observer[] arr = new Observer[2]; public Observable() {obs = new Vector(); public synchronized void addobserver(observer o) { if (!obs.contains(o)) {obs.addelement(o); public synchronized void deleteobserver(observer o) { obs.removeelement(o); Det här tar vi kursivt vidare till oh 42 previous next 33 previous next 34 Metoder för att meddela att objektet ändrats Meddelandet update( ) skickas till alla observers Observable forts public void notifyobservers() {notifyobservers(null); public void notifyobservers(object arg) { int size=0; Om vi inte anger synchronized (this) { argument så läggs null if (!haschanged()) return; på som argument size = obs.size(); if (size > arr.length) {arr = new Observer[size]; obs.copyinto(arr); clearchanged(); Från vem for (int i = size -1; i>=0; i--) { if (arr[i]!= null) { arr[i].update(this, arg); Argument till uppdateringen Sätt eller ta bort changed-flagga klassen Observable forts public synchronized void deleteobservers() { obs.removeallelements(); protected synchronized void setchanged() {changed = true; protected synchronized void clearchanged() {changed = false; public synchronized boolean haschanged() { return changed; public synchronized int countobservers() {return obs.size(); previous next 35 previous next 36
7 observer Exempel: MessageBoard och beroende studenter Subklassa Observable import java.util.*; class MessageBoard extends Observable { protected String message; public String getmessage(){return message; public void changemessage(string amessage){ message = amessage; this.setchanged(); this.notifyobservers(message); Argumentet sparas (om tex något beroende objekt vill läsa av det) Vi indikerar att objektet ändrats Vi meddelar beroende objekt, med message som argument observer: exempel Vi antar att det redan finns en "vanlig" implementation av Student, som vi utökar I update( ) definierar vi vad som skall göras då objektet får reda på att ett objekt som det är beroende av ändrats import Persons.*; import java.util.*; Implementera gränssnittet Observer class Student extends Persons.Student implements Observer { public void update(observable o, Object arg){ System.out.println(this.christianName() + " tar emot meddelande: " + arg); public Student(String christianname, String familyname, String pnr, String programme, String ) { super(christianname, familyname, pnr, programme, ); previous next 37 previous next 38 observer: exempel public class TestObserver { public static void main(string [] args) { MessageBoard board = new MessageBoard(); Student pers1 = new Student("Kalle", "Person", "133", X96", x96- kpe@nada.kth.se"); pers1.addcourse( DOA2004"); Gör pers1 beroende av board pers1.addcourse("the Classic Malts"); board.addobserver(pers1); board.changemessage("ny person: " + pers1.christianname()); /* Utskriften blir Kalle tar emot meddelande: Ny person: Kalle */ Meddela att board ändrats observer: exempel Student pers2 = new Student("Olle", "Olsson", "113", X96", "olle@swipnet.se"); pers2.addcourse( DOA2004"); pers2.addcourse("english-1"); Gör pers2 beroende av board board.addobserver(pers2); board.changemessage("ny person: " + pers2.christianname()); /* Utskriften blir Olle tar emot meddelande: Ny person: Olle Kalle tar emot meddelande: Ny person: Olle */ Meddela att board ändrats previous next 39 previous next 40 observer: exempel Student pers3 = new Student("Lotta", "Andersson", "123", "F97", "ff@home.se"); pers3.addcourse("mdi03"); pers3.addcourse( DOA2004"); board.addobserver(pers3); board.changemessage("ny person: " + pers3.christianname()); /* Utskriften blir Lotta tar emot meddelande: Ny person: Lotta Olle tar emot meddelande: Ny person: Lotta Kalle tar emot meddelande: Ny person: Lotta */ Model View Controller (MVC) Baseras på mönstret Observer Vyerna observerar (prenumererar på) förändringar hos modellen (publicisten) Annorlunda uttryckt: En vy görs beroende (eng. dependent) av modellen Vid intressanta förändringar i modellen så meddelas dom beroende objekten (dvs vyerna) Ren struktur Modellen skall inte ha någon direkt vetskap om vilka eller hur många vyer som är beroende av den Modellen skall inte heller ta hänsyn till hur dess data presenteras eller hur man interagerar med den previous next 41 previous next 42
8 MVC (Konkret struktur, med principkod) Modellen har implicita referenser till vyerna dependents MVC (Modellen ändras) - principiell kod Vid förändring görs (alternativt) model.changed() model.changed(argument) model.changed(argument, parameter) Vyn får meddelandet update(argument, parameter, avsändare) vyerna blir automatisk beronde då modellen anges via meddelandet model(model amodel) view.model(amodel) Denna metod finns i någon gemensam rotklass (i Java implementeras interfacet Observer och i Smalltalk är MVC så centralt att klassen Object implementerar nödvändiga metoder) så om man inte vill ta hand om argument räcker det att implementera update(argument, parameter) eller update(argument) previous next 43 previous next 44 Sammanfattning konstruktion med View- Controller (typfall) 1 Skapa klasser Skapa applikationslogiken Oftast bäst att fokusera på och konstruera den logiska applikationen, utan interaktion och presentation, först Frågor man kan ställa sig: Vad är modell? Vad är bara hjälpklasser? Skapa vy (I Java som direkt eller indirekt sublass till JComponent i Smalltalk som direkt eller indirekt subklass till View) Skapa kontrollklass I Java används en kombination av lyssnare och egna klasser i Smalltalk finns speciella kontrollklasser Gör kontrollern till defaultklass för vyn Detta gäller främst för den puristiska implementationen av MVC i Smalltalk, i Java får vi som sagt bla utnyttja lyssnare Sätt ihop det hela mha Observermönstret I Java måste man själv se till att koppla ihop det hela. I Smalltalk ser vyn till att rätta beroenden sätts upp då man ger den en modell previous next 45 2 Definiera hur utritning går till steg 1 skriv metoden Java AWT: paint(graphics) Swing: paintcomponent(graphics) i Smalltalk displayon: i vyn självklart gör man i praktiken ofta lite mer sofistikerade saker också 3 Definiera hur inmatning från interkationsverktygen ska gå till Java: konstruera händelselyssnare och lämpliga metoder Smalltalk: skriva metoder med givna namn som tar emot händelser av olika typer previous next 46 Problem med MVC Ibland svårt att definitivt separera funktionalitet mellan modell, vy och kontroller Ibland kan det vara bra att dela upp applikationen i datamodeller och applikationsmodell Datamodeller Applikationsmodell MVC i JAVA class MinModell extends Observable lägg till UI-objekt som prenumerant, dvs addobserver(observer o) skicka changed, dvs setchanged(); notifyobservers(); till modellobjektet om intressant ändring skett Applikationsmodellen kan då innehålla kod som är relaterad till användargränssnittet, dvs controller och view men fortfarande bevaras den lösa kopplingen till datamodellen previous next 47 class MinUIClass extends Component implements Observer implementera update(obsevervable o, Object x) som uppdaterar skärmen previous next 48
9 Java Eventmodell 1.1 Java 1.1 och senare har en modell där man definierar objekt som tar hand om händelser som sker i komponenter i gränssnitten I princip sätter man upp en händelselyssnare per typ (tangentbord, mus, fokus, etc.) av händelse man är intresserad av att applikationen ska reagera på Varje komponent (knapp, fält, mfl) kan också hanteras av sin egen händelselyssnare buttonx.addactionlistener(mylistenerforbuttonx) Med fördel används anonyma klasser för att definiera lyssnare för olika objekt Händelselyssnare Händelser till ett fönster eller komponent tas omhand av händelselyssnare påminner mycket om mönstret Observer, och i grafiska sammanhang om MVC, fast dom "beroende" objekten, dvs lyssnarna, måste implementera ett mer varierat utbud av metoder beroende av typ av lyssnare måste olika API:er implementeras Olika typer av lyssnare tar hand om olika typer av händelser, MouseListener, WindowListener, FocusListener, ActionListener, osv Namnet är uppbyggt på följande sätt: HändelsetypListener Till varje lyssnare finns ett speciellt interface som beskriver vilka metoder som lyssnaren implementerar Lyssnarna och deras interface tillhör ett gemensamt package nämligen: java.awt.event previous next 49 previous next 50 Händelselyssnare, några typiska KeyListener ActionListener ComponentListener FocusListener WindowListener EventListener TextListener MouseListener MouseMotionListener ItemListener AdjustmentListener Exempel: implementation av lyssnarfunktionalitet direkt i den egna klassen package MyTests; import java.awt.event.*; public class MyFrame1 extends Frame implements WindowListener{ public void windowopened(windowevent e) { public void windowclosing(windowevent e) { System.exit(0); 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) { ContainerListener previous next 51 previous next 52 public static void main(string [] args) { MyFrame1 frame = new MyFrame1(); frame.settitle("fönster som lyssnar efter fönsterhändelser v1 (fönstret gör det själv)"); frame.setsize(400, 300); frame.addwindowlistener(frame); frame.setvisible(true); Exempel: lyssnare som inre klass package MyTests; import java.awt.event.*; class MyWindowListener implements WindowListener { public void windowopened(windowevent e) { public void windowclosing(windowevent e) { System.exit(0); 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) { previous next 53 previous next 54
10 public class MyFrame2 extends Frame { public static void main(string [] args) { Frame frame = new MyFrame2(); frame.settitle("fönster som lyssnar efter fönsterhändelser v2 (med inre klass)"); frame.setsize(400, 300); frame.addwindowlistener(new MyWindowListener()); frame.setvisible(true); Adaptorer och händelselyssnare För att förenkla användningen av händelselyssnare finns ett antal fördefinierade adaptorer Dessa adaptorer implementerar alla metoder deklarerade i den aktuella lyssnarens gränssnitt En adaptor implemeneterar endast tomma metoder Genom att subklassa en adaptor och använda den som lyssnare så räcker det att endast skriva om dom metoder som verkligen gör något, så slipper man som i föregående exempel implementera massa metoder utan metodkropp Dessa adaptorer är speciellt enkla att använda tillsammans med anonyma inre klasser previous next 55 previous next 56 Object Object Klasser Adaptorer ComponentAdapter ContainerAdapter FocusAdapter KeyAdapter MouseAdapter MouseMotionAdapter WindowAdapter WindowListener WindowListener ActionListener ActionListener AdjustmentListener AdjustmentListener ComponentListener ComponentListener ContainerListener ContainerListener FocusListener FocusListener ItemListener ItemListener KeyListener KeyListener MouseListener MouseListener MouseMotionListener MouseMotionListener TextListener TextListener Gränssnitt Gränssnitt Exempel: lyssnare via adapter class MyWindowAdapter extends WindowAdapter { public void windowclosing(windowevent e) { System.exit(0); public class MyFrame3 extends Frame { public static void main(string [] args) { Frame frame = new MyFrame3(); frame.settitle("fönster som lyssnar efter fönsterhändelser v3 (med egen adapter)"); frame.setsize(400, 300); frame.addwindowlistener(new MyWindowAdapter()); frame.setvisible(true); previous next 57 previous next 58 Exempel: lyssnare via anonym subklass public class MyFrame4 extends Frame { public static void main(string [] args) { Frame frame = new MyFrame4(); frame.settitle("fönster som lyssnar efter fönsterhändelser v4 (med anonym subklass till adapter)"); frame.setsize(400, 300); frame.addwindowlistener(new WindowAdapter (){ public void windowclosing(windowevent e) { System.exit(0); ); frame.setvisible(true); Kommunicera och prenumerera på förändringar (en kort repetition) Traditionellt callbacks dvs en funktion kopplas till att ta emot en viss händelse från systemet eller komponent OpenGL, X enkelt statiskt MVC baseras på Observer/beroenden alla typer av förändringar via samma kanal möjligen parameterstyrt generellt (språk-) neutralt skalbart/distribuerbart en kanal med dispatching hos klient previous next 59 previous next 60
11 Lyssnare och adaptorer ett helt objekt kopplas till en viss typ av händelse högre nivå än call-backs lite komplext (och fördolt) beteende mest ett problem för ovana användare av det aktuella systemet finns stöd för detta i Java med fördefinierade listener-interface och adaptorer specialiserade kopplade främst till grafiska komponenter Smalltalk mer generell än Javas modell alla objekt förberedda går att pluggas till en speciell del (tex en instansvariabel) men också mer komplex (och fördold för den oinvigde) MVC i botten registrera lyssnare händelser tas omhand av lyssnare Lyssnare och adaptorer: implementation lyssnaren beskriver beteende och kommunicerar med applikationen kursivt vidare till oh 68 I Java är många komponenter, som vi tidigare nämnt, förberedda för att hanteras av speciella lyssnare I princip går det till på följande sätt en komponent registrerar ett visst objekt som en lyssnare på vissa typer av händelser när en händelse av denna typ inträffar så vidarbefordras den i form av ett förutbestämt (deklarerat i ett interface) meddelande till lyssnaren lyssnaren i sin tur är vanligen en applikation eller en adaptor som i sin tur kommunicerar med applikationen previous next 61 previous next 62 Centralt är klasserna Component med subklasser som Button och TextField Definierar metoder som addactionlistener dvs binder en lyssnare AWTEventMulticaster Hanterar bindning mellan applikation och komponent Skickar förutbestämt meddelande till lyssnare vid given händelse Exempel: definiera egen lyssnarklass import java.util.eventlistener; import java.awt.event.actionevent; public interface MyActionListener extends EventListener { public void actionperformed(actionevent e); AWTEventMulticaster Component listener * Listener previous next 63 previous next 64 (MyComponent ) package MyTests; import java.util.vector; import java.util.enumeration; import java.awt.event.actionevent; public class MyComponent { Vector actionlisteners = new Vector(); public void addmyactionlistener(myactionlistener listener) { if(!actionlisteners.contains(listener)) actionlisteners.add(listener); public void firemyaction() { ActionEvent event = new ActionEvent(this, 4711, "My action fired!"); Vector cloneoflisteners = (Vector) actionlisteners.clone(); for(enumeration e = cloneoflisteners.elements(); e.hasmoreelements();) ((MyActionListener) e.nextelement()).actionperformed(event); public void removemyactionlistener(myactionlistener listener) { if(actionlisteners.contains(listener)) actionlisteners.remove(listener); previous next 65 previous next 66
12 (MyListenerTest) package MyTests; import java.awt.event.actionevent; class MyLocalActionListener implements MyActionListener { public void actionperformed(actionevent e) { System.out.println("ActionEvent received: " + e); public class MyListenerTest { public static void main(string [] args) { MyComponent component = new MyComponent(); component.addmyactionlistener(new MyLocalActionListener()); component.addmyactionlistener(new MyLocalActionListener()); component.addmyactionlistener(new MyActionListener() { public void actionperformed(actionevent e) { System.out.println("ActionEvent received in anonymous class: " + e); ); component.firemyaction(); Eclipse Vi använder Eclipse för att koda nu För att göra kodandet enklare använder vi Eclipse som är en så kallad IDE Vi åtekommer till vad IDEer är senare (nästa pass på två timmar och i nästa uppsättning OH-bilder) previous next 67 previous next 68 Exempel: RitProgram1 package Prog1; import javax.swing.*; import java.awt.event.*; public class RitProgram1 extends JFrame implements WindowListener, MouseListener, MouseMotionListener { private int last_x, last_y; public RitProgram1(String s) { super(s); this.init(); public void init() { // Använd MouseListener och MouseMotionListener // addxxxlistener anger att vi ar intresserade av den aktuella typen av händelser. this.addwindowlistener(this); this.addmouselistener(this); this.addmousemotionlistener(this); this.setsize(300, 300); // En metod beskriven i MouseListener. // Anropas då vid tryck på musknapp. public void mousepressed(mouseevent e) { last_x = e.getx(); last_y = e.gety(); previous next 69 previous next 70 // Metoder deklarerade i MouseListener måste implementeras // även om vi inte gör något i dem public void mousereleased(mouseevent e) { public void mouseclicked(mouseevent e) { public void mouseentered(mouseevent e) { public void mouseexited(mouseevent e) { // och samma sak för metoder från MouseMotionListener. public void mousemoved(mouseevent e) { // En metod beskriven i MouseMotionListener. // Anropas då musen rörs med knapp nertryckt. public void mousedragged(mouseevent e) { Graphics g = this.getgraphics(); int x = e.getx(), y = e.gety(); g.drawline(last_x, last_y, x, y); last_x = x; last_y = y; public void windowopened(windowevent e) { public void windowclosing(windowevent e) { System.exit(0); 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) { public static void main(string args []) { RitProgram1 ritprog = new RitProgram1("Enkelt ritprogram"); ritprog.setvisible(true); previous next 71 previous next 72
13 Exempel: RitProgram2 package Prog2; import javax.swing.*; import java.awt.event.*; class MinRityta extends JComponent { protected int last_x, last_y; public MinRityta() { super(); this.init(); public void init() { this.addmouselistener(new MouseAdapter () { public void mousepressed(mouseevent e) { last_x = e.getx(); last_y = e.gety(); ); this.addmousemotionlistener(new MouseMotionAdapter() { public void mousedragged(mouseevent e) { Graphics g = getgraphics(); int x = e.getx(), y = e.gety(); g.drawline(last_x, last_y, x, y); last_x = x; last_y = y; ); previous next 73 previous next 74 public class RitProgram2 { public static void main(string args []) { JFrame ritprog = new JFrame("Ritprogram 2"); ritprog.getcontentpane().add(new MinRityta()); Exempel: RitProgram3 (dubbelbuffring) package Prog3; import javax.swing.*; import java.awt.event.*; kursivt vidare till oh 80 ritprog.addwindowlistener(new WindowAdapter () { public void windowclosing(windowevent e) { System.exit(0); ); ritprog.setsize(300, 300); ritprog.setvisible(true); class MinRityta extends JComponent { Image image = null; Graphics img = null; protected int last_x, last_y; public MinRityta() { super(); this.init(); previous next 75 previous next 76 protected Graphics getimgraphics() { if(image == null) { Dimension dim = getsize(); image = createimage(dim.width, dim.height); img = image.getgraphics(); return img; public void paintcomponent(graphics g) { super.paintcomponent(g); if(!(image == null)) g.drawimage(image, 0, 0, this); previous next 77 public void init() { this.addmouselistener(new MouseAdapter () { public void mousepressed(mouseevent e) { last_x = e.getx(); last_y = e.gety(); ); this.addmousemotionlistener(new MouseMotionAdapter() { public void mousedragged(mouseevent e) { Graphics g = getimgraphics(); int x = e.getx(), y = e.gety(); g.drawline(last_x, last_y, x, y); repaint(); last_x = x; last_y = y; ); previous next 78
14 public class RitProgram3 { public static void main(string args []) { JFrame ritprog = new JFrame("Ritprogram 3"); ritprog.getcontentpane().add(new MinRityta()); ritprog.addwindowlistener(new WindowAdapter () { public void windowclosing(windowevent e) { System.exit(0); ); ritprog.setsize(300, 300); ritprog.setvisible(true); (simpelt) Javaexempel med knappar, inmatningsfält och textfält package test; import java.awt.event.*; import javax.swing.*; public class Test1 { public static void main(string[] args) { final JTextField textf1; final JTextArea text1; JButton b; JFrame f = new JFrame("Test1a"); previous next 79 previous next Container c = f.getcontentpane(); textf1 = new JTextField(); c.add(textf1, BorderLayout.NORTH); text1 = new JTextArea(); c.add(text1, BorderLayout.CENTER); b = new JButton("Flytta"); c.add(b, BorderLayout.SOUTH); b.addactionlistener(new ActionListener() { public void actionperformed(actionevent e){ text1.append(textf1.gettext()); ; ); f.setsize(200, 300); f.setlocation(100, 100); f.setvisible(true); Större Javaexempel med MVC och widgets RitProgramWidthWidgets.java i separat fil previous next 81 previous next 82 Exempel från Advanced Java 2 Platform Vi tittar på MVC-exemplet i utdraget ur Advanced Java 2 Platform How To Program av Deitel, Deitel och Santry, som finns i DOA-kursbunten Här konstrueraras en enkel MVC-applikation med bankkonton som visualiseras av olika typer av vyer Swing-exempel på nätet Swing-exempel på nätet Vi tittar på exempel på följande websidor nts/example-1dot4/index.html previous next 83 previous next 84
15 Referenser, ett axplock [1] A Brief History of Human Computer Interaction Technology, Brad A. Myers [2] The core of Information Technology, Andy Fischer & Kevin Lee [3] Strategic Directions in Human-Computer Interaction, BRAD MYERS, JIM HOLLAN, ISABEL CRUZ ET AL [4] [5] [6] [7] [8] [9] User Interface Software Tools, Brad A Meyers, ACM Transaction on Computer Interaction, Vol 2, No 1, March 1995, Pages , D= &CFTOKEN= Titta gärna på Speciellt Digital Library (i menyn på föregående sida) Och sök efter artiklar on-line (för att läsa dom så måste du dock sitta på KTH) previous next 85 Länkar Java Speciellt Se också OH s 83 VisualWorks JBuilder respektive Borlands C++ Eclipse previous next 86
DOA GUI-del 1. Java och enkla grafiska gränssnitt. Kodexempel. Steg för steg 1. Skapa fönster. 1. Skapa fönster. 2. Skapa knapp
DOA GUI-del 1 Grafik och Interaktionsprogrammering Skapa fönster, rita och ta hand om inmatning i Java Java och enkla grafiska gränssnitt Då man konstruerar enkla grafiska gränssnitt kan man med fördel
Fönstersystem. Objektorientering och händelsebaserad programmering. Applikation. Interaktionstoolkit. Händelsehanterare och grafiktoolkit
Objektorientering och händelsebaserad programmering Gustav Taxén gustavt@nada.kth.se Fönstersystem Applikation Interaktionstoolkit Händelsehanterare och grafiktoolkit Operativsystem Hårdvara 1 Frameworks
Vad är ett Framework? 2203$ ) UHOlVQLQJ. Hollywood. Frameworks (FW) Frameworks. Konstruktion av fönster, gränssnitt och användning av grafik i Java
2203$ ) UHOlVQLQJ Frameworks. Konstruktion av fönster, gränssnitt och användning av grafik i Java Innehåll, kort om: Frameworks Grafik med främst AWT Grafiska interaktiva applikationer Händelsehantering
GUI-programmering. Gustav Taxén Martin Berglund DH2640 Grafik och Interaktionsprogrammering VT 2008
GUI-programmering Gustav Taxén gustavt@csc.kth.se Martin Berglund mabe02@kth.se DH2640 Grafik och Interaktionsprogrammering VT 2008 WIMP Window Icon Menu Pointing device Modernt Gränssnitt Vad ingår i
Frames, menyer och GUI-program
15 Frames, menyer och GUI-program Frames En frame-klass Om konstruktorer - igen Funktionella fönster Menyer Popupmenyer GUI-applikationer Dialogrutor Printerutskrift Kap 15: Sid 2 Frames Redan i kapitel
Utmatningstekniker Vektoriserade (linjeritande) skärmar
previous 2D-grafik. Något om FrameWorks. Java en kort introduktion och något exempel med AWT, något om Swing och Graphics2D, samt OpenGL ett litet exempel Föreläsning 2 Innehåll Något om utmatning hårdvara,
ITK:P1 Föreläsning 4. Grafiska gränssnitt i Java. AWT-komponenter
ITK:P1 Föreläsning 4 Grafiska gränssnitt och händelsehantering 1 DSV Peter Mozelius Grafiska gränssnitt i Java Efterfrågan på program med grafiskt gränssnitt har ökat avsevärt de senaste åren I Java finns
Dagens program. Programmeringsteknik och Matlab. Vad är arv? Vi ärver från GregorianCalendar. Kan vi bygga vidare på existerande klasser?
Programmeringsteknik och Matlab Övning 6 Dagens program Övningsgrupp 2 (Sal Q22/E32) Johannes Hjorth hjorth@nada.kth.se Rum 4538 på plan 5 i D-huset 08-790 69 02 Kurshemsida: http://www.nada.kth.se/kurser/kth/2d1312
Händelsestyrda program
JavaD- 1 Program- eller händelsestyrd exekvering Händelsestyrda program JavaD- 2 Programstyrd exekvering I ett traditionellt program bestämmer programmet när det är dags att läsa indata, programmets exekvering
TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 7 Erik Nilsson, Institutionen för Datavetenskap, LiU
TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 7 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Grafiskt användargränssnitt, Swing Layout och komponenter Göra
Föreläsnings 11 - GUI, Händelsestyrda program, MVC
Föreläsnings 11 - GUI, Händelsestyrda program, MVC Josef Svenningsson Tisdag 20/11 Boken Denna föreläsning går igenom följande sektioner i boken: 10.1 och 10.2 11.1 Notera att kapitel 11 inte finns i boken
Objektorientering i allmänhet
Objektorientering i allmänhet Objektorientering och händelsebaserad programmering Gustav Taxén gustavt@nada.kth.se Ett objekt är en "låda" da" där man samlar Data Metoder som (oftast) manipulerar denna
Två designmönster, MVC och Observer/Observable. Objektorienterad programvaruutveckling GU (DIT011)
Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Innehåll Föreläsning 8 Två designmönster, MVC och Observer/Observable. Designrekommendation
Föreläsning 15 (16) Historik (java.awt) Historik (javax.swing) Introduktion till Swing
Föreläsning 15 (16) Introduktion till Swing Historik (java.awt) JDK 1.0 AWT (Abstract Window Toolkit) Paket för gränssnittsprogrammering Har en del nackdelar: Använder s.k. native code Stödjer endast komponenter
Objektorienterad programmering med Java Swing: Händelser, lyssnare och applets
GUI (forts) Objektorienterad programmering med Java Swing: Händelser, lyssnare och applets Sven-Olof Nyström Uppsala Universitet 18 mars 2005 Skansholm: Kapitel 6 Användaren kan kommunicera med programmet
Objektorientering och händelsebaserad programmering. Gustav Taxén
Objektorientering och händelsebaserad programmering Gustav Taxén gustavt@csc.kth.se 2D1640 Grafik och Interaktionsprogrammering VT 2007 Racingspel Vi skagöraettenkeltracingspel med olika sorters fordon.
Du ska nu skapa ett litet program som skriver ut Hello World.
Tidigare har vi gjort all programmering av ActionScript 3.0 i tidslinjen i Flash. Från och med nu kommer vi dock att ha minst två olika filer för kommande övningar, minst en AS-fil och en FLA-fil. AS Denna
Tentamen i Objektorienterad programmering
CHALMERS TEKNISKA HÖGSKOLA Datavetenskap TDA547 Tentamen i Objektorienterad programmering Lördagen 12 mars 2011, 8.30 12.30. Jourhavande lärare: Björn von Sydow, tel 0762/981014. Inga hjälpmedel. Lösningar
Lösningar till tentamen i EDAF25
Lösningar till tentamen i EDAF25 1 juni 2017 Lösning 1 Se figur 1. Figure 1: Tillståndsdiagram espressomaskin Lösning 2 (a) Kompositmönstret (b) Se figur 2 (c) Se figur 3 : Square : Drawing : Group : Circle
Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag 2001 - maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h
Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag 2001 - maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h Antalet uppgifter : 2 (20p + 20p = 40 p) ) Lärare, jourhavande lärare :
Frameworks. GUI till tusen. GUI till tusen. Sampling architectures. Inmatningstyper
Frameworks Koda med klassbibliotek Koda med framework GUI-programmering Min kod Framework Cristian Bogdan cristi@kth.se Kod i klassbibliotek Min kod, brukar kallas för callbacks. DH2640 Grafik och Interaktionsprogrammering
Programmeringsteknik II - HT18. Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt
Programmeringsteknik II - HT18 Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt 18-09-28 1 Förra gången: Arv och klasshierarkier Vi såg hur
Labbinstruktioner för Java/Swing
Labbinstruktioner för Java/Swing Grafik- och interaktionsprogrammering 2008 Martin Berglund Allmänt Dessa instruktioner är på intet sett den enda möjliga lösningen på labben, tvärtom finns
2I1049 Föreläsning 8. Grafiska gränssnitt i Java. AWT-komponenter. Grafiska gränssnitt, Java interface och händelsehantering
2I1049 Föreläsning 8 Grafiska gränssnitt, Java interface och händelsehantering 1 KTH-MI Peter Mozelius Grafiska gränssnitt i Java Efterfrågan på program med grafiskt gränssnitt har ökat avsevärt de senaste
Dagens program. Objektorienterad modellering och diskreta strukturer / design. Model/View/Control-implementering. Model/View/Control-arkitektur
Dagens program Objektorienterad modellering och diskreta strukturer / design Fler mönster och Paketdesign Lennart Andersson Model View Control Observer Paketdesign Namngivning Reviderad 2011 09 12 2011
Objektorienterad Programkonstruktion. Föreläsning 3 7 nov 2016
Objektorienterad Programkonstruktion Föreläsning 3 7 nov 2016 Klass/instans Med hjälp av nyckelordet static kan vi bestämma att en metod eller ett fält ska tillhöra själva klassen i stället för en specifik
Denna vecka. Idag. Grafiskt användarsnitt. Vi kommer att se
1 F18-20-2006 Denna vecka Måndag: Ett komplext problem Tisdag: Lektion. Kväll: Essäfrågan distribueras via webben. Dead-line onsdag 17 maj, kl 12.00. Inlämning elektroniskt och på papper. Onsdag: Grafik
Projekt 2 XL. Observer-mönstret
Projekt 2 XL Objektorienterad modellering och diskreta strukturer Inför nästa projekt Lennart Andersson Reviderad 2011 10 24 2011 OMD 2011 F15-1 Schema designmöten OMD 2011 F15-2 Observer-mönstret 2 och
Objektorienterad Programkonstruktion. Föreläsning 3 9 nov 2015
Objektorienterad Programkonstruktion Föreläsning 3 9 nov 2015 Kursnämnd Namn kommer... UML: Klassdiagram UML: Relationer Ärver från superklass Implementerar gränssnitt Dubbelriktad eller oriktad relation
Detta dokument är ett exempel, cirka andra hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling
Detta dokument är ett exempel, cirka andra hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling Fulltentamen vitsord: 3=28p, 4=38p, 5= 48p, max 60p. Max 30p i denna halvtentamen Hjälpmedel:
Laboration 3 GUI-programmering
Laboration 3 GUI-programmering Syfte Erbjuder studenterna en möjlighet att lära sig grunderna i gränssnittsprogrammering i Java. Genomförande Genomförs individuellt eller i grupp om 2 personer. Uppskattad
Programmera en NXT Robot
KUNGLIGA TEKNISKA HÖGSKOLAN Programmera en NXT Robot Med hjälp utav NXC Peyman Torabi 2012-09-03 E-post: peymant@kth.se Introduktionskurs i datateknik (II1310) Sammanfattning Uppgiften var att analysera
Föreläsning 14: Grafik & mera händelsehantering
TDA 545: Objektorienterad programmering Föreläsning 14: Grafik & mera händelsehantering Magnus Myréen Chalmers, läsperiod 1, 2015-2016 Idag Idag: grafik läs kap 17 Viktigt i denna föreläsning: att rita
DAT043 - Föreläsning 7
DAT043 - Föreläsning 7 Model-View-Controller, mer om klasser och interface (arv, ) 2017-02-06 Designmönstret Observer avläser Observer Observable meddelar Observer avläser En eller flera objekt registrerar
Handledning för digitala verktyg Talsyntes och rättstavningsprogram. Vital, StavaRex och SpellRight
Handledning för digitala verktyg Talsyntes och rättstavningsprogram Vital, StavaRex och SpellRight Elevens namn:.. Skola: Datum:.. Varför behövs en handledning? Denna handledning är tänkt att användas
Introduktion. Den objektorienterade modellen Grundläggande begrepp Klass Klassen som abstraktion
Introduktion Den objektorienterade modellen Grundläggande begrepp en som abstraktion er -objekt-attribut - metoder er Vad är ett objekt? Relationer mellan objekt/klasser Arv Arv (- är en) Multipelt arv
Observer Pattern och MVC. Objekt-orienterad programmering och design Alex Gerdes, 2016
Observer Pattern och MVC Objekt-orienterad programmering och design Alex Gerdes, 2016 Model View Controller Model View Controller (MVC) är ett design pattern (architectural pattern) som är väldigt vanligt
Grafiska användargränsnitt i Java. Föreläsning 7 Innehåll. Använda klasspaketet Swing. Klasspaket i Java. Grafiska användargränsnitt i Java
Föreläsning 7 Innehåll Grafiska användargränsnitt i Java Grafiska användargränsnitt i Java Komponenter (fönster, knappar, ) Layout Händelsehantering (Hur man får någonting att hända när användaren t.ex.
Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser
Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Föreläsning 5 Innehåll Subklasser och arv Inledning till grafik (JFrame och JPanel).
Observer Pattern och MVC. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018
Observer Pattern och MVC Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018 Model View Controller Model View Controller (MVC) är ett design pattern (architectural pattern) som är
Uppföljning av webbtillgänglighet
Information Uppföljning av webbtillgänglighet Samtliga följande frågor finns i webbriktlinjers självtest, d v s http://webbriktlinjer.se/testa-din-webbplats/ Nivå A AAA Rubrik: Undvik CAPTCHA Fråga: Finns
TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3
TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3 Laboration 3 Visualisering (och implementering) av sortering Exempel på grafik (med Swing-paketet) Frågor 1 Laboration 3 Visualisering
PROG2 Tenta 2013-06-07 Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2
DSV SU/KTH sid 1 (6) PROG2 VT13 PROG2 Tenta 2013-06-07 Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2 Tentan består av tre uppgifter. Max poäng är 38. För betyget E (godkänd) krävs minst
Malmö högskola 2007/2008 Teknik och samhälle
Laboration Gui Avsikten med denna laboration är att du ska träna på att bygga grafiska användargränssnitt. Spara dina resultat i paketet laborationgui. Längst bak i laborationen finns fullständiga lösningar
Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag 2001 - aug - 23 Tentamen i Objektorientering och Java Skrivtid 5 h
Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag 2001 - aug - 23 Tentamen i Objektorientering och Java Skrivtid 5 h Antalet uppgifter : 3 (15p + 20p + 5p = 40 p) Lärare, jourhavande lärare
Dagens program. Objektorienterad modellering och diskreta strukturer / design. Model/View/Control-implementering. Model/View/Control-arkitektur
Dagens program Objektorienterad modellering och diskreta strukturer / design Fler mönster och Paketdesign Lennart Andersson Model View Control Observer Paketdesign Namngivning Reviderad 2012 09 17 2012
TIMREDOVISNINGSSYSTEM
TIMREDOVISNINGSSYSTEM Företagsekonomiska Institutionen Inledning med begreppsförklaring Huvudmeny Budgethantering Planering Rapportering Signering Utskrifter/Rapporter Byt lösenord Logga ut 1 Inledning
Fortsättningskurs i programmering F 5. GUI händelsehantering - undantagshantering Hugo Quisbert 20130205 AWT. Paket för hantering av grafik
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
Properties. Användbara metoder som kan anropas i propertychanged:
Properties Ett objekt kan ha vissa egenskaper (som beskrivs med instansvariabler). En enkel egenskap X avläses och sätts med metoderna getx() och setx(värde). En indexerad egenskap (från t.ex. en array)
MVC-mönstret. model-view-control i Swing
MVC-mönstret model-view-control i Swing MVC Tanken bakom MVC (model view control) är att separera uppgifter i ett program från varandra. Model - Den data som behandlas View - Hur användargränssnittet ser
Vi skall skriva uppsats
Vi skall skriva uppsats E n vacker dag får du höra att du skall skriva uppsats. I den här texten får du veta vad en uppsats är, vad den skall innehålla och hur den bör se ut. En uppsats är en text som
Laboration 4: Game of Life
Laboration 4: Game of Life Programmerade system I1 Bakgrund: I denna laboration ska vi ägna oss åt Game of Life, vilket är en mycket enkel modell av en population organismer som kan leva, dö och fortplanta
DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin
DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin TENTAMEN I IKB007 INTERNETPROGRAMMERING MED JAVA för SY2 1999-03-17, kl 14.00-18.00 Hjälpmedel: En lärobok i Java programmering Återlämningstillfälle:
Gissa det hemliga talet
Laborationsanvisning Gissa det hemliga talet Steg 1, laborationsuppgift 1 Författare: Mats Loock Kurs: ASP.NET MVC Kurskod:1DV409 Innehåll Problem 4 Modell 4 Den uppräkningsbara typen Outcome 5 Strukturen
Modelsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545
Data och Informationsteknik / Computer Science and Engineering Chalmers University of Technology and University of Gothenburg Magnus Myréen Modelsvar för Tentamen för Objektorienterad programvaruutveckling,
LiTHehack? Här? lithehack se koma Tisdagar och torsdagar
0 Java och Swing LiTHehack? Här? @ kontakt /. lithehack se. lithehack se koma -, 17 19 Tisdagar och torsdagar Idag grafik menyer kortkomandon pop up-menyer submenyer Skansholm Java direkt upplaga 6 eller
Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen 20150613, kl. 9.00-12.00
Skolan för datavetenskap och kommunikation Objektorienterad Programkonstruktion, DD1346 FACIT Tentamen 20150613, kl. 9.00-12.00 Tillåtna hjälpmedel: Papper, penna och radergummi. Notera: Frågorna i del
Tentamen Objekt-orienterad programmering med Java, 1DL100 Sommarkurs och distanskurs
Tentamen 2006-0823 Objekt-orienterad programmering med Java, 1DL100 Sommarkurs och distanskurs Uppsala Universitet Instutitionen för informationsteknologi Avdelningen för datalogi Kursansvarig: Sven-Olof
Lösningar till tentamen i EDAF25
Lösningar till tentamen i EDAF25 21 aug 2017 Lösning 1 Javaklasser (många varianter finns naturligtvis): class Client { private Invoker invoker; public void newcommand(string cmdtext) { Command cmd; if
Föreläsning 3: Händelsestyrda program och användargränssnitt
(2 september 2015 F3.1 ) Föreläsning 3: Händelsestyrda program och användargränssnitt Idag Från sekventiella till händelsestyrda program Lyssnare Kontroller Layout för ordning av kontroller (2 september
Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.
Programmering med Java Programmering med Java Programspråket Java Källkodsexempel Källkod Java API-exempel In- och utmatning Grunderna Ann Pan panda@nada.kth.se Rum 1445, plan 4 på Nada 08-7909690 Game.java
Distribuerade system. CORBA eller RMI
Distribuerade system Java XII - 1 CORBA eller RMI Java XII - 2 Några motiv till distribuerade system kan vara att: Utjämna belastningen mellan olika maskiner i ett nätverk Utnyttja kapaciteten i en större
Klasser och objekt i C#
Klasser och objekt i C# Från klassdiagram till C#-klass till objekt initierat av en konstruktor. Upphovsrätt för detta verk Detta verk är framtaget i anslutning till kursen Inledande programmering med
GUI /ll tusen. GUI /ll tusen. Java/Swing. Top Level Containers. General Purpose Containers. GrIP-vt2010-GUI-programmering Cristian Bogdan
GUI programmering Cristian Bogdan cristi@kth.se GUI /ll tusen Win32 API (C) MFC (C++) VCL/CLX (C++/Delphi) wxwidgets (C++) Qt (C++/Java) GTK+ (C).NET Framework (VB/C++/C#) Java AWT/Swing/SWT (Java) osv
Manual HSB Webb brf 2004 03 23
AVDELNINGAR Det finns flera olika typer av avdelningar. Standard, Nod HSB, Nod Förening, Nod Brf, Nod Styrelsewebb, Struktur och Område/projekt. Standard är den mall som används för att presentera artiklar.
Lektion Händelsehanterare
Lektion Händelsehanterare Händelsehanterare kallas även lyssnare. En lyssnare har som uppgift att ta hand om olika händelser som kan inträffa. För att lyssnaren skall reagera på händelser måste den registreras
Manual fö r kursspecifika ansö kningsförmula r Fölkhö gsköla.nu
Manual fö r kursspecifika ansö kningsförmula r Fölkhö gsköla.nu 2014-01-23 Bakgrund Folkhögskola.nu har utvecklat en funktion som gör det möjligt för skoladministratörer att skapa kursspecifika digitala
Swing. MER Java Foundation Classes (JFC) Hur lära sig? Vad är farorna. LayoutManagers. Exempel på några av komponenterna
MER Java Foundation Classes (JFC) Swing Swing Många klasser Vettigt att lära sig dem utantill - Tror inte det -... men det kan vara bra att ha en liten överblick över vad som finns - Idag (och med fortsättning
GUI-programmering. Gustav Taxén
GUI-programmering Gustav Taxén gustavt@csc.kth.se 2D1640 Grafik och Interaktionsprogrammering VT 2007 Racingspel Vi utökar vårt racingspel lite grann. Vi behöver en bättre modell för hur bilarna ska flyttas.
Lathund för överföring av rapporter och ljudfiler
Lathund för överföring av rapporter och ljudfiler För handledare I den här lathunden finns detaljerade instruktioner om hur du gör för att ladda ner rapporter och ljudfiler från dina studenter. Först kommer
För att hitta filen gå till mappen NetBeansProjects. Välj undermappen med rätt projekt, och sedan undermapp dist. Där ligger.jar-filen.
Java utan netbeans Du har gjort ett program i netbeans Hur exportera det så att andra kan köra det utan att använda netbeans? Välj projektet som main project Högerklicka på det och välj Clean and Build
TENTAMEN: Design och konstruktion av grafiska gränssnitt DAT215
TENTAMEN: Design och konstruktion av grafiska gränssnitt DAT215 DAG: 8 mars, 2010 TID: 8.30 12.30 SAL: V-huset Ansvarig: Olof Torgersson, tel. 772 54 06. Institutionen för data- och informationsteknik.
Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)
Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010) Tid: Onsdagen 15 december 2004, 8:30 till 13:30 Plats: M Ansvarig lärare: Katarina Blom, tel 772 10 60. Läraren besöker tentamen kl
Lab5 för prgmedcl04 Grafik
Lab5 för prgmedcl04 Grafik Viktigt läs detta först:den här labblydelsen är ganska lång, detta betyder inte att labben tar lång tid.en hel del av lydelsen är anvisning om hur man går tillväga för att kunna
Administration Excelimport
Administration Excelimport För att importera medlemmar till registret så laddar man först ner mallen för importfil, fyller i uppgifterna och laddar sedan upp filen genom att klicka på + Importera fil.
Swing. MER Java Foundation Classes (JFC) Vad är farorna. Hur lära sig? LayoutManagers. Exempel på några av komponenterna
MER Java Foundation Classes (JFC) Swing Swing Många klasser" Vettigt att lära sig dem utantill" - Tror inte det" -... men det kan vara bra att ha en liten överblick över vad som finns" - Idag (och med
Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl 9.00 14.
Tentamen 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl 9.00 14.00, sal E33 Tentan har en teoridel och en problemdel. På teoridelen är inga hjälpmedel
Tentamen i EDAF25. 1 juni Skrivtid: Skriv inte med färgpenna enda tillåtna färg är svart/blyerts.
Tentamen i EDAF5 juni 07 Skrivtid: 4-9 Skriv bara på ena sidan av pappret tentorna kommer att scannas in, och endast framsidorna rättas. Skriv inte med färgpenna enda tillåtna färg är svart/blyerts. Skriv
Individuellt Mjukvaruutvecklingsprojekt
Individuellt Mjukvaruutvecklingsprojekt RPG-spel med JavaScript Författare Robin Bertram Datum 2013 06 10 1 Abstrakt Den här rapporten är en post mortem -rapport som handlar om utvecklandet av ett RPG-spel
ELEV- HANDLEDNING (Ansökan via webben) www.orebro.se/gymnasieantagningen
ELEV- HANDLEDNING (Ansökan via webben) www.orebro.se/gymnasieantagningen Gymnasieantagningen i Örebro län På Gymnasieantagningens hemsida www.orebro.se/gymnasieantagningen hittar du information om vad
Boll-lek om normer. Nyckelord: likabehandling, hbt, normer/stereotyper, skolmiljö. Innehåll
1 Boll-lek om normer Nyckelord: likabehandling, hbt, normer/stereotyper, skolmiljö Innehåll Materialet bygger på en övning där eleverna, genom en lek med bollar, får utmana sin förmåga att kommunicera
Objektorienterad Programkonstruktion. Föreläsning 6 23 nov 2015
Objektorienterad Programkonstruktion Föreläsning 6 23 nov 2015 Designmönster Färdiga "recept" för att lösa (del-)problem i struktureringen av ens program Mönster kan beskriva små komponenter eller stora
Logga in. Gå in på: www.t-d.se. Klicka på Logga in. Klicka på den region, kommun eller organisation där din verksamhet finns
Registrera I TD Logga in Gå in på: www.t-d.se Klicka på Logga in. Klicka på den region, kommun eller organisation där din verksamhet finns inventerad och registrerad. Skriv in ditt användarnamn och lösenord.
Objektorienterad programmering i Java
Objektorienterad programmering i Java Föreläsning 4 Täcker i stort sett kapitel 6 i kursboken Java Software Solutions 1 Läsanvisningar Den här föreläsningen är uppbyggd som en fortsättning av exemplet
Kort om klasser och objekt En introduktion till GUI-programmering i Java
Kort om klasser och objekt En introduktion till GUI-programmering i Java Klasser En klass är en mall för hur man ska beskriva på något. Antag att vi har en klass, Bil. Den klassen innehåller en lista på
Uppdragsbeskrivning. Digital Skyltning. Version 1.0 Mats Persson. Distributionslista. Namn Åtgärd Info.
Version 1.0 Distributionslista Befattning Bolag/en het Student KaU Anton Odén Student KaU Olle Pejstrup Konsult/handledare Sogeti Konsultchef Sogeti Åsa Maspers Projektledare Sogeti vakant Namn Åtgärd
Manual för BPSD registret. Version 6 / 2013 06 17
Manual för BPSD registret Version 6 / 2013 06 17 Logga in Logga in till registret överst till höger på hemsidan. (Observera att du hittar testdatabasen längre ner på hemsidan) Fyll i ditt personliga användarnamn
Objektorienterad programmering i Java. Föreläsning 5 Kort om Java-Applets
Objektorienterad programmering i Java Föreläsning 5 Kort om Java-Applets 1 Läsanvisningar Den här föreläsningen syftar till att ge en bild av vad en Java-Applet är och är ganska fristående från föregående
Projektkursen Designmönster. Sammanfattning och slutsatser. Till stora delar lär vi genom att härma och efterlikna
2D1362: 2003 Projektkursen 2003 Innehåll Återanvändning Problem Bakgrund Lösning Exempel Sammanfattning och slutsatser previous next Återanvändning I alla tider har man försökt att återanvända och applicera
Lösningar för tenta 3 DAT043,
Lösningar för tenta 3 DAT043, 2018-08-22. Uppgift 1 class Person{ public String förnamn; public String efternamn; public int ålder; private double längd; private double vikt; public Person(String förnamn,
Föreläsning 10. ADT:er och datastrukturer
Föreläsning 10 ADT:er och datastrukturer ADT:er och datastrukturer Dessa två begrepp är kopplade till varandra men de står för olika saker. En ADT (abstrakt datatyp) är just abstrakt och är inte kopplad
Laboration 15 Grafiskt användargränssnitt
Laboration 15 Grafiskt användargränssnitt Avsikten med denna laboration är att du ska träna på att skriva program som använder grafiskt användargränssnitt, dvs program som använder grafiska komponenter
LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p
UMEÅ UNIVERSITET Datavetenskap 010530 LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p Betygsgränser 3 21,5-27 4 27,5-33,5 5 34-43 Uppgift 1. (4p) Hitta de fel som finns i nedanstående klass (det
Repetitionsföreläsning 2: Quiz & problemlösning med swing Inget nytt material.
TDA 545: Objektorienterad programmering Repetitionsföreläsning 2: Quiz & problemlösning med swing Inget nytt material. Magnus Myréen Chalmers, läsperiod 1, 2015-2016 Idag En quiz! tinyurl.com/tda545quiz
TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3
TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3 Laboration 3 Visualisering (och implementering) av sortering Exempel på grafik (med Swing-paketet) Frågor 1 Laboration 3 Visualisering
Manual för Min sida 1/9. 2011-05-26 rev 2011-09-02
1/9 2011-05-26 rev 2011-09-02 Manual för Min sida Introduktion... 2 Hur länge finns Min sida kvar?... 2 Vad kan jag publicera på Min sida?... 2 Inloggning... 2 Redigera personliga uppgifter... 3 Redigera
Två konstiga klockor
strävorna C Två konstiga klockor resonemang geometri Avsikt och matematikinnehåll Det som kan göra det svårt för barn att avläsa en analog klocka är att förstå att den består av två skalor som är beroende
4-3 Vinklar Namn: Inledning. Vad är en vinkel?
4-3 Vinklar Namn: Inledning I det här kapitlet skall du lära dig allt om vinklar: spetsiga, trubbiga och räta vinklar. Och inte minst hur man mäter vinklar. Att mäta vinklar och sträckor är grundläggande
Guide till Wordpress text- och bildredskap
Guide till Wordpress text- och bildredskap Det här är en kort användarguide som förklarar hur du lägger till, redigerar och tar bort sidor och texter från vår webbsajt med hjälp av verktyget Wordpress.
Arv och polymorfi. Lite terminologi; Basklass eller superklass: En klass som fungerar som bas för vårt arv. Vi skapar nya klasser utifrån den.
Arv och polymorfi Arv och polymorfi är två centrala begrepp i objektorientering. Arvsmekanismen innebär att vi kan skapa nya klasser utifrån redan existerande klasser. Man gör detta med hjälp av nyckelordet