INF Våren Li' repe$sjon om Tråder og GUI. Stein Gjessing, Ins$tu' for informa$kk, Universitetet i Oslo. Ins$tu' for informa$kk

Like dokumenter
INF Våren Tråder. del 1. Stein Gjessing, Ins$tu' for informa$kk, Universitetet i Oslo. Ins$tu' for informa$kk

Inf Våren 2008 Tråder del 1 Parallelle programmer og felles data. Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

Oversikt. Inf Våren Parallelle programmer og felles data. Hva er parallelle programmer I I. Hva er parallelle programmer?

Stein Gjessing, Ins$tu' for informa$kk, Universitetet i Oslo

Stein Gjessing, Ins$tu' for informa$kk, Universitetet i Oslo

Stein Gjessing, Ins$tu' for informa$kk, Universitetet i Oslo

Stein Gjessing, Ins$tu' for informa$kk, Universitetet i Oslo

Vi lærte sist å lage vinduer. Om å lage et vindu. GUI (Graphical User Interface)-programmering. Inf GUI - del 2

INF1010. Grafisk brukergrensesni. med Swing og awt del 2. INF Grafisk brukergrensesni4 II

GUI - del 2. Stein Gjessing Inst for Informatikk Univ. i Oslo

INF1010. Grafisk brukergrensesni. med Swing og awt del 2

Vi lærte sist å lage vinduer. Om å lage et vindu. GUI (Graphical User Interface)-programmering. GUI - del 2

Inf 1010 GUI - del 2

Uke mars 2005 GUI - del 2. GUI (Graphical User Interface)-programmering

INF1010 Grafisk brukergrensesni3 med Swing og awt del 1 INF1010

Grafisk Brukergrensesnitt

Gjennomgang av eksamen H99

LO191D/LC191D Videregående programmering

Inf mars 2010 GUI del 2

import javax.swing.*; import java.awt.*;

INF1010, 21. februar Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

GUI («Graphical User Interface») del 2

Tråder i Java Parallelle programmmer og programbiter

Eksamen INF1010 V2009 Del B prøveeksamen V2010 Vekt 60 %

Sortering med tråder - Quicksort

Grafiske brukergrensesnitt med Swing og AWT

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

Stein Gjessing. Institutt for informatikk. Universitetet i Oslo. Institutt for informatikk

INF1010 våren januar. Objektorientering i Java

INF1010 våren 2006 Uke 19: 9. mai 2006 Et større eksempel: Solitaire (kabal)

INF1010 Grafisk brukergrensesni3 (GUI) med Swing/awt. del 1

Vi lærte sist å lage vinduer. Om å lage et vindu. GUI (Graphical User Interface)-programmering. Inf GUI - del 2

AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE

EKSAMEN. TILLATTE HJELPEMIDLER: Alle trykte og skrevne. INNFØRING MED PENN, evt. trykkblyant som gir gjennomslag

IN1010 våren januar. Objektorientering i Java

INF Notater. Veronika Heimsbakk 10. juni 2012

UNIVERSITETET I OSLO

1. Krav til klasseparametre 2. Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

INF1010 oversikt med

GUI-programmering, del 3 Vinduslyttere Dialogvinduer GUI-komponenten JTable Egne datamodellklasser. En oversikt over kapittel 19 i boka

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring AITeL

UNIVERSITETET I OSLO

JPanel. Komponent hieraki. Window/JWindow. Applet/JApplet. JDialog. JFrame

IN1010 våren Repetisjon av tråder. 15. mai 2018

INF1010. Grensesnittet Comparable<T>

TOD063 Datastrukturer og algoritmer

GUI («Graphical User Interface») del 2

INF1010 Tråder II 6. april 2016

AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE

Velkommen til. INF våren 2016

Avdeling for ingeniørutdanning Institutt for teknologi

Inf1010 oppgavesamling

INF1010 oversikt med. 23. mai Subklasser mm. Unntaksbehandling GUI Tråder. Stein Gjessing InsBtuC for informabkk Universitetet i Oslo

INF1010 Tråder J. Marit Nybakken Motivasjon. Å lage en tråd

INF2440 Prøveeksamen, løsningsforslag, 20 mai Arne Maus PSE, Inst. for informatikk

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

INF2100. Oppgaver 23. og 24. september 2010

INF2100. Oppgaver 26. september til 1. oktober 2007

INF våren 2017

INF1010 våren Grensesnitt

