Laboration 3 GUI-programmering

Relevanta dokument
ID1004 Laboration 3, 5-6 November 2012

Labbinstruktioner för Java/Swing

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

Objektorienterad Programkonstruktion. Föreläsning 3 7 nov 2016

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 9 Erik Nilsson, Institutionen för Datavetenskap, LiU

Laboration 1: Figurer i hierarki

Föreläsnings 11 - GUI, Händelsestyrda program, MVC

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

Programmeringsteknik II - HT18. Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt

Tentamen i Objektorienterad programmering

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016

Lösningar till Fiktiv Tentamen på kursen. 2D4135 Objektorienterad programmering, design och analys med Java vt2004. Teoridel

Föreläsning 3: Händelsestyrda program och användargränssnitt

SI-pass 4. Johan Brook och Jesper Persson. 25 september Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner.

Properties. Användbara metoder som kan anropas i propertychanged:

ITK:P1 Föreläsning 4. Grafiska gränssnitt i Java. AWT-komponenter

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

Tentamen i Objektorienterad modellering och design

Objektorienterad Programkonstruktion. Föreläsning 3 9 nov 2015

DAT043 - Föreläsning 7

Objektorienterad programmering

Att prova på en enkel Applet och att lära sig olika sätt att hämta data från tangentbordet. Du får även prova på att skapa din första riktiga klass.

Lösningsförslag. 1 Lösningsförslag. Uppgift 1

Tentamen i Objektorienterad modellering och design Helsingborg

Lösningsförslag tentamen FYTA11 Java

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 5 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Exempel på användning av arv: Geometriska figurer

Detta dokument är ett exempel, cirka andra hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling

Efterhand fick vi ett system som vi tyckte var väl anpassat. Vi renskrev kladden (nedan) och började programmera menyerna.

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 7 Erik Nilsson, Institutionen för Datavetenskap, LiU

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

Tentamen i Objektorienterad programmering

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Tentamen i EDAF25. 1 juni Skrivtid: Skriv inte med färgpenna enda tillåtna färg är svart/blyerts.

DELPROV 1 I DATAVETENSKAP

Två designmönster, MVC och Observer/Observable. Objektorienterad programvaruutveckling GU (DIT011)

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 9 Erik Nilsson, Institutionen för Datavetenskap, LiU

Objektorienterad Programmering DAT043. Föreläsning 5 29/1-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 31/ Exempel: Implementation av Schackpjäser.

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 7/ Exempel: Implementation av Schackpjäser.

TDDD78, TDDE30, 729A Grafik: Att "rita" egna komponenter

Laboration 2: Designmönster

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

Rita Egna Bilder, Timer

Laboration 4: Game of Life

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Datatyper. Programmering. Att definiera datatyper i Java. Laddade partiklar. (x,y) (Rx,Ry) hh.se/db2004

Laboration 2: Designmönster

2I1049 Föreläsning 8. Grafiska gränssnitt i Java. AWT-komponenter. Grafiska gränssnitt, Java interface och händelsehantering

TENTAMEN I DATAVETENSKAP

Tentamen. DD2385 Programutvecklingsteknik vt 2013 Onsdagen den 22 maj 2013 kl Hjälpmedel: penna, suddgummi, linjal

Design och konstruktion av grafiska gränssnitt

Tentamen i Objektorienterad programmering E

Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Tentamen i Objektorienterad programmering E

Malmö högskola 2007/2008 Teknik och samhälle

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Skriv ditt idnummer på varje blad (så att vi inte slarvar bort dem).

Objektorienterad programmering E. Telefonboken, än en gång. Gränssnitt. Telefonboken med gränssnitt specificerat, del 1.

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 18

Lycka till! TENTAMEN: Objektorienterade applikationer. Läs detta! 1 (6) Tentamen

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

UML. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

