Fönsterhantering, grafik

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

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

Objektorienterad programmering med Java Swing. Programexempel. Swing och AWT AWT. = Abstract windowing toolkit

Denna vecka. Idag. Grafiskt användarsnitt. Vi kommer att se

Modelsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545

Rita Egna Bilder, Timer

Modelsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545

27. GUI Programming. Java. Summer 2008 Instructor: Dr. Masoud Yaghini

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

Java-concept och Swing. Swing low, sweet chariot

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

Grafiska komponenter.

Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02

Modellsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

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

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

Modellsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545

Modellsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545

OOP Objekt-orienterad programmering

Kursutvärdering. Spel och grafik i Java. Föreläsningarna. Labbar. Föreläsningar-labbar. Översikt. Bra föreläsningar

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

OOP Objekt-orienterad programmering

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

Fönsterhantering, grafik

Laboration 15 Grafiskt användargränssnitt

Mer om grafiska komponenter. Händelsestyrda program

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

SMD091 Lektion 9. Definition. Inkapsling. Lite repetition. Grafik. Gränssnitt Definition och Implementation. Sammansättning... Implementation.

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

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

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

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

ID1004 Laboration 3, 5-6 November 2012

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

Exempel på användning av arv: Geometriska figurer

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

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

Projekt 2 XL. Observer-mönstret

Föreläsning 11. Att rita egna bilder.

LiTHehack? Här? lithehack se koma Tisdagar och torsdagar

Lektion Händelsehanterare

Föreläsning 10. Mer om grafiska komponenter Händelsestyrda program. Layout Managers. Exempel: FlowLayout. Klassen FlowLayout

1 Grafiska komponenter

Laboration 4: Game of Life

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

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

Lab5 för prgmedcl04 Grafik

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.

Tentamen FYTA11 Javaprogrammering

Klasser för grafik och bildhantering

Repetitionsföreläsning 2: Quiz & problemlösning med swing Inget nytt material.

Lösningsförslag till tentamen

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

Föreläsning 13: Swing (GUI), händelser, timer

Dagens program. Programmeringsteknik och Matlab. Vad är arv? Vi ärver från GregorianCalendar. Kan vi bygga vidare på existerande klasser?

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

Föreläsning 10. Mer om grafiska komponenter Händelsestyrda program. Layout Managers

Föreläsning 11. Att rita egna bilder. Grafik. Klassen Graphics. Fönstrets koordinatsystem

lgammal2.txt // Lösningar till gammal tentamen // Uppgift 1 a

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

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

endast har ett korrekt alternativ. Om

ITK:P1 Föreläsning 8. Verktyget Javadoc. Kommentarer för Javadoc. Multimedia för spelkonstruktion

Arv, Grafiska användaregränssnitt och Inre klasser! Förelasning 12!! TDA540 Objektorienterad Programmering!

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

Fortsättningskurs i programmering F 5. GUI händelsehantering - undantagshantering Hugo Quisbert AWT. Paket för hantering av grafik

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

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.

Labbinstruktioner för Java/Swing

Länkade strukturer. (del 2)

Arv och Grafiska Användargränssnitt

Grafiskt användargränssnitt (GUI-Graphical User Interface) intro Komponenter

PROG2 Tenta Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2

MVC-mönstret. model-view-control i Swing

Grafiska användargränssnitt i Java

Beijer Electronics AB 2000, MA00336A,

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

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

Laboration 3 GUI-programmering

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

Tentamen FYTA11 Javaprogrammering

Inlämningsuppgift 1 Programmeringsteknik MN1 vt02

Grafik i DrRacket AV TOMMY KARLSSON

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Lösningsförslag till tentamen

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.

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

Tentamen FYTA11 Javaprogrammering

Grafiska användargränssnitt i Java

DAT043 - föreläsning 8

Föreläsning 15: Repetition DVGA02

Komponenter Removed Serviceable

Föreläsning 12. Länkade listor

Föreläsning 10. ADT:er och datastrukturer


DD2385 Programutvecklingsteknik Några bilder till föreläsning 1 24/ Kursöversikt Javarepetition/Javaintroduktion

Lösningsförslag till tentamen

Transkript:

Grafiska komponenter Fönsterhantering, grafik (del 1) Vanligast använda: JFrame ContentPane LayoutManager JPanel JLabel JButton Programmering tillämpningar och datastrukturer 2 Paket Klassdiagram för Component java.util Listor, sortering, etc. java.awt Gamla fönsterhanteringsklasser java.awt.event Händelsestyrning javax.swing Nya J klasser Programmering tillämpningar och datastrukturer 3 J = finns i javax.swing annars i java.awt Programmering tillämpningar och datastrukturer 4 Component +repaint() +update() Tungviktiga komp. i Swing Window +add() +remove() +setlayoutmanager() +validate() +setdefaultcloseoperation() +setsize() JComponent JApplet, JDialog, JFrame, JWindow Använder operativsystemets grafiska funktioner Plattformsberoende +setpreferredsize() Frame AbstractButton +seticon() +isselected() JFrame JButton JLabel JPanel +pack() +settext() +show() +isdefaultbutton() +seticon() Programmering tillämpningar och datastrukturer 5 Programmering tillämpningar och datastrukturer 6 1

