GUI Nyckelbeståndsdelar

Relevanta dokument
Undantagshantering. Fördjupad Java. Fel. Undantag. Fånga Undantag. Grupper av Undantag

Undantagshantering. Fördjupad Java. Undantag. Fel. Grupper av Undantag. Fånga Undantag

Fördjupad Java. Undantagshantering. Fel

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

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

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

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

Mer om grafiska komponenter. Händelsestyrda program

Lab5 för prgmedcl04 Grafik

Händelsestyrda program

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

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

Undantag. Engelska: exceptions. Skansholm: exceptionella händelser

Klassen javax.swing.timer

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

OOP Objekt-orienterad programmering

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

OOP Objekt-orienterad programmering

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

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

Laboration 15 Grafiskt användargränssnitt

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

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

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

Ingenjörsfirman Stéen Java Sida 1 av 1

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

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

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

Språkkonventioner och redigering av tal.

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

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

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

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

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

Objektorienterad programmering i Java. Föreläsning 5 Kort om Java-Applets

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

Grafiska komponenter.

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

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

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

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

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

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

FactoryCast HMI. Premium & Quantum PLC. Applets

OOP Objekt-orienterad programmering

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Frames, menyer och GUI-program

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

Översikt. Skriva och läsa data. Kontrollflöde. Två sorters loopar. For-loop. For-loop

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

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

Felhantering TDDD78, TDDE30, 729A

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

Applets med komponenter

Javas Exceptions. DD2385 Programutvecklingsteknik Fler bilder till föreläsning 7 23/ Kort om Javas Exceptions Trådar i Java

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

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

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

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel

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

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Tentamen , Grundläggande programmering i Java

Java-concept och Swing. Swing low, sweet chariot

Föreläsning 3 Innehåll. Generiska klasser. Icke-generisk lista ArrayList, skiss av implementering. Icke-generisk lista Risk för fel

Programstyrd / händelsestyrd

Klasser för grafik och bildhantering

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

Klasshierarkier - repetition

Klasshierarkier. Klasser kan byggas på redan definierade klasser

Surfning. Webbklienter och webbservrar. Specialskrivna webbservrar. Kommunikation med sockets

Testning av program. Verklig modell för programutveckling

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

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

Att prova på en enkel Applet och att lära sig olika sätt att hämta data från tangentbordet. Du får även prova på att skapa din första riktiga klass.

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

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

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

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

Arv och Grafiska Användargränssnitt

Grafiska användargränssnitt i Java

Lösningsförslag till tentamen

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

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Objektorienterad Programmering (TDDC77)

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

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Objektorienterad programmering E. Telefonboken, än en gång. Gränssnitt. Telefonboken med gränssnitt specificerat, del 1.

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

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

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Objektorienterad Programmering (TDDC77)

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

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

Laboration 4: Game of Life

Classes och Interfaces, Objects och References, Initialization

Transkript:

GUI Nyckelbeståndsdelar Nyckelbeståndsdelar i ett grafiskt användargränssnitt i Java: GUI komponenter Layout hanterare (-manager) Händelsehantering (event processing) GUI komponenter är de element på skärmen som påverkas med mus och tangentbord Layout hanterare bestämmer hur komponenter organiseras på skärmen Events signalerar att interaktion har skett Programmeringsmetodik -Java 200

AWT Programmeringsmetodik -Java 201

Händelsestyrd Programmering Interaktionen i ett GUI är inte uppstyrd som t ex i laboration 1 Användaren kan interagera med valfri komponent i valfria kombinationer Ordningen av händelser kan inte förutbestämmas Komponenter genererar händelser om det händer någonting Programmeringsmetodik -Java 202

Händelsestyrd Programmering Olika komponenter genererar olika händelser: ActionEvent Button List MenuItem TextField Adjustment Event Scrollbar ItemEvent Checkbox Choice List... Programmeringsmetodik -Java 203

Händelsehantering Programmet måste kunna reagera på alla händelser som GUIet kan utlösa Speciella objekt, så kallade Listeners (lyssnare) väntar på händelser Om en händelse inträffar exekverar lyssnaren metoden som motsvarar händelsen: Programmeringsmetodik -Java 204

Klasshierarki för händelser Programmeringsmetodik -Java 205

Händelsehantering ActionListener actionperformed() AdjustmentListener adjustmentvaluechanged() ItemListener itemstatechanged() Mouse Listener mouseclicked() mouseentered() mouseexited() mousepressed() mousereleased() Alla metoder får händelsen som parameter Noggrann analys av händelsen är möjligt Programmeringsmetodik -Java 206

