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

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

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

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

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

Mer om grafiska komponenter. Händelsestyrda program

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

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

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

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

Lektion Händelsehanterare

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

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

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

OOP Objekt-orienterad programmering

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

Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02

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

Laboration 15 Grafiskt användargränssnitt

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

Händelsestyrda program

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

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

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

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

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

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

OOP Objekt-orienterad programmering

1 Grafiska komponenter

Java-concept och Swing. Swing low, sweet chariot

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

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

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

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

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

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

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

Rita Egna Bilder, Timer

Projekt 2 XL. Observer-mönstret

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

Lab5 för prgmedcl04 Grafik

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)

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

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Tentamen i Objektorienterad programmering

Föreläsnings 9 - Exceptions, I/O

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

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

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

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

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

Tentamen i Objektorienterad programmering

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

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

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.

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

Fönsterhantering, grafik

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

Laboration 4: Game of Life

Lösningsförslag tentamen FYTA11 Java

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

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

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

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

Tentamen i Objektorienterad programmering E

Tentamen , Grundläggande programmering i Java

ID1004 Laboration 3, 5-6 November 2012

Labbinstruktioner för Java/Swing

Tentamen, EDAA20/EDA501 Programmering

Arv och Grafiska Användargränssnitt

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

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h

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

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

Lösningsförslag till tentamen

Tentamen FYTA11 Javaprogrammering

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

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

Programstyrd / händelsestyrd

2I1073 Lektion 2. Lektion 2a. Lektion 2a. Servlets, säkerhet, och filhantering. import java.io.*; import javax.servlet.*; import javax.servlet.http.

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

Grafiska användargränssnitt i Java

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

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

Laboration 24 Databasen MySQL och java

Tentamen FYTA11 Javaprogrammering

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

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

Tentamen Objekt-orienterad programmering med Java, 1DL100 Sommarkurs och distanskurs

Föreläsning 3. Iteration while-satsen

Grafiska användargränssnitt i Java

Föreläsning 1, vecka 8: Att förbereda sig för tentan

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

Föreläsning 2, vecka 6: Tillstånd i objektorienterade program (och mera interface)

Lösningsförslag till tentamen

Transkript:

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 egna komponenter Lyssnare och händelser Dialogrutor 1

Fönster Rätt snart vill man rita upp egna typer av fönster Lösning: Klassen JFrame implementerar ett fönster För att skapa ett eget, skriv en klass som ärver från denna. Fyll sedan fönstret med de komponenter du vill ha. JFrame, m.fl. finns I paketet javax.swing Bygger på det äldre paketet java.awt. Vissa delar av det kan behövas. 2

