OOP Objekt-orienterad programmering

Relevanta dokument
OOP Objekt-orienterad programmering

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

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

Mer om grafiska komponenter. Händelsestyrda program

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

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

Laboration 15 Grafiskt användargränssnitt

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

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

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

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

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

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

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

Java-concept och Swing. Swing low, sweet chariot

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

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

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

Grafiska komponenter.

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

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

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

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

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

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

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

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

Lektion Händelsehanterare

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

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

Grafiska användargränssnitt i Java

Grafiska användargränssnitt i Java

Arv och Grafiska Användargränssnitt

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

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

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

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

Lab5 för prgmedcl04 Grafik

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

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

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

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

1 Grafiska komponenter

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

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

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

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

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

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

Händelsestyrda program

5 Användargränssnitt. 5.1 AWT och Swing

Frames, menyer och GUI-program

kl

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

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

Grafiska användargränssnitt i Java

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

Projekt 2 XL. Observer-mönstret

Arvshierarki. Object. Bostadshus. Flerfamiljshus. Villa

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

Föreläsning 9. Arv Grafiska komponenter

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

Laboration 4: Game of Life

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

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

Laboration 24 Databasen MySQL och java

GUI-program med Swing

Klasser för grafik och bildhantering

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

GUI Nyckelbeståndsdelar

725G61 - Laboration 8 Ett enkelt GUI. Sahand Sadjadee och Johan Falkenjack

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

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

Föreläsning 7. Grafiska användargränssnitt

Lösningsförslag till tentamen

Lösningsförslag till tentamen

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

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

Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02

Applets med komponenter

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Arv. Grafiska komponenter. Arv. Arvhierarki. Arv. Föreläsning 12 (OH-bilder 9)

OOP Objekt-orienterad programmering

Rita Egna Bilder, Timer

FactoryCast HMI. Premium & Quantum PLC. Applets

Tentamen i Objektorienterad programmering

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

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin Micael Karlsson

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

OOP Objekt-orienterad programmering

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

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

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Lösningar för tenta 3 DAT043,

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

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

Transkript:

OOP F16:1 OOP Objekt-orienterad programmering Föreläsning 16 Grafiska användargränssnitt, GUI Ytor Komponenter Layout-managers Lyssnare GUI - Graphical User Interface OOP F16:2 Man skapar en yta (ett fönster) och på den ytan adderar man ett antal komponenter. Olika ytor: JFrame - vanligt fönster JApplet - fönster i en webbrowser Olika komponenter: JLabel, JTextField, JRadioButton, JComboBox, JButton Till komponenter kopplas Lyssnare som anger vad som skall hända när man t ex trycker på en knapp. 1

AWT kontra Swing OOP F16:3 AWT (Abstract Windowing Toolkit) Javas bibliotek för GUI Swing (från version 1.2) fler komponenter, utbyggt funktionalitet Lite förenklat utnyttjar Swing plattformens kapacitet bättre, dock lite krångligare att använda Denna föreläsning behandlar Swing-klassernas enklare delar (liknar AWT) samt de delar av AWT som fortfarande behövs i AWT Button, TextField etc i Swing JButton, JTextField etc Olika delar som behövs OOP F16:4 Ytor (olika sorters fönster) Komponenter (placeras i ytorna) Layout-managers (hur komponenterna ligger i ytorna) AWT: Frame, Applet Swing: JFrame, JApplet AWT: Label, TextField, Button, Checkbox, TextArea, Panel m.fl. Swing: JLabel, JTextField, JButton, JRadioButton, JTextArea, JPanel m.fl. (motsvarande AWT s + fler) AWT: BorderLayout, FlowLayout, GridLayout m.fl. Swing: använder AWT s + några till Lyssnare (kod för vad som skall hända när man t ex trycker på en knapp etc.) AWT: ActionListener, KeyListener, MouseListener m.fl. Swing: använder AWT s + några till 2