GUI Programmet GUI programmet består av: Koden som bygger upp GUIet och visar det för användaren Koden för lyssnare som väntar på händelser Koden som skall exekveras när ett händelse inträffar Lyssnare måste implementera ett listener interface listener interface för varje händelsetyp, t ex ActionEvent TextEvent MouseEvent Programmeringsmetodik -Java 207

Lyssnare I interfacet finns metoderna som måste realiseras för att hantera en viss typ av händelse Lyssnarna kopplas sen till GUI komponenter (och prenumererar på deras händelser) Om komponenten genererar en händelse exekveras motsvarande metod i lyssnaren Programmeringsmetodik -Java 208

Flera Lyssnare En lyssnare får implementera flera interface En lyssnare får kopplas till flera komponenter En komponent får ha flera lyssnare Varje klass kan lyssna till många eventtyper Programmeringsmetodik -Java 209

GUI Programöversikt Huvudprogrammet Instantierar GUIet (med sig själv som parameter) Implementerar aktioner till alla händelser GUIet Har konstruktor som tar huvudprogrammet som parameter koppling Instantierar lyssnare (med huvudprogrammet som parameter) Skapar och sätter ihop komponenterna Lyssnare Implementerar ett eller flera interface Anropar metoden i huvudprogrammet som implementerar aktionen till händelsen Programmeringsmetodik -Java 210

Container En container grupperar GUI komponenter Containrar är också komponenter, men inte tvärtom Alla GUI komponenter måste placeras i en container (annars kan de inte visas) Exempel på container klasser är tex Applet, Frame och Panel Knappar osv. kan visas i en applet Alla containrar har en Layout Manager som lägger fast hur komponenterna i containern organiseras Programmeringsmetodik -Java 211

Label En Label (etikett) är en statisk textrad En label kan inte selekteras eller modifieras av användaren Hanteringen av labels stöds av klassen Label (JLabel) Programmeringsmetodik -Java 212

Knappar Det finns fyra olika knapptyper: Push buttons (tryckknapp) Choice buttons (urvalsknappar) Checkbox buttons Radio buttons En tryckknapp är en vanlig knapp som kan tryckas (och sen händer nåt) Kolla Button (JButton) klassen för detaljer Programmeringsmetodik -Java 213

Knappar En urvalsknapp visar en lista med valmöjligheter när den trycks Kolla Choice (JComboBox) klassen för detaljer En Checkbox button kan vara från eller till Kolla Checkbox (JCheckbox) klassen för detaljer Programmeringsmetodik -Java 214

Knappar Radio buttons är en grupp av till/från knappar där bara en får vara vald Om en knapp selekteras byter de andra automatiskt till från-läget Kolla Checkbox och CheckboxGroup (JRadioButton &ButtonGroup) klasserna för detaljer Programmeringsmetodik -Java 215

Knappar Se Quotes.java [s. 419--423] för ett exempel med alla knapptyper Programmeringsmetodik -Java 216

FlowLayout Komponenter ordnas från vänster till höger i översta raden Om raden är full påbörjas en ny rad Komponenterna centreras i varje rad Programmeraren kan specificera mellanrum mellan komponenter och rader FlowLayout är default för panels och applets Programmeringsmetodik -Java 217

GridLayout Komponenter ordnas i rader och kolumner Alla celler har samma storlek I varje cell ryms precis en komponent Cellerna ifylls från vänster till höger och topdown Programmeringsmetodik -Java 218

BorderLayout North West Center East South Storlek av områdena beror på komponenterna som finns där (de får även vara tomma) Default för Frame och Window Ex för att lägga till en komponent: add(component1,borderlayout.center); Programmeringsmetodik -Java 219

BoxLayout En BoxLayout organiserar komponenterna antingen horisontellt (i en rad) eller vertikalt (i en kolumn) Särskilda tomma områden kan läggas till för att så att man får det mellanrum mellan komponenterna som man vill Genom att kombinera flera containers som använder sig av box layout, kan man skapa många olika utplaceringar av komponenterna Programmeringsmetodik -Java 220

Applets Laddas över nätverket Körs i en browser Säkerhetsaspekter Metoder Applets Programmeringsmetodik -Java 221

En Applet är en Component Programmeringsmetodik -Java 222

En Applet körs i en browser Browsern (Netscape, Explorer etc) laddar en applet över nätet när den hittar en <APPLET>-tag Tillhandahåller en grafisk miljö Skapar ett objekt av appletens klass tillåter inte vissa operationer av säkerhetsskäl Kan också köras i appletviewer Programmeringsmetodik -Java 223