Fönster, exempel public class MyFrame extends JFrame { public MyFrame() { super("välkomstfönster"); JLabel text = new JLabel("Hej allesammans!"); getcontentpane().add(text); setsize(new Dimension(300, 200)); setdefaultcloseoperation(jframe.exit_on_close); Jlabel är en komponent Komponenter läggs till, med metoden add public static void main(string[] args) { JFrame thewindow = new MyFrame(); thewindow.setvisible(true); 3

Komponenter (ex.) 4

Layouthanterare Problem: Om två eller flera komponenter läggs till, var placeras de? Lösning: Använd en layouthanterare Andra fördelar: Layouthanteraren bestämmer hur saker förstoras/förminskas då man drar i fönstret. getcontentpane().setlayout(new FlowLayout()); En enkel layouthanterare som helt enkelt lägger komponenterna på rad. Vi tar ett litet exempel... 5

Layouthanterare(2) BorderLayout. Vi tar ett litet exempel... - Layouten blir ofta ganska grov + Enkel att använda Förfina med under-layouter! 6

Layouthanterare(3) BoxLayout Container c = getcontentpane(); c.setlayout(c, BoxLayout.Y_AXIS); JPanel p = new Jpanel(); p.setlayout(p, BoxLayout.Y_AXIS); c.add(p); Box b = new Box(BoxLayout.Y_AXIS); c.add(b); Box b2 = new Box(BoxLayout.X_AXIS); b.add(b2); b2.add(new JLabel( Author )); b2.add(new JTextField()); - Mycket jobb... + Lätt att förstå + Kan bli hur detaljerad som helst + Använd Glue och Strut för utfyllnad... Box b3 = new Box(BoxLayout.X_AXIS); b.add(b3); b3.add(box.createhorizontalglue()); b3.add(new Jbutton( Search )); b3.add(box.createhorizontalglue()); 7

Layouthanterare(4) En sammanfattning: FlowLayout GridLayout(r, k) BorderLayout BoxLayout(riktning) finns fler... Komponenterna placeras från vänster till höger i rader, uppifrån och ner Delar upp fönstret i rutmönster om r rader och k kolumner. Alla rutor (d.v.s. komponenter) blir lika stora Delar upp fönstret i fem delar: längs sidorna och i mitten: NORTH, SOUTH, WEST, EAST, CENTER En gör-det-själv layout. Placerar komponenterna bredvid varandra antingen i x-led eller y-led. Lätt att förstå, mycket att skriva. 8

Egna komponenter (1) Antag att vi vill göra ett GUI för en bil... Egengjord komponent! Egengjord komponent! JLabel lab = new JLabel(); lab.seticon(new ImageIcon(ImageIO.read( new File("speedometer.jpg")))); this.add(lab); 9

Egna komponenter (2) Vi gör en egen klass FuelGuage, som ärver från JComponent och överlagrar metoden paintcomponent. paintcomponent är en metod som kommer att anropas då fönstret ritar ut sig själv. Fönstret bestämmer själv då detta behövs och ser till att allting ritas i rätt ordning. Vi kan trigga en omritning genom att anropa repaint(). 10

Egna komponenter (3) Vi gör en egen klass FuelGuage, som ärver från JComponent och överlagrar metoden paintcomponent. y x paintcomponent kommer anropas med ett Graphics-objekt som man kan använda för att rita ut med. Finns metoder för att rita bilder, text och geometriska figurer. Komponenten håller reda på hur stor den är. Vi kan ta reda på det med metoderna getwidth() och getheight(). Vi tar ett litet exempel... 11

Egna komponenter (4) Hur gör vi nu så att man kan öka/minska bränslemätaren med piltangenterna? Vi skulle kunna polla tangentbordet. i main: x y while (true) { if (keyboarduppressed()) { // increase fuel 1%. else if (keyboarddownpressed()) { // decrease fuel 1%. Problem? busy-loop (vi kan lägga in en sleep). Vi kan inte göra något annat under tiden. 12

Egna komponenter (5) Hur gör vi nu så att man kan öka/minska bränslemätaren med piltangenterna? Vi skulle kunna registera en lyssnare hos vår komponent. this.setfocusable(true); this.addkeylistener(new MyKeyListener()); public class MyKeyListener extends KeyListener() { public void keypressed(keyevent ev) {... public void keyreleased(keyevent ev) {... public void keytyped(keyevent ev) {... Vi tar ett litet exempel... Runtime-systemet håller då reda på om någon har tryckt på en knapp och meddelar vår lyssnare. 13

Händelser och lyssnare För att programmet ska kunna reagera på händelser kopplar man på olika typer av lyssnare till komponenter i fönstret Lyssnarna kan fånga upp händelser som knapptryckningar och musrörelser Observera att lyssnare är interfaces, du måste själv implementera dem (all dess metoder). Händelse ActionEvent MouseEvent KeyEvent MenuEvent Lyssnare ActionListener, för knappar m.m. MouseListener, MouseMotionListener KeyListener MenuListener 14

Händelser och lyssnare (2) Vi skapade en lyssnar-klass som vi egentligen bara vill använda en gång, just vid ett anrop... Här kan det vara lämpligt med en anonym inre klass: this.setfocusable(true); this.addkeylistener(new KeyListener() { public void keypressed(keyevent ev) {... public void keyreleased(keyevent ev) {... public void keytyped(keyevent ev) {... ); Blir direkt en implementation till KeyEvent! 15

Händelser och lyssnare (3) Om vi bara vill implementera en metod så finns det en smidig Adapter-klass: this.setfocusable(true); this.addkeylistener(new KeyAdapter() { public void keypressed(keyevent ev) {... ); KeyListener <<interface>> +keypressed() +keyreleased() +keytyped() KeyAdapter +keypressed() +keyreleased() +keytyped() Vår anonyma klass +keypressed() 16

Händelser och lyssnare(4) Sätta bränslet till exakt där man klickar med musen... y x this.setfocusable(true); this.addmouselistener(new MouseAdapter() { public void mousepressed(mouseevent ev) {... ); Vi tar ett litet exempel... 17

Dialogrutor JOptionPane används för att visa dialogrutor Ett urval av de statiska metoderna: showconfirmationdialog showinputdialog showmessagedialog String name = JoptionPane.showInputDialog("Logga in:"); if (name!= null) { // null if user cancels JOptionPane.showMessageDialog(null, "Hej " + namn); 18

Dialogrutor (3) JFileChooser kan användas för att låta användaren öppna/spara en fil. Objektet kan öppna en dialogruta. När rutan stängs ner returneras ett heltal som anger hur dialogrutan stängdes. JFileChooser chooser = new JfileChooser(CarGui.this); int result = chooser.showopendialog(); if (result == JFileChooser.APPROVE_OPTION) { File f = chooser.getselsectedfile(); 19 Finns t.ex, CANCEL_OPTION, och några till.