Synkronisering I. Kapittel 6. Tråd A. ferdig. t.varsle() u.vente() Tråd B. ferdig. tid

IN våren 2018 Tirsdag 16. januar

IN våren 2019 Onsdag 16. januar

UNIVERSITETET I OSLO

La oss begynne med en repetisjon av hva som skjer når du kjører Javaprogrammet

INF1010 våren Grensesnitt

< T extends Comparable<T> > Indre klasser mm. «Det du bør ha hørt om før oblig 4»

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

INF1010 våren 2017 Onsdag 25. januar. Litt om unntak i Java

INF1010 oversikt med

Dagens forelesning. Java 13. Rollefordeling (variant 1) Rollefordeling (variant 2) Design av større programmer : fordeling av roller.

6108 Programmering i Java. Leksjon 8. GUI: Grafisk brukergrensesnitt. Del 2: Roy M. Istad 2015

Eks 1: Binærtre Binærtretraversering Eks 2: Binærtre og stakk

Synkronisering II. Kapittel 7. Betingelse oppfylt (0) liste. tråd-deskriptor. venteliste. tråd-deskriptor. tråd-deskriptor.

2 Om statiske variable/konstanter og statiske metoder.

UNIVERSITETET I OSLO

AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE. Antall sider (Inkl forsiden): 8. Alle trykte og håndskrevne

OPPGAVE 5b og 8b Java Kode

INF1010, 15. januar time. Parametriserte klasser (generiske klasser) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

Løsningsforslag Test 2

INF1010 våren 2019 Onsdag 30. januar. Mer om unntak i Java (med litt repetisjon av I/O først)

Kapittel 15: Grafiske brukergrensesnitt. Del II

Tråder Repetisjon. 9. og 13. mai Tråder

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

INF1010 våren Grensesnitt (interface)

1 t:n'v'\ekode LO325E. Alle ~vne og trykte. GOd'"j(jent kalkulator

INF1010 våren 2018 tirsdag 23. januar

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2

Gjøre noe i hele treet = kalle på samme metode i alle objekten. Java datastruktur Klassestruktur

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

INF1010, 21. januar Klasser med parametre = Parametriserte klasser = Generiske klasser

Kapittel 8: Programutvikling

UNIVERSITETET I OSLO

Mål med kurset. Java i INF Dagens tema. GUI med Swing. Dokumentasjon

INF100 Institutt for informatikk Universitetet i Bergen Øving 5

Tråder Repetisjon. 9. og 13. mai Tråder

INF2100. Oppgaver 9. oktober 2012 C 100 X 10

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

INF2100. Oppgaver 6. og 11. oktober 2011 C 100 X 10

IN1010 våren 2018 Tirsdag 15. mai. Repetisjon av subklasser og tråder. Stein Gjessing Institutt for informatikk Universitetet i Oslo

Transkript:

INF1010 - Våren 2015 Li' repe$sjon om Tråder og GUI Stein Gjessing,, Universitetet i Oslo 1

GUI, tråder og hendelser Op-sys (Win, Linux,..) Ditt Program sin Event Dispatch Thread Hver ting brukeren gjør (flytter eller klikker musa, trykker på tastaturet...) gjør operativsystemet om til et objekt som sendes til GUI-programmet. GUI-et utføres av en tråd som heter Event Dispatch Thread (EDT). EDT behandler alle hendelsene (pakkene) en for en. Hver gang f.eks musa flyttes ett eneste punkt bortover genereres et nytt slikt objekt (køen kan forkortes) 2 2