Applets på nätet Programmeringsmetodik -Java 224

En applets livscykel Skapas av browsern Initieras endast en gång (är det meningen )! Startas varje gång sidan visas Stoppas när sidan lämnas Final cleanup när sidan tas bort ur minnet Programmeringsmetodik -Java 225

En applets anatomi public void init() public void start() public void stop() public void destroy(); public void paint(graphics g) men normalt ingen konstuktor! Programmeringsmetodik -Java 226

init() Initiering som inte tar så lång tid Innehåller normalt koden som skulle ha lagts i konstruktorn När konstruktorn körs är appleten inte garanterad en korrekt omgivning. Använd inte konstruktorer för applets Programmeringsmetodik -Java 227

start() Anropas varje gång användaren bläddrar fram till sidan Utför jobbet eller (troligare) startar en tråd (Thread) Programmeringsmetodik -Java 228

stop() Om start omdefinierats så är det bäst att ta med stop också Anropas när användaren bläddrar bort från sidan Stoppar beräkningar trådar animeringar (ingen kan se sidan ändå) Programmeringsmetodik -Java 229

destroy() Behöver normalt inte omdefinieras Stop tar hand om avslutningen destroy anropas innan appleten tas bort ur minnet Programmeringsmetodik -Java 230

paint(graphics g) Samma som paint i Frame sköter om all grafik Anropas via repaint Anropas från update som kan definieras om för bättre prestanda (dubbelbuffring) Programmeringsmetodik -Java 231

import java.awt.*; import java.applet.*; En liten applet public class LitenApplet extends Applet { Label field; public void init() { field= new Label("Hej!"); setlayout(new java.awt.flowlayout()); add(field); validate(); } } Programmeringsmetodik -Java 232

Doodle Doodle.java [s. 367-370] Programmeringsmetodik -Java 233

Vad applets inte kan En Applet kan inte ladda bibliotek eller native methods läsa eller skriva filer på klienten nätverksanslutningar annat än till sin egen server starta program på klienten läsa vissa systemegenskaper Applet fönster ser annorlunda ut Programmeringsmetodik -Java 234

Vad applets kan som inte En Applet kan applications kan spela ljudfiler (från och med Java 1.2 kan även applikationer detta) visa html-dokument prata med andra applets på samma sida Applets som laddas lokalt har inga begränsningar (eller behöver i alla fall inte ha det) Programmeringsmetodik -Java 235

Anrop <APPLET CODE=AppletSubclass.class WIDTH=anInt HEIGTH=anInt> </APPLET> <APPLET CODE= AppletSubclass.class ARCHIVE= file1, file2 WIDTH=anInt HEIGTH=anInt> </APPLET> Programmeringsmetodik -Java 236

Parametrar <APPLET CODE=AppletButton.class CODEBASE=example WIDTH=350 HEIGTH=60> <PARAM NAME=antal VALUE= 25 > <PARAM NAME=titel VALUE= Vi provar! > </APPLET> String title=getparameter( titel ); Programmeringsmetodik -Java 237

JukeBox Se JukeBox [s. 425-428] Programmeringsmetodik -Java 238

Exceptions Ett undantag (exception) är ett objekt som beskriver ett ovanligt eller felaktig situation Exceptions kastas av ett program, och kan fångas och hanteras av en annan del av programmet Ett program kan därför separeras i normalt programflöde och exception programflöde Ett fel (error) representeras också som ett objekt i Java, men representerar ofta en situation som inte går att återhämta sig ifrån och skall inte försöka hanteras Programmeringsmetodik -Java 239

Exceptions Ett program kan kan hantera ett exception på ett av följande tre sätt: Strunta i det Hantera det där det inträffar Hantera det på ett annat ställe i programmet Programmeringsmetodik -Java 240

Ignorerade undantag Om ett undantag ignoreras av programmet kommer programmet att avslutas och producera ett felmeddelande. Meddelandet innehåller en anropssekvens (call stack trace) som indikerar på vilken rad som undantaget inträffade. Anropssekvensen visar också vilken sekvens av metodanrop som ledde fram till exekveringen av raden som gav upphov till undantaget. Se Zero.java (s. 379) Programmeringsmetodik -Java 241

Hantera undantag lokalt För att hantera ett undantag där det inträffar så omsluter man satsen som kan generera undantaget I ett try block Ett try-block följs av ett eller flera catch satser, som innehåller kod för att hantera undantaget Varje catch-block har en typ av undantag associerade till sig. När ett undantag inträffar fortsätter programmet att exekvera det första catch blocket som har en matchande undantags typ. Programmeringsmetodik -Java 242

