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

Relevanta dokument
Lektion Händelsehanterare

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

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

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

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

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

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

Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02

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

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

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

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

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

Mer om grafiska komponenter. Händelsestyrda program

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

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

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

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

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

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

Java-concept och Swing. Swing low, sweet chariot

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

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

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

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

Laboration 15 Grafiskt användargränssnitt

Rita Egna Bilder, Timer

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

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

Lab5 för prgmedcl04 Grafik

ID1004 Laboration 3, 5-6 November 2012

OOP Objekt-orienterad programmering

JAVA Mer om klasser och objektorientering

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

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

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

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

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

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

Lösningar för tenta 3 DAT043,

Lösningsförslag till tentamen

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

Laboration 4: Game of Life

Laboration 24 Databasen MySQL och java

OOP Objekt-orienterad programmering

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

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

Exempel på användning av arv: Geometriska figurer

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

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

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

Applets med komponenter

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

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

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

Föreläsning 5-6 Innehåll

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

Lösningsförslag till tentamen

Lösningsförslag till tentamen

Lösningsförslag till tentamen

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

Grafiska komponenter.

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

Tentamen i Objektorienterad programmering

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

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

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

Klasshierarkier. Klasser kan byggas på redan definierade klasser

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

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

Tentamen i Objektorienterad programmering E

Konstruktion av klasser med klasser

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

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

Inlämningsuppgift 1 Programmeringsteknik MN1 vt02

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

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

Lösningar till tentamen i EDAF25

Tentamen FYTA11 Javaprogrammering

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.

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

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

Tentamen i Objektorienterad programmering

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

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

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

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

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

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

PROGRAMMERINGSTEKNIK TIN212

GUI-program med Swing

kl

Monday, November 16, Senaste Labben

Klasser som datastrukturer

Föreläsning 13 Innehåll

Lite logik. Kap 6: Sid 2

Lösningsförslag till tentamen

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

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

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

Transkript:

