GUI /ll tusen. GUI /ll tusen. Java/Swing. Top Level Containers. General Purpose Containers. GrIP-vt2010-GUI-programmering Cristian Bogdan

Relevanta dokument
GUI-programmering. Gustav Taxén Martin Berglund DH2640 Grafik och Interaktionsprogrammering VT 2008

Frameworks. GUI till tusen. GUI till tusen. Sampling architectures. Inmatningstyper

Fönstersystem. Objektorientering och händelsebaserad programmering. Applikation. Interaktionstoolkit. Händelsehanterare och grafiktoolkit

GUI-programmering. Gustav Taxén

Objektorientering i allmänhet

Objektorientering och händelsebaserad programmering. Gustav Taxén

Lektion Händelsehanterare

Vässa kraven och förbättra samarbetet med hjälp av Behaviour Driven Development Anna Fallqvist Eriksson

Vad kännetecknar en god klass. Vad kännetecknar en god klass. F12 Nested & Inner Classes

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

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

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

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

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

Beijer Electronics AB 2000, MA00336A,

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

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

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

Model View. View Controller. Model View Controller. Observer. GrIP-vt2010-GUI-programmering Cristian Bogdan

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

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

Frames, menyer och GUI-program

Support Manual HoistLocatel Electronic Locks

Schenker Privpak AB Telefon VAT Nr. SE Schenker ABs ansvarsbestämmelser, identiska med Box 905 Faxnr Säte: Borås

Recitation 4. 2-D arrays. Exceptions

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.

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

2.1 Installation of driver using Internet Installation of driver from disk... 3

Komma igång med Adobe Presenter ver.7

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

l uppgiftsformulering l algoritmkonstruktion l verifikation l kodning l testning och avlusning l validering l dokumentering l underhœll Kapitel 2

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

Observer Pattern och MVC. Objekt-orienterad programmering och design Alex Gerdes, 2016

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

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

Design och konstruktion av grafiska gränssnitt

Testramverk och Model based testing med java i praktiken

Observer Pattern och MVC. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Preschool Kindergarten

Föreläsning 12. Länkade listor

Laboration 3 GUI-programmering

Webbreg öppen: 26/ /

Java-concept och Swing. Swing low, sweet chariot

Föreläsning 8. Designmönster

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Tentamen Programmering fortsättningskurs DIT950

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

Styrteknik 7.5 hp distans: E-1000 och E-Designer

Webbregistrering pa kurs och termin

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

Classes och Interfaces, Objects och References, Initialization

Modern webbutveckling. av Robert Welin-Berger

12.6 Heat equation, Wave equation

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

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

Schenker Privpak AB Telefon VAT Nr. SE Schenker ABs ansvarsbestämmelser, identiska med Box 905 Faxnr Säte: Borås

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

DAT043 - föreläsning 8

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Laboration 2 Datastrukturer En liten uppgift Frågor

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

Tentamen i EDAF25. 1 juni Skrivtid: Skriv inte med färgpenna enda tillåtna färg är svart/blyerts.

Tentamen FYTA11 Javaprogrammering

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

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

Lösningsförslag till tentamen i EDAF25 Objektorienterad modellering och design Helsingborg

The Last Adventure. Innehåll. Objektorientering. Språket Java. Java - Paket. Java - synlighet. Den sista lektionen. Repetition.

Michael Q. Jones & Matt B. Pedersen University of Nevada Las Vegas

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Lösningar till tentamen i EDAF25

Tentamen. DD2385 Programutvecklingsteknik vt 2014 Måndagen den 2 juni 2014 kl Hjälpmedel: penna, suddgummi, linjal

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

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet.

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

Inlupp1 - kommentarer. Uppgift 2. Uppgift 2

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

Att skriva till och läsa från terminalfönstret

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

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

Principles of subclasses. Objekt-orienterad programmering och design Alex Gerdes, 2018

Lösningsförslag till exempeltenta 2