finally Ett try-block kan också följas av ett blockmarkerat av det reserverade ordet finally Om inget undantag genereras exekveras koden i finally-blocket efter att alla satser i try-blocket exekverats. Om ett undantag inträffar så exekveras koden i finally blocket efter att att satserna i matchande catch block exekverats. Programmeringsmetodik -Java 243

Hantering någon annanstans Om det inte är lämpligt att hantera undantaget där det inträffar kan det hanteras på en högre nivå. Undantag skickas (propagate) upp genom metodanrops hierarkin tills dess att de hanteras eller når den yttersta nivån Ett try-block som innehåller ett anrop till en metod som kan generera ett undantag kan användas för att fånga undantaget. Se Propagation.java (s.384-385) Programmeringsmetodik -Java 244

Egna undantag Man kan definiera egna undantag genom att ärva från någon av undantagsklasserna Exceptions kastas med hjälp av throw-satsen Throw-satsen finns i normala fall i en if-sats som kollar ifall undantaget skall kastas. Se CreatingExceptions.java (s. 388) Programmeringsmetodik -Java 245

Kontrollerade undantag Ett undantag är antingen kontrollerat(checked) eller okontrollerat (unchecked) Ett kontrollerat undantag kan endast kastas i ett try-block eller i en metod som explicit säger att den kastar detta undantag. Kompilatorn kommer att klaga om ett kontrollerat undantag inte hanteras korrekt. Ett okontrollerat undantag kräver ingen särskild hantering, men kan hanteras på samma sätt. Okontrollerade undantag är underklasser till Error eller RunTimeException. Övriga är kontrollerade. Programmeringsmetodik -Java 246

Strömmar Filhantering, utskrifter, inläsning m.m. hanteras i Java med s.k. strömmar (streams). Strömmar kan kopplas ihop som kedjor för att anpassa funktionaliteten efter sina egna behov. Finns två klasser av strömmar: bitströmmar - Ström för i huvudsak binärt data teckenströmmar - Ström för tecken och textsträngar Programmeringsmetodik -Java 247

Bitströmmar Alla bitströmmar är härledda från InputStream - ström för läsning OutputStream - ström för skrivning. Några vanliga bitströmmar är: FileInputStream BufferdInputStream ObjectInputStream Och motsvarande för OutputStream och dessutom PrintStream Programmeringsmetodik -Java 248

Teckenströmmar Teckenströmmar är härledda från: Reader -ström för läsning Writer - ström för skrivning Några vanliga teckenströmmar är: FileReader BufferedReader Och motsvarande för Writer och dessutom PrintWriter Programmeringsmetodik -Java 249

Exempel Öppna en textfil och skriva text till den // Öppna filen och skapa en ström till den. FileWriter fw = new FileWriter("MinFil.txt"); // För effektivitet använd en buffrad ström // och koppla den till filströmmen. BufferedWriter bw = new BufferedWriter(fw); // En anpassad ström för skriving är: PrintWriter pw = new PrintWriter(bw); // Skriv till filen. pw.println("innehåll i min första Java-fil"); // Stäng filen pw.close(); Programmeringsmetodik -Java 250

in, out, err I klassen System finns färdiga strömmar System.in - Läsning från tangentbordet (InputStream) System.out - Skrivning till skärm (PrintStream) System.err - Felmeddelanden (PrintStream) Koppla bit och teckenströmmar InputStreamReader isr = new InputStreamReader(System.in); BufferedReader stdin = new BufferedReader(isr); String s = stdin.readline(); Programmeringsmetodik -Java 251

Serialisering Objekt serialisering (Object serialization) är att spara ett objekt och dess tillstånd så att det kan användas senare i tex ett annat program Objekt serialisering sker med hjälp av klasserna ObjectOutputStream och ObjectInputStream Serialisering tar hänsyn till eventuella andra objekt som refereras av objektet som serialiseras och sparar dem också. Klassen måste implementera någon av gränssnitten Serializable eller Externalizable Programmeringsmetodik -Java 252

IO och Exceptions De flesta metoderna som har med strömmar att göra kastar undantag som måste hanteras Undantagen är i de flesta fall av typen IOException t.ex. FileNotFoundException Exempel: try { FileWriter fw = new FileWriter("MinFil.txt");... } catch(filenotfoundexception e) { System.err.println("MinFil.txt kunde inte öppnas"); } catch(ioexception e) { System.err.println("Följande fel inträffade: "+e); } Programmeringsmetodik -Java 253