Grafiskt användargränssnitt (GUI-Graphical User Interface) intro Komponenter De komponenter som vi ska titta lite närmare på den här gången är paneler (JPanel), knappar (JButton), textfält (JTextField). Vi fortsätter att använda det mer sofistikerade Swing-paketet, därav J framför klassnamnen. Applikationsfönster (frames) är i sig en behållare och det skulle gå att lägga andra komponenter direkt i fönstret men det är ingen bra sätt att programmera på, utan det bästa här är att skapa en panel (se nedan) och lägga in i fönstret. Det ska man placera i ett lager i fönstert som kallas content pane, som vi måste ta reda på när vi skapat ett fönster. Container contentpane = frame.getcontentpane(); Men mer om detta senare i koden. Panel En panel är en yta som det går att rita och skriva på. Dessutom är den en behållare (containers) för andra komponenter. För att lägga till en panel i vårt fönster skriver vi: JPanel p = new JPanel(); Om vi vill skriva och rita i på vår yta så behöver vi också överlagra ( vi ärver den och förtydligar den) en metod med namnet paintcomponent i vår definiering av vår JPanel-klass. Ex. : class MyPanel extends Jpanel { public void paintcomponent(graphics g) { //kod för att rita och skriva När vi utnyttjar den här metoden får vi köpet med en massa intelligenta funktioner. T ex om ändrar storleken på vårt fönster så känner den av det och ritar om ytan eller om ett annat fönster(t ex vårt utvecklingsmiljöfönster) täcker vårt fönster och vi sen tar bort det så ritar den också om ytan så den alltid är up to date. Dags för första programmet med något inuti vårt fönster Vi bygger vidare på vårt terminerande fönster från förra lektionen. Vårt mål är att skriva ut Tjenare! på skärmen. Det nya är fetmarkerat. package textinwindow; import java.awt.*; import java.awt.event.*; import javax.swing.*; class MyPanel extends JPanel { public void paintcomponent(graphics g) { // för att vara säker på att "super"-klassen gör sitt // anropar vi den metoden, innan vi skriver eller ritar super.paintcomponent(g); //skriv ut en textsträng, samt ange läget i avståndet från //övre vänstra hörnet i x-led åt höger och i y-led neråt g.drawstring(" ** Tjenare kompis!! ** ", 50, 100); class TextInWindow extends JFrame { public TextInWindow() /PB Sida 1

{ settitle("text i vårt fönster"); Toolkit tk = Toolkit.getDefaultToolkit(); Dimension d = tk.getscreensize(); int screenheight = d.height; int screenwidth = d.width; setsize(screenwidth/2,screenheight/2); //(bredd,höjd) setlocation(screenwidth/4, screenheight/4); MyPanel p = new MyPanel(); setvisible(true); setdefaultcloseoperation(exit_on_close); public class TestTextInWindow { public static void main(string args[]) { JFrame mywindow = new TextInWindow(); Alltid något, sakta men säkert framåt. Nu ska vi gå igenom två komponenter i rask takt som vi sen ska placera i vårt fönster. Knappar Den typ av knappar det är frågan om här är alltså vanliga trycknappar som kan tryckas ned för att utföra kommandon eller svara på frågor, exempel på två "kändisknappar" är OK och Avbryt. För att skapa knappen okknapp med texten OK skriver man bara följande: JButton okknapp = new JButton("OK"); Texten som man vill ska stå på knappen anger man alltså som argument till klassen JButtons konstruktormetod. Tyvärr har vi ännu bara fått den visuella knappen och ingen händelse är kopplad till den. Men det kommer. För att t.ex. lägga till knappen okknapp skriver vi bara: add(okknapp); Vi behöver också en händelselyssnare som märker när vi klickar på knappen. okknapp.addactionlistener( this); samt lite mer kod för att ta hand om klicket mer om detta i själva programmet, där vi bättre ser var delarna hamnar. Dags för nästa program med tre knappar Nu ska vi lägga in tre knappar, i vårt förra program, som ställer om färgen på vår bakgrund i fönstret. Det nya är fetmarkerat. Allt det nya hamnar i vår klass MyPanel. package buttontest; import java.awt.*; import java.awt.event.*; import javax.swing.*; class MyPanel extends JPanel implements ActionListener { //Till vår panel måste vi koppla en händelselyssnare, därav "implements // ActionListener" ovan. //Vi måste deklarera våra knappar JButton redbutton; JButton yellowbutton; JButton greenbutton; /PB Sida 2

//Vi måste skapa en egen konstruktor för vår panel, som ju körs endast //när vi skapar ett objekt av denna klass. Vi vill ju att när vi skapar //panelen ska också knappar skapas automatiskt. public MyPanel() { //Skapa knapparna redbutton = new JButton("Rött"); yellowbutton = new JButton("Gult"); greenbutton = new JButton("Grönt"); //lägg till dom till det här panelobjektet add(redbutton); add(yellowbutton); add(greenbutton); //koppla på panelens händelselyssnare redbutton.addactionlistener(this); yellowbutton.addactionlistener(this); greenbutton.addactionlistener(this); //Ifall något händer dvs vi klickar på någon av knapparna, så går ett //meddelande till till vår ActionListener. OM detta inträffar så måste //vi ju ta hand om detta och göra något. Vi skriver en metod för det. public void actionperformed(actionevent evt) { Object source = evt.getsource(); //hämta händelsekälla //Definiera en variabel som innehåller en färg Color color=getbackground(); //Testa vilken av knapparna vi tryckte på och //ge variabeln color en färg if (source==redbutton) color=color.red; else if (source==yellowbutton) color=color.yellow; else if (source==greenbutton) color=color.green; setbackground(color); //sätt om färgen på aktuell panel repaint(); //rita om aktuell panel public void paintcomponent(graphics g) { // för att vara säker på att "super"-klassen gör sitt // anropar vi den metoden, innan vi skriver eller ritar super.paintcomponent(g); //skriv ut en textsträng, samt ange läget i avståndet från //övre vänstra hörnet i x-led åt höger och i y-led neråt g.drawstring(" ** Tjenare kompis!! ** ", 50, 100); class TextInWindow extends JFrame { public TextInWindow() { settitle("text i vårt fönster + 3 knappar"); Toolkit tk = Toolkit.getDefaultToolkit(); Dimension d = tk.getscreensize(); int screenheight = d.height; int screenwidth = d.width; setsize(screenwidth/2,screenheight/2); //(bredd,höjd) setlocation(screenwidth/4, screenheight/4); MyPanel p = new MyPanel(); setvisible(true); setdefaultcloseoperation(exit_on_close); /PB Sida 3

public class ButtonTest { public static void main(string args[]) { JFrame mywindow = new TextInWindow(); Som du såg så dök det upp nya saker som Object och Color. Vi går inte närmare in på dessa utan konstaterar enbart att variabeln color(här hos oss) är av typen Color och det finns ett antal standardfärger att använda med punktnotation. black, blue, cyan, darkgray, gray, green, lightgray, magenta, orange, pink, red, white, yellow Nu är det nog dags att öva lite, men för den som är snabb så kommer ytterliggare ett program. Ytterliggare utökad applikation med textfält Textfält Ett textfält är helt enkelt ett litet en raders utrymme där användaren kan skriva in text eller programmet skriva ut text. För att skapa textfältet namn med utrymme för 12 tecken skriver man: JTextField textruta = new JTextField( 12 ); När sedan användaren t.ex. skrivit in sitt namn i fältet kan man läsa in namnet till programmet genom att anropa metoden gettext, man skriver alltså: namn = textruta.gettext( ); vi kan också skriva i fältet med metoden settext om vill med textruta.settext( Här står något roligt! ); För att t.ex. lägga till textfältet textruta skriver vi: add(textruta); Nu ska vi utöka applikationen ett textfält som vi kan skriva text i från både programmet och från tangentbordet när vi kör applikationen, och sen en knapp som heter Hälsa fint. Den första textsträngen har stylats lite. Ny kod är fetmarkerad. package testtextinwindow2; import java.awt.*; import java.awt.event.*; import javax.swing.*; class MyPanel extends JPanel implements ActionListener {//Till vår panel måste vi koppla en händelselyssnare, därav "implements // ActionListener" ovan. //Vi måste deklarera våra knappar JButton redbutton; JButton yellowbutton; JButton greenbutton; JButton greetingsbutton; JTextField textruta; //Vi måste skapa en egen konstruktor för vår panel, om ju körs endast //när vi skapar ett objekt av denna klass.vi vill ju att när vi //skapar panelen ska också knappar skapas. public MyPanel() { /PB Sida 4

//Skapa knapparna redbutton = new JButton("Rött"); yellowbutton = new JButton("Gult"); greenbutton = new JButton("Grönt"); greetingsbutton = new JButton("Hälsa fint!"); //Skapa textfältet textruta = new JTextField(30); textruta.settext(" Skriv in ditt namn här! "); //lägg till färgknapparna till det här panelobjektet add(redbutton); add(yellowbutton); add(greenbutton); //lägg till textfältet och hälsningsknappen add(textruta); add(greetingsbutton); //koppla på panelens händelselyssnare redbutton.addactionlistener(this); yellowbutton.addactionlistener(this); greenbutton.addactionlistener(this); greetingsbutton.addactionlistener(this); //Ifall något händer dvs vi klickar på någon av knapparna, så går ett //meddelande till till vår ActionListener.OM detta inträffar så måste //vi ju ta hand om detta och göra något. Vi skriver en metod för det. public void actionperformed(actionevent evt) { Object source = evt.getsource(); //hämta händelsekälla //Definiera en variabel som innehåller en färg Color color=getbackground(); //Testa vilken av knapparna vi tryckte på och //ge variabeln color en färg if (source==redbutton) color=color.red; else if (source==yellowbutton) color=color.yellow; else if (source==greenbutton) color=color.green; else if (source==greetingsbutton) { color=color.magenta; String namn=textruta.gettext(); String rad=" ** Tjenare "+namn+"!! ** "; textruta.settext(rad); setbackground(color); //sätt om färgen på aktuell panel repaint(); //rita om aktuell panel public void paintcomponent(graphics g) { // för att vara säker på att "super"-klassen gör sitt // anropar vi den metoden, innan vi skriver eller ritar super.paintcomponent(g); //skriv ut en textsträng, samt ange läget i avståndet från //övre vänstra hörnet i x-led åt höger och i y-led neråt Font myfont = new Font("SansSerif",Font.BOLD,16); g.setfont(myfont); g.drawstring(" Test av knappar och textfält! ", 50, 150); class TextInWindow extends JFrame { public TextInWindow() { settitle("textfält och knappar i vårt fönster"); Toolkit tk = Toolkit.getDefaultToolkit(); Dimension d = tk.getscreensize(); /PB Sida 5

int screenheight = d.height; int screenwidth = d.width; setsize(screenwidth/2,screenheight/2); //(bredd,höjd) setlocation(screenwidth/4, screenheight/4); MyPanel p = new MyPanel(); setvisible(true); setdefaultcloseoperation(exit_on_close); public class TestTextInWindow2 { public static void main(string args[]) { JFrame mywindow = new TextInWindow(); Ja, mycket kod blir det!! /PB Sida 6

Övningar Övning 1 Skriv in koden för den första applikationen (den som skriver en textsträng på skärmen) och få det att fungera. Samt försök häng med på vad koden betyder eller åtminstone vad de olika delarna gör. Övning 2 Skriv in (komplettera din tidigare kod) koden för den andra applikationen (den med de tre knapparna) och få det att fungera. Samt försök häng med på vad koden betyder eller åtminstone vad de olika delarna gör. Övning 3 Skriv in (komplettera din tidigare kod) koden för den sista applikationen (den med textfältet och ytterliggare en knapp) och få det att fungera. Samt försök häng med på vad koden betyder eller åtminstone vad de olika delarna gör. Övning 4 Utöka applikationen från förra övningen med fler textsträngar och fler knappar. Övning 5 Lek fritt med dessa komponenter. Eventuellt titta i boken och se om du kan förstå hur man fixar ytterliggare komponenter eller via Internet. /PB Sida 7