Föreläsning 8: Exempel och problemlösning

Innehåll. dynamisk bindning. och programmering CRC) u Arv, polymorfi och

Fönsterhantering, grafik

Omentamen FYTA11 Javaprogrammering

Länkade strukturer. (del 2)

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

Designmönster/Design patterns

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

Observer Pattern och MVC. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017

Lösningsförslag till tentamen

LULEÅ TEKNISKA UNIVERSITET

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

DI-institutionen Sid 1 av 5 Hans-Edy Mårtensson Sten Sundin Micael Karlsson

Model View Controller. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

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

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

Observer Pa*ern och MVC. Objekt-orienterad programmering och design Alex Gerdes, 2018

Transkript:

GUI programmering Cristian Bogdan cristi@kth.se GUI /ll tusen Win32 API (C) MFC (C++) VCL/CLX (C++/Delphi) wxwidgets (C++) Qt (C++/Java) GTK+ (C).NET Framework (VB/C++/C#) Java AWT/Swing/SWT (Java) osv DH2640 Grafik och Interaktionsprogrammering VT 2010 GUI /ll tusen Vi ska /Ua på Java Swing Mycket gemensamt med andra GUI system, ibland under andra namn Bra uppsäuning komponenter Pla\ormsoberoende Bra designat enligt designmönster Gra/s utvecklingsmiljö (NetBeans) och mycket dokumenta/on från Sun Java/Swing GränssniU i Java (och de flesta andra GUI system) är hierarkiska. Man börjar med en s.k. Top Level Container, och lägger /ll komponenter i den. Vissa komponenter är också containers och kan innehålla andra komponenter. Man specificerar dimensioner och posi/on för varje komponent explicit eller via s.k. Layout Managers. Top Level Containers General Purpose Containers Varje komponent kan bara befinna sig på en plats i hierarkin. Varje Top Level Component har en Content Pane som innehåller hierarkin. Man kan lägga /ll en menu bar (menyrad) ovanför sin content pane.

Special Purpose Containers Basic Controls Uneditable Info Displays FormaUed Info Displays Typically hve an elaborate model which must be populated by the applica/on Containers, Controls och Displays Top Level Containers: Applet, Dialog, Frame. General Purpose Containers: Panel, Scroll Pane, Split Pane, Tabbed Pane, Tool Bar. Special Purpose Containers: Internal frame, Layered Pane, Root Pane. Basic Controls: BuUons, Lists, Menus, etc. Uneditable Info Displays: Label, Progress Bar, Tool Tip. InteracCve Displays of Highly FormaFed InformaCon: File Chooser, Color Chooser, etc. Kan vi göra något åt utseendet? Ja, det kan vi! Swing kan få na/ve look & feel om vi lägger /ll några rader kod // Get the native look and feel class name String nativelf = UIManager.getSystemLookAndFeelClassName(); // Install the look and feel try { UIManager.setLookAndFeel(nativeLF); catch(exception e) {

Layout Managers Det är ohast en nackdel au specificera posi/on och dimension för komponenter explicit. Om användaren t.ex. ändrar fönstrets storlek kommer inte storleken på komponenterna au hänga med. Layout managers hjälper en au räkna ut posi/oner och dimensioner dynamiskt! Man kan skapa egna layout managers. Inmatningstyper Request Lämna över kontrollen /ll användaren och vänta på au något sker. Exempel: terminal i Unix. Sampling / polling Läsa av värdet hos en enhet så oha som möjligt. Exempel: Spela in ljud från ljudkort Sampling architectures the applica/on needs to ask whether there are new events read/write data and con/nue execu/on leads ohen to ac/ve loops in the applica/ons Interrupt based architectures the applica/on registers to be no/fied when a device state changes, and it provides an interrupt handler procedure the opera/ng system calls the procedure when the device state changes leads to complicated asynchronous situa/ons Event based architectures the opera/ng system takes care of the changes in the device states an event object (instance) is generated for every state change contains informa/on about the device change (e.g. the leh mouse buuon was pressed at /me T at the 100, 200 coordinates) the applica/ons register methods to be called when a certain event occurs (callback, see Inversion of Control)

Event based architectures (cont) Inmatningstyper: Events aher its genera/on, the event is placed in an event queue in another thread, an event dispatcher takes the events from the queue and calls the registered callback rou/nes Systemet placerar förändringar i en kö. Beta av kön vid lämpliga /llfällen. Skicka en s.k. eventinstans med informa/on om varje förändring /ll alla callbacks som är "intresserade". Inenhet Interrupt-subrutin Eventkö Dispatcher Callbacklista Callback Events i Java Man registrerar Listeners som var och en "lyssnar" på en viss typ av event Varje metod i en listener motsvarar något som hänt hos enheten i fråga Events i Java Event listener implementa/on package tests; import java.awt.*; import java.awt.event.*; class MyWindowListener implements WindowListener { public void windowopened(windowevent e) { public void windowclosed(windowevent e) { public void windowiconified(windowevent e) { public void windowdeiconified(windowevent e) { public void windowactivated(windowevent e) { public void windowdeactivated(windowevent e) { public class MyFrame2 extends Frame { Frame frame = new MyFrame2(); frame.addwindowlistener(new MyWindowListener()); only one class package MyTests; import java.awt.*; import java.awt.event.*; public class MyFrame1 extends Frame implements WindowListener{ public void windowopened(windowevent e) { public void windowclosed(windowevent e) { public void windowiconified(windowevent e) { public void windowdeiconified(windowevent e) { public void windowactivated(windowevent e) { public void windowdeactivated(windowevent e) { MyFrame1 frame = new MyFrame1(); frame.addwindowlistener(frame);

Adaptors Förenklar hanteringen av events Varje adaptor implementerar eu Listenerinterface, men alla metoderna är tomma Om man subklassar en adaptor behöver man alltså bara skriva precis den kod som behövs Adaptors class MyWindowAdapter extends WindowAdapter { public class MyFrame3 extends Frame { Frame frame = new MyFrame3(); frame.addwindowlistener(new MyWindowAdapter());...eller med anonym subklass public class MyFrame4 extends Frame { Frame frame = new MyFrame4(); frame.addwindowlistener(new WindowAdapter (){ ); Event listening alterna/ves Separate class listener Inner class listener Component (subclass of e.g. Frame, BuUon) class implements listener Anonymous inner class implements listener Adapter as separate class Adapter as inner class Anonymous inner class extends adapter public class PlayerSteeringBehaviour implements Behaviour, KeyListener { protected boolean steering = false; protected float direction = 1.0f; public void keypressed(keyevent e) { if (e.getkeycode() == 37) { // Cursor left steering = true; direction = -1.0f; if (e.getkeycode() == 39) { // Cursor right steering = true; direction = 1.0f; Avancerade gränssniu Om man bygger mer avancerade program behövs eu bäure säu au hantera användargränssniuet De flesta system bygger på eu designmönster som heter Controller (eller bara ) public void keyreleased(keyevent e) { steering = false;... public void keytyped(keyevent e) {

En design pauern för användargränssniu. Utvecklades under sent 70 tal för Smalltalk på Xeroxmaskiner Example: a drawing editor with a toolbar Selec/on, circle drawing, rectangle drawing Each tool interprets a given sequence of mouse ac/ons differently! Same ac/on, different seman/cs Shapes created can be viewed on screen Or sent as PostScript code to a printer Add circle Drawing view Attach to view Controller Circle drawing Mouse events Om gränssnitten mellan de tre komponenterna inte ändras kan vilken som helst av dem bytas ut! Add rectangle Attach to view Controller Rectangle drawing Remove shape Resize shape Controller Selection Attach to view Drawing view Mouse events Drawing view Mouse events PostScript view No controller attached, you can t interact with a printout But possible to keep an updated print preview Both views can be active at the same time