EDTs oppgave Op-sys while (true) { <les neste objekt> < finn registrert lyttemetoder> <kall den med objektet som parameter> kall retur Ditt javaprogram 3 3

invoke later invokelater(runnable dorun) er en sta$c metode i SwingU$li$es lager en hendelse og sender den $l GUI- tråden, som så urører run- metoden i de'e Runnable- objektet når denne hendelsen blir behandlet. Java API: This method should be used when an applica$on thread needs to update the GUI. 4

En tråd som subklasse av Thread tråden MinTråd tråden; tråden = new MinTråd( ); tråden.start( ); start run <data> objekt av subklasse av Thread 5

En tråd som implementasjon av Runnable (delegering) tråden minrun Runnable minrun = new MinRun(); Thread tråden = new Thread(minRun); tråden.start( ); start objekt av klassen Thread run Objekt som implementerer grensesnittet Runnable <data> 6

Tre trafikklys styrt av tre tråder Laget av Judy Bishop i læreboka Java Gently Men inni er det ingen ting 7

Her er masse felles datastruktur og metoder for å tegne opp rammen rundt lysene og knappene nederst. main JFrame f = new Traffic(); f Traffic3- klassedatastruktur class SetOfLights er en indre klasse i class Traffic actionperformed if (event == newsetbutton) { lights[nlights] = new SetOfLights(area, lightsposition); lights[nlights].start();.... SetOfLights[] lights = new SetOfLights[3]; 0 1 2 SetOfLights objekt (en tråd) start run while (true) <tegn lys> SetOfLights objekt (en tråd) start run while (true) <tegn lys> SetOfLights objekt (en tråd) start run 8 while (true) <tegn lys> Traffic3- objekt

import java.awt.*; import java.awt.event.*; public class Traffic3 extends JFrame implements ActionListener, ItemListener { private JPanel area; private int lightsposition = 105; private static final int lightswidth = 150; private SetOfLights[] lights = new SetOfLights[3]; private int nlights = 0, setwanted = 0; private JTextField duration; private JComboBox colours; private int light; private JButton newsetbutton; private JButton walkbutton; private JButton closebutton; Alle data er skjult for omverdenen public Traffic3() { super("traffic Lights version 3 "); getcontentpane().add("north",new Label ("Savanna Traffic Light Simulation",Label.CENTER)); area = new JPanel(); area.addmouselistener(new MouseEvtHandler()); getcontentpane().add("center",area); JPanel buttons = new JPanel(); newsetbutton = new JButton("New Set"); newsetbutton.addactionlistener(this); buttons.add(newsetbutton); colours = new JComboBox (); colours.additem("red"); colours.additem("green"); colours.additem("yellow"); colours.additem("walk"); colours.seteditable(false); colours.additemlistener(this); light = 0; buttons.add(colours); buttons.add(new JLabel("Duration")); duration = new JTextField("", 4); duration.addactionlistener(this); buttons.add(duration); walkbutton = new JButton("Walk"); walkbutton.addactionlistener(this); buttons.add(walkbutton); closebutton = new JButton("Close"); closebutton.addactionlistener(this); buttons.add(closebutton); getcontentpane().add("south",buttons); 9 Et eget objekt som tar seg av museklikk

public void itemstatechanged(itemevent e) { String s = (String) e.getitem(); if (s.equals("red")) {light = 0; else if (s.equals("green")) {light = 1; else if (s.equals("yellow")) {light = 2; else if (s.equals("walk")) {light = 3; class MouseEvtHandler extends MouseAdapter { public void mousepressed(mouseevent e) { int n = e.getx() / lightswidth; if (n < nlights) setwanted = n; En egen klasse som tar seg av museklikk public static void main(string[] args) { JFrame f = new Traffic3(); f.setsize(450, 210); f.setvisible(true); f.addwindowlistener(new WindowAdapter () { public void windowclosing(windowevent e) { System.exit(0); ); // slutt main En annen måte å sørge for at programmet terminerer normalt Sett den fargen som skal forandres Nytt lys Max tre lys Lyttemetoden ligger i hoved-objektet: public void actionperformed(actionevent e) { Object event = e.getsource(); if (event == newsetbutton) { lights[nlights] = new SetOfLights(area, lightsposition); lights[nlights].start(); lightsposition += lightswidth; nlights++; if (nlights = = 3) newsetbutton.setenabled(false); else if (event = = walkbutton) { lights[setwanted].walk = true; else if (event = = duration) { lights[setwanted].time[light]= Integer.parseInt(duration.getText()); else if (event = = closebutton) { for (int i = 0; i<nlights; i++) lights[i].stop(); setvisible(false); dispose(); System.exit(0); // slutt actionperformed 10

Trådene class SetOfLights extends Thread { private int red = 0; private JPanel area; private int x; private int light; boolean walk = false; boolean walkon = false; int time [] = {500, 500, 500, 500; Tråden(e)s tilstand Konstruere en tråd: public SetOfLights(JPanel c, int x) { area = c; this.x = x; Selve tråden(e) public void run( ) { while (true) { for (int light = 0; light < 3; light++) { if (light == red & walk) { walkon = false; for (int i = 0; i < 11; i++) { draw(light); try { sleep(time[3]); catch (InterruptedException e) { walkon =!walkon; walk = false; else { draw(light); try { sleep(time[light]); catch (InterruptedException e) { // slutt while (true) // slutt run 11