public interface Skrivbar { void skriv(); } public class Punkt implements Skrivbar { public double x; public double y;

ITK:P1 Lektion 4. Lektion 4. Lektion 4. Att implementera en spelidé i Java. DSV Peter Mozelius

Föreläsning 15 (16) Historik (java.awt) Historik (javax.swing) Introduktion till Swing

Föreläsning 8: Exempel och problemlösning

Outline. Objektorienterad Programmering (TDDC77) Åsidosättning. Signatur. Åsidosättning. Abstrakta klasser. Ahmed Rezine.

Föreläsning 12. Föreläsning 12. Rörliga figurer Klassen Timer Undantag Något om applets. Rörliga appletsfigurer Klassen Timer Undantag

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Kort om klasser och objekt En introduktion till GUI-programmering i Java

Tentamen OOP

Objektorienterad programmering med Java Swing: Händelser, lyssnare och applets

Malmö högskola 2007/2008 Teknik och samhälle

Lösningsförslag till tentamen

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

Model View Controller. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Swing. MER Java Foundation Classes (JFC) Hur lära sig? Vad är farorna. LayoutManagers. Exempel på några av komponenterna

Malmö högskola 2008/2009 CTS

Objektorienterad programmering E. Back to Basics. En annan version av printtable. Ett enkelt exempel. Föreläsning 10

Föreläsning 14: Grafik & mera händelsehantering

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Objektorienterad programmering i Java. Föreläsning 5 Kort om Java-Applets

Lösningar till tentamen i EDAF25

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

Informationsvisualisering

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 5. Laboration 4 Lådplanering Exempel på grafik, ett avancerat program Frågor

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

Transkript:

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 tidsåtgång 16-40 timmar effektiv arbetstid per gruppmedlem, beroende på förkunskaper. Informations- och bakgrundsmaterial Föreläsnings- och övningsanteckningar, ev. annat utdelat material. The Swing Tutorial, http://java.sun.com/docs/books/tutorial/uiswing/ 2D Graphics Tutorial, http://java.sun.com/docs/books/tutorial/2d/ http://www.kidpad.org/ för inspiration. Google! Uppgift Konstruera en riteditor. Redovisning Redovisas per e-post till gustavt@csc.kth.se senast fredag 13 mars kl. 23.59. Följande ska finnas med i redovisningen: 1. Studentens(ernas) namn och personnummer. 2. Ett ZIP-arkiv med källkod, en färdigkompilerad version av programmet, samt instruktioner för hur man startar det. Förslag på uppdelning (om ni jobbar i par) Designa verktyget tillsammans genom att rita en skiss. Diskutera vad som skulle vara ett användarvänligt gränssnitt. Genomför uppgifterna sida vid sida och hjälp varandra! Alternativt skriv några av klasserna var (men var noga med att bestämma vilket interface era klasser ska ha först så att det blir enkelt att integrera ihop dem).

Detaljbeskrivning I konventionella riteditorer finns oftast en palett med olika verktyg. För att rita, selektera eller sudda väljs ett verktyg ur paletten. Därefter befinner sig editorn i en speciell mod för en kortare eller längre tid. Om man t.ex. väljer ellips i paletten, kanske man ritar ellipsen genom att definiera en rektangel på ritytan. Därefter återgår editorn till selektionsmod. Du ska nu konstruera en lite annorlunda riteditor i vilken man kan placera minst två olika sorters ritverktyg på ritytan (t.ex. pensel, raderverktyg, kopieringsverktyg, ellipsritare, splineritare, etc.). Det skall vara möjligt att ha flera "instanser" av en viss typ av verktyg samtidigt på ritytan. Om ett av verktygen är en penna, t.ex., ska man kunna ha tre olika sådana pennor "liggande på pappret". Varje instans skall kunna ställas in på sitt eget sätt (färg, tjocklek linjen, osv.). För att rita ska man kunna ta tag i pennan med musen och rita. När man släpper pennan ska den ligga kvar på sin plats tills man tar upp den igen. Det skall också vara möjligt att öppna flera fönster mot samma rityta. Om ett objekt läggs till, tas bort eller på annat sätt manipuleras så skall det efter genomförd "manipulation" avspeglas i alla fönster. Du får själv välja om verktygsuppsättningen ska vara densamma i alla fönster eller om det ska gå att ha olika uppsättningar i olika fönster. Hur man skapar nya verktygsinstanser och hur man ritar med (och ställer in) verktygen får du själv fundera ut, men försök att göra mekanismerna så direktmanipulativa som möjligt. Om du känner dig osäker på hur du ska bygga ritprogrammet kan du använda dig av tipsen nedan. Men tänk på att du inte måste göra som det föreslås tänk gärna ut bättre alternativ! Tips Här är en skiss på hur ritprogrammet skulle kunna se ut: Vi har ett huvudfönster ( Application ) som visar två vyer av ritytan ( View 1 och View 2 ). I den första vyn i skissen ritar användaren med en penna och strecket dyker upp i den andra vyn samtidigt. Det finns en verktygsuppsättning i varje vy, vilket gör att vyerna måste ha kontroller för att lägga till nya (och kanske ta bort?) verktyg, samt att ändra egenskaper för

de verktyg som finns på ritytan. (Visas inte i skissen.) Application måste också ha en kontroll för att lägga till nya vyer, förslagsvis i form av en meny. Ett sätt att implementera skissen är att utgå från en klass för huvudfönstret, Application i UML-diagrammet nedan. Vi har en View-klass som visualiserar ritytan, med verktygen ovanpå. Application har en lista med View-instanser, som vardera är ett JInternalFrame-fönster. Drawing är en representation av den bild som finns på ritytan. Det finns många sätt att representera en bild, men i det här fallet kanske det är enklast att lagra den som en uppsättning listor med Java2D-primitiver (Line2D, Rectangle2D, osv.). Modellens gränssnitt mot View-klassen skulle då kunna vara något i stil med public class Drawing { void fetchdrawing(graphics2d graphics) { fetchdrawing() ritar alltså in alla primitiverna i den givna Graphics2D-instansen. Ritverktyg representeras av basklassen Tool. Varje View har en lista med Tool-instanser, och varje Tool-instans har en draw()-metod som View kan anropa för att verktyget ska ritas ut. Om nu View-klassen också lyssnar på t.ex. mus-events (genom att implementera MouseListener; visas inte i UML-diagrammet ovan) kan dessa events också skickas vidare till den Tool-instans som är aktiv för närvarande. Varje enskild typ av verktyg implementeras i en subklass till Tool och varje verktyg uppdaterar Drawing när de används.

Hur man kan representera ett ritverktyg som GIF-bild Här följer ett exempel som visar hur man kan få en given färg i en GIF-bild att bli genomskinlig så att det går att använda GIF-bilden som en ikon för ett ritverktyg. Vi behöver en hjälpklass, Transparency, som har en metod makecolortransparent(). Denna metod tar en bild som indata, gör den valda färgen genomskinlig, och returnerar resultatet. import java.awt.*; import java.awt.geom.*; import java.awt.image.*; import javax.swing.*; public class Transparency { public static Image makecolortransparent(image im, final Color color) { ImageFilter filter = new RGBImageFilter() { public int markerrgb = color.getrgb() 0xFF000000; public final int filterrgb(int x, int y, int rgb) { if ( ( rgb 0xFF000000 ) == markerrgb ) { return 0x00FFFFFF & rgb; else { return rgb; ; ImageProducer ip = new FilteredImageSource(im.getSource(), filter); return Toolkit.getDefaultToolkit().createImage(ip); public class Pen public Tool implements ImageObserver { public Pen() { ImageIcon iic = new ImageIcon("c:/pen.gif"); img = Transparency.makeColorTransparent(iic.getImage(), new Color(0).white); public void draw(graphics2d graphics) { graphics.drawimage(img, AffineTransform.getTranslateInstance(x, y), this); public boolean imageupdate(image img, int infoflags, int x, int y, int width, int height) { return true; private int x; private int y; private Image img; // On-screen position // On-screen position // Pen icon

Om du har tid och lust Låt en kompis testa ditt gränssnitt och ge feedback! Uppdatera sedan gränssnittet om du tycker det behövs. Lägg till fler typer av verktyg! Gör så att man kan ladda och spara bilder man ritat! Använd Photoshop för att skapa extra snygga ikoner för dina verktyg! Om du har representerat bilden som en uppsättning Java2D-primitiver: Försök introducera lite enkel animation genom att skapa en Thread och låt denna modifiera primitivernas kontrollpunkter!