Hur gör man för att skapa ett fönster? OOP F16:5 import javax.swing.*; import java.awt.*; class NamnInmatning extends JFrame{ NamnInmatning(){ super("namninmatning"); setlayout(new FlowLayout()); JLabel l=new JLabel("Namn:"); add(l); JTextField tf=new JTextField(12); add(tf); JButton knapp=new JButton("Skapa"); add(knapp); setsize(300,75); new NamnInmatning(); JLabel OOP F16:6 En textsträng, kan ej editeras av användaren. import javax.swing.*; class LabelTest extends JFrame{ LabelTest(){ super("exempel Label"); JLabel l=new JLabel("Hej Hopp!"); add(l); setsize(300,75); new LabelTest(); Några metoder hos JLabel: l.settext( Ny text ); //Sätta ny text på JLabel n String s = l.gettext(); //Returnerar texten just nu 3

JButton OOP F16:7 En knapp man kan trycka på. För att nåt skall hända måste lyssnare kopplas på. import javax.swing.*; class KnappTest extends JFrame{ KnappTest(){ super("exempel Knapp"); JButton knapp=new JButton("Knapp"); add(knapp); setsize(200,75); new KnappTest(); Knappen kommer att ta upp hela JFrame ns yta. Inte så snyggt kanske - fixas med att sätta en annan LayoutManager till JFrame n - se nästa bild! JButton (med FlowLayout) OOP F16:8 import javax.swing.*; import java.awt.*; class KnappTest2 extends JFrame{ KnappTest2(){ super("exempel Knapp"); JButton knapp=new JButton("Knapp"); setlayout(new FlowLayout()); add(knapp); setsize(200,75); new KnappTest2(); Utseende efter att man gjort: knapp.setenabled(false); Några metoder hos JButton: knapp.settext( Annat ); String s = knapp.gettext(); knapp.setenabled(false); knapp.setenabled(true); //Ändra knapptexten //Hämta aktuell knapptext //Göra knappen otryckbar 4

Vilka olika komponenter finns och vilka metoder & attribut har de? Se java-dokumentationen: http://java.sun.com/javase/6/docs/api/ OOP F16:9 javax.swing Class JButton java.lang.object +--java.awt.component +--java.awt.container +--javax.swing.jcomponent +--javax.swing.abstractbutton +--javax.swing.jbutton All Implemented Interfaces: ImageObserver, ItemSelectable, MenuContainer, Serializable, Accessible, SwingConstants Direct Known Subclasses: BasicArrowButton, MetalComboBoxButton JTextField OOP F16:10 Ett textinmatningsfält där en textsträng kan skrivas in. Scrollar automatiskt. Obs endast konstruktorn - resten som tidigare bilder. TextTest(){ super("exempel Textfält"); JTextField tf=new JTextField(15); setlayout(new FlowLayout()); add(tf); setsize(200,60); Några metoder hos JTextField: String s = tf.gettext(); //Avläser texten tf.seteditable(false); //Tillåter inte inmatning Kan även skapas med text från början: JTextField tf = new JTextField( Starttext, 15); 5

JCheckBox och JRadioButton OOP F16:11 En checkruta som kan vara på eller av. RadioTest(){ super("exempel checkboxar"); setlayout(new GridLayout(2,1)); JCheckBox cb=new JCheckBox("Valbar"); JPanel p1=new JPanel(); p1.add(cb); add(p1); JRadioButton rb=new JRadioButton("Valbar2"); JPanel p2=new JPanel(); p2.add(rb); add(p2); setsize(200,100); Avläses med metoden isselected() som returnerar en boolean if (cb.isselected())... ; Vad händer om man trycker på krysset uppe till höger? OOP F16:12 Default-beteendet är att fönstret göms men applikationen fortfarande snurrar. Kan ändras med metoden setdefaultcloseoperation: setdefaultcloseoperation(exit_on_close); Avslutar applikationen genom att anropa System.exit(0) setdefaultcloseoperation(do_nothing_on_close); Ingenting händer 6

LayoutManager OOP F16:13 Om man adderar flera komponenter till en JFrame - hur hamnar dessa då? Det bestäms av vilken LayoutManager som JFrame n har. Alla Container s (alltså ytor där komponenter kan adderas) har en LayoutManager. Man kan byta LayoutManager om man vill ha en annan än den som är default. Några av de vanligaste: BorderLayout Fem delytor Nord, Syd, Väst, Öst, Center. Default hos JFrame. FlowLayout Komponenterna efter varandra. Default hos JPanel. GridLayout Ett rutmönster med ett antal rader och kolumner. BoxLayout Komponenterna i rad horisontellt eller vertikalt. Ej radbyte LayoutManager ändras med metoden setlayout JFrame fr = new JFrame(); fr.setlayout(new FlowLayout()); Exempel med 10 knappar på en Frame OOP F16:14 import javax.swing.*; import java.awt.*; class TenKnapps extends JFrame{ TenKnapps(){ super("10 Knappar"); for (int x=1; x<=10; x++) add(new JButton("Knapp "+x)); setsize(250,150); new TenKnapps(); Knapparna hamnar ovanpå varandra. Kanske inte riktigt det man vill... 7

10 knappar med FlowLayout OOP F16:15 TenKnapps(){ super("10 Knappar"); setlayout(new FlowLayout()); for (int x=1; x<=10; x++) add(new JButton("Knapp "+x)); setsize(250,150); Knapparna hamnar olika beroende på fönsterstorlek 10 knappar med GridLayout OOP F16:16 TenKnapps(){ super("10 Knappar"); setlayout(new GridLayout(4,3)); for (int x=1; x<=10; x++) add(new JButton("Knapp "+x)); setsize(250,150); GridLayout(4,3) ger 4 rader med 3 kolumner. Varje grej (här JButton s) tar upp 1/12 av ytan. 8

10 knappar med BoxLayout OOP F16:17 TenKnapps(){ super("10 Knappar"); JPanel pan=new JPanel(); pan.setlayout(new BoxLayout(pan, BoxLayout.Y_AXIS)); for (int x=1; x<=10; x++) pan.add(new JButton("Knapp "+x)); add(pan); setsize(200, 200); med: pan.setlayout(new BoxLayout(pan, BoxLayout.X_AXIS)); Kombinera olika LayoutManager s OOP F16:18 TenKnapps(){ super("10 Knappar"); setlayout(new GridLayout(4,1)); JPanel p1=new JPanel(); for (int x=1; x<=2; x++) p1.add(new JButton("Knapp "+x)); add(p1); JPanel p2=new JPanel(); for (int x=3; x<=6; x++) p2.add(new JButton("Knapp "+x)); add(p2); JPanel p3=new JPanel(); for (int x=7; x<=9; x++) p3.add(new JButton("Knapp "+x)); add(p3); Om man ändrar p4 till: JPanel p4=new JPanel(new FlowLayout(FlowLayout.LEFT)); JPanel p4=new JPanel(); p4.add(new JButton("Knapp "+10)); add(p4); setsize(400,200); 9

BorderLayout OOP F16:19 Delar upp ett fönster i fem logiska delytor West North Center South East De olika delarna är Stringkonstanter i BorderLayout: NORTH WEST CENTER EAST SOUTH Man adderar en komponent per delyta. Vill man ha flera på en delyta så läggs dessa i en JPanel. När man adderar väljer man vart man vill addera: add(komponent, BorderLayout.SOUTH); De delytor som ej har något adderat i sig krymps så att andra delytor expanderas. Center expanderas i första hand. Exempel BorderLayout OOP F16:20 BorderTest(){ super("test av Borderlayout"); JPanel upp=new JPanel(); upp.add(new JLabel("Namn:")); upp.add(new JTextField(15)); add(upp, BorderLayout.NORTH); JPanel ner=new JPanel(); ner.add(new JButton("Skapa")); ner.add(new JButton("Ta bort")); ner.add(new JButton("Sluta")); add(ner, BorderLayout.SOUTH); setsize(300, 250); Man jobbar hela tiden genom att skapa små delpaneler (JPanel s) och i dessa lägga komponenter. Panelerna adderas sedan på lämpligt ställe i JFrame n. Ibland (ofta...) skapar man delpaneler som läggs i paneler (som läggs i paneler...) och sedan adderas till fönstret (JFrame n). 10

Händelser OOP F16:21 När användaren "gör något" i ett GUI-fönster skapas en händelse: trycker på en knapp skriver i ett textfält fyller i en checkbox rör musen över ett fält etc. Denna händelse kan fångas så att man ser till att en viss kod exekveras. Man kopplar en lyssnare till en komponent. När något händer med den komponenten aktiveras lyssnaren och en metod i lyssnaren anropas. En lyssnare är en klass som implementerar ett gränssnitt. Olika gränssnitt för olika händelser. Enklaste gränssnittet är ActionListener. interface ActionListener{ void actionperformed(actionevent e); Lyssnar-interfacen ligger på java.awt.event (de flesta, några nya finns i javax.swing.event) Varje fönster har egen livsloop OOP F16:22 När ett fönster ritas upp - setvisible(true) anropas - startar en egen exekveringstråd. Denna känner av användarens aktiviteter i fönstret. När olika saker görs anropas lyssnare. Exekveringen fortsätter tills fönstret stängs. En klass som avslutar en applikation, kopplas t.ex. till en knapp Quit. class QuitLyssnare implements ActionListener{ public void actionperformed(actionevent e){ System.exit(0); Kopplas ihop med en komponent genom att adderas till komponenten JButton quitknapp = new JButton( Quit ); quitknapp.addactionlistener(new QuitLyssnare()); Knappen adderas på lämpligt ställe i fönstret. När man klickar på knappen kommer metoden actionperformed i QuitLyssnare att anropas och i detta fall programmet att avslutas. 11

Placering av lyssnarklasser OOP F16:23 Kan placeras i egen fil. Dock behöver lyssnarna ofta komma åt olika komponenter för att kunna avläsa dessa. Smidigast att placera som inre klasser i JFrame-subklassen. class ExempelGUI extends JFrame{ JButton skapaknapp, quitknapp; JTextField inmatning; ExempelGUI(){ //Konstruktor som skapar komponeterna, placerar dem i fönstret //kopplar ihop med lyssnare och startar fönsterexekveringstråden class SkapaLyssnare implements ActionListener{ public void actionperformed(actionevent e){ //Det som skall göras. Har åtkomst till de globala komponenterna new ExempelGUI(); import java.awt.*; import java.awt.event.*; import javax.swing.*; class Celsius extends JFrame{ public Celsius(){ super("temperatur-converter"); setlayout(new GridLayout(2,1)); JPanel upp=new JPanel(); upp.add(new JLabel("Temperatur (celsius):")); JTextField inmat=new JTextField(5); upp.add(inmat); add(upp); JPanel ner=new JPanel(); JButton knapp=new JButton("Beräkna"); ner.add(knapp); ner.add(new JLabel("Fahrenheit =")); JLabel res=new JLabel("---"); ner.add(res); add(ner); setsize(220, 100); setdefaultcloseoperation(exit_on_close); OOP F16:24 Vi vill skapa ett litet GUI där man kan kolla göra om celsius till fahrenheit Till vänster finns koden som skapar ett sådant fönster, dock inga lyssnare new Celsius(); 12