Lättviktiga komp. i Swing JComponent och dess subklasser Lånar utrymme från en tungviktskomponent Ritas upp av Java direkt Körs i en egen tråd Kan köras parallellt med annat som pågår i operativsystemet Dubbelbuffrad Behöver bara flashas (snabbt) när allting är uppritat på ett internt virtuellt utrymme Komponenter Komponenter kan alltså i sin tur vara behållare för andra komponenter hierarchy Topp-nivå behållare speciella Utgör yttre gräns mot operativsystemet Definierar en yta där komponenterna kan måla upp sig själva Programmering tillämpningar och datastrukturer 7 Programmering tillämpningar och datastrukturer 8 addfocuslistener(focuslistener l) addkeylistener(keylistener l) addmouselistener(mouselistener l) Etc. repaint() If this component is a lightweight component, this method causes a call to this component's paint method. Otherwise, this method causes a call to this component's update method. repaint(long tm) Inom tm millisekunder repaint(int x, int y, int width, int height) Programmering tillämpningar och datastrukturer 9 Programmering tillämpningar och datastrukturer 10 update(graphics g) The update method of Component calls this component's paint method to redraw this component. This method is commonly overridden by subclasses which need to do additional work in response to a call to repaint. Subclasses of Component that override this method should either call super.update(g) or call paint(g) directly from their update method. paint(graphics g) This method is called when the contents of the component should be painted; such as when the component is first being shown or is damaged and in need of repair. Subclasses that override this method need not call super.paint(g). Graphics getgraphics() Verktygslåda för att visualisera, rita Kommer ihåg vilken enhet man ritar på» Fönster, printer, Kommer ihåg vilken färg på penseln, etc. Programmering tillämpningar och datastrukturer 11 Programmering tillämpningar och datastrukturer 12 2

Vägen från repaint() till paint() Protokoll för class myrect extends Component { changeshape( ) { repaint(); paint(graphics g) { java.awt abstract class Component { void repaint() { paint(g); update(g); void update(graphics g) { paint(g); add(component comp) Note: If a component has been added to a container that has been displayed, validate must be called on that container to display the new component. remove(component comp) This method also notifies the layout manager to remove the component from this container's layout. Programmering tillämpningar och datastrukturer 13 Programmering tillämpningar och datastrukturer 14 Protokoll för setlayout(layoutmanager mgr) LayoutManager getlayout() validate() Is used to cause a container to lay out its subcomponents again. It should be invoked when this container's subcomponents are modified (added to or removed from the container, or layoutrelated information changed) after the container has been displayed. Topp-nivå behållare sköter utskick av händelser som genereras externt (ex.vis. av användaren) Musknappar Musrörelser Tangentnertryckning Kan dessutom behöva använda interna händelser Ex. timer Programmering tillämpningar och datastrukturer 15 Programmering tillämpningar och datastrukturer 16 Protokoll för JFrame Konstant: EXIT_ON_CLOSE Konstruktor: JFrame(String titelrad) setdefaultcloseoperation(int op) Protokoll för JFrame setlayout(layoutmanager manager) add(component comp) remove(component comp) getcontentpane() setmenubar(menubar m) setsize(int w, int h) pack() show() // anpassa fönsterstorlek till innehåll // detta bör göras sist Programmering tillämpningar och datastrukturer 17 Programmering tillämpningar och datastrukturer 18 3

Protokoll för JComponent repaint(long tm, int x, int y, int width, int height) Senast om tm millisekunder repaint(rectangle r) revalidate() Protokoll för JComponent paint(graphics g) Invoked by Swing to draw components. Applications should not invoke paint directly, but should instead use the repaint method to schedule the component for redrawing. [ ] ensure that children appear on top of component itself. Subclasses can just override this method, as always. A subclass that just wants to specialize the UI (look and feel) delegate's paint method should just override paintcomponent. Programmering tillämpningar och datastrukturer 19 Programmering tillämpningar och datastrukturer 20 JPanel(LayoutManager layout) add(component c) paintcomponent(graphics g) repaint() Protokoll för JPanel Protokoll för JLabel JLabel(String text, Icon image, int horizontalalignment) JLabel(String text, int horizontalalignment) JLabel(String text) JLabel(Icon image, int horizontalalignment) JLabel(Icon image) settext(string text) seticon(icon icon) seticontextgap(int icontextgap) Programmering tillämpningar och datastrukturer 21 Programmering tillämpningar och datastrukturer 22 Protokoll för JLabel Protokoll för AbstractButton setverticalalignment(int alignment) Positionerar innehåll» JLabel.TOP» JLabel.CENTER» JLabel.BOTTOM sethorizontalalignment(int alignment)» JLabel.LEFT» JLabel.CENTER» JLabel.RIGHT setverticaltextposition(int textposition) Positionerar text» ovanstående + JLabel.LEADING» JLabel.TRAILING seticon(icon defaulticon) isselected() Hela knappen Kan även testa för press, rollover Icon getselectedicon() addactionlistener(actionlistener listener) Programmering tillämpningar och datastrukturer 23 Programmering tillämpningar och datastrukturer 24 4

Component Protokoll för JButton +repaint() +update() JButton(String text, Icon icon) JButton(Icon icon) JButton(String text) +add() +remove() +setlayoutmanager() +validate() +setdefaultcloseoperation() +setsize() boolean isdefaultbutton() Window JComponent +setpreferredsize() Frame AbstractButton +seticon() +isselected() JFrame JButton JLabel JPanel Programmering tillämpningar och datastrukturer 25 +pack() +settext() +show() +isdefaultbutton() +seticon() Programmering tillämpningar och datastrukturer 26 BorderLayout BorderLayout Fem regioner (med max en komponent i varje) NORTH SOUTH EAST WEST CENTER (default) WEST NORTH CENTER EAST Panel p = new JPanel(); p.setlayout(new BorderLayout()); p.add(new Button("Okay"), BorderLayout.SOUTH); SOUTH Programmering tillämpningar och datastrukturer 27 Programmering tillämpningar och datastrukturer 28 Matris-layout Alla komponenter ges samma utrymme Dvs. lika stora rutor GridLayout FlowLayout Komponenterna läggs upp i en rad Komponenterna skalas inte Får inte alla komponenter plats bredvid varandra påbörjas ny rad Automatisk omplacering om fönsterstorleken skulle ändras Programmering tillämpningar och datastrukturer 29 Programmering tillämpningar och datastrukturer 30 5

BoxLayout Som FlowLayout, men med fler kontrollmöjligheter: Kan lägga raden vertikalt Kan påverka komponenternas storlek setpreferredsize(new Dimension(10, 30)); Mellanlägg mellan komponenterna createridigarea(new Dimension(20, 100)); Abstrakt klass Graphics Konkret klass med metoddefinitioner tillhandahålls av JVM Beroende på vilken typ av fysisk enhet som ska ritas på Skrivare Skärm Fil Beroende på plattform Programmering tillämpningar och datastrukturer 31 Programmering tillämpningar och datastrukturer 32 Graphics Clip Innehåller tillståndsinformation: Vilken komponent som ska ritas på Koordinatsystemets nollpunkt Används vid clipping och translation Gällande clip (Del)område där grafiken inte är skymd Vald färg Vald font Logisk pixeloperation (XOR el. paint) Alternativa XOR-färgen Programmering tillämpningar och datastrukturer 33 Programmering tillämpningar och datastrukturer 34 Rectangle getclipbounds() Shape getclip() setclip(int x, int y, int width, int height) setclip(shape clip) cliprect(int x, int y, int width, int height) Intersects the current clip with the specified rectangle. The resulting clipping area is the intersection of the current clipping area and the specified rectangle. translate(int x, int y) Förskjut koordinatsystemet till <x,y> hitclip(int x, int y, int width, int height) Returnerar true om clip-området överlappar med den angivna rektangeln (som kanske är omgivande rektangel för en annan grafik) Programmering tillämpningar och datastrukturer 35 Programmering tillämpningar och datastrukturer 36 6

Color getcolor() setcolor(color color) Kommer att rita och skriva i denna färg setxormode(color c1) When [subsequent] drawing operations are performed, pixels which are the current color are changed to the specified color, and vice versa. drawline(int x1, int y1, int x2, int y2) Linje från <x 1,y 1 > till <x 2,y 2 > drawrect(int x, int y, int width, int height) Mått angivet i pixel fillrect(int x, int y, int width, int height) clearrect(int x, int y, int width, int height) Fyller rektangeln med bakgrundsfärgen drawoval(int x, int y, int width, int height) drawarc(x, y, width, height, int startangle, int arcangle) Programmering tillämpningar och datastrukturer 37 Programmering tillämpningar och datastrukturer 38 drawpolyline(int xpoints[], int ypoints[], int npoints) Draws a sequence of connected lines defined by arrays of x and y coordinates. drawpolygon(int xpoints[], int ypoints[], int npoints) Händelser Topp-nivå containers genererar Action när de får signaler från operativsystemet Dessa fångas upp och tolkas sedan i relevanta komponenter Där skapas specifika händelser Skickas ut till alla lyssnare Objekt som har registrerat sig som lyssnare hos den här komponenten Programmering tillämpningar och datastrukturer 39 Programmering tillämpningar och datastrukturer 40 Component +addmouselistener() +addkeylistener() +addfocuslistener() +addcomponentlistener() Timer +addlistener() Dessutom kan ett objekt registrera sig hos en timer som kommer att generera händelser av typen ActionEvent: Window JComponent +addwindowlistener() Frame +addchangelistener() +addpropertychangelistener() AbstractButton +addactionlistener() enemy = world.area()[15][15].initaddenemy(player); javax.swing.timer t = new javax.swing.timer(timestep, enemy); t.start(); JFrame JButton JLabel JPanel Programmering tillämpningar och datastrukturer 41 Programmering tillämpningar och datastrukturer 42 7