Grafiska användargränssnitt i Java

Relevanta dokument
Grafiska användargränssnitt i Java

Grafiska användargränssnitt i Java

Grafiska användargränssnitt i Java

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

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

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

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

TDDD78, TDDE30, 729A Grafik: Att "rita" egna komponenter

1 Grafiska komponenter

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

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

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

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

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

Mer om grafiska komponenter. Händelsestyrda program

Lab5 för prgmedcl04 Grafik

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

GeoGebra i matematikundervisningen - Inspirationsdagar för gymnasielärare. Karlstads universitet april. Liten introduktionsguide för nybörjare

Motivation. Programmeringsuppgift: En första ansats: Lagra info om anställda Håll reda på varje anställds närmaste chef. som också är en anställd!

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

Skärmtangentbordet som är enkelt att använda både med mus, touchskärmar och interaktiva whiteboards

Java-concept och Swing. Swing low, sweet chariot

Institutionen för matematik och datavetenskap Karlstads universitet. GeoGebra. ett digitalt verktyg för framtidens matematikundervisning

Sophia Prosell DREAM WEAVER SKAPA OCH PUBLICERA EFFEKTIVA WEBBSIDOR

WWAAC Layout Editor. 1. Standard för knapp (kolla att fliken Standard för knapp är vald)

TDDD78, TDDE30, 729A Typhierarkier del 2 Vad krävs? Hur fungerar det?

Objektorientering: Lagring och livstid

Gränssnitt för FakeGranska. Lars Mattsson

Översikt Föreläsning 1. Trivicalc. Vad är trivicalc? En cell. Områden på skärmen. SMD168/SMD135 Fredrik Bengtsson

Rullningslisten. Klicka på rullningslistpilar (pil upp eller pil ner) 1 för att förflytta dig i önskad riktning, en liten bit i taget.

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

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

Lathund - webbsidor och filer

Lathund CallCenter 2010

3.5 Visuell programmering

Storleksförändra figurer och bildobjekt - Word 2007 / 2010

Programmering. Scratch - grundövningar

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

Lektion Händelsehanterare

OOP Objekt-orienterad programmering

Objektorienterad programmering Föreläsning 15. Grafiska användargränssnitt (GUI Graphical User Interface)

Design av användargränssnitt

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

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

TUTORIAL: SAMLING & KONSOLL

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

Wizkeys skärmtangentbord

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

TDDD78, TDDE30, 729A Typhierarkier del 3 När och hur vill vi använda dem? Några Best Practices

A. Datorn från grunden

Starta ett fönster... Hur håller tkinter reda på musklick? Olika sätt att organisera fönsterinnehåll. Och för att placera våra widgets

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

Objektorientering: Lagring, räckvidd och livstid

Att använda talsyntes i en lässituation.

1. Definiera klassvariabel. 2. Instansvariabel för klass. Selektera klass i Browsern och tryck på statics. Definiera protokollnamn, Protocol->Add...

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

Grundläggande Ordbehandling Microsoft Word

Windows Forms Winstrand Development

Design av användargränssnitt. Vad behöver man veta? Generella designprinciper. Vad är ett användargränssnitt? Några egenskaper hos människan

Användarmanual WebNailer. 19 januari 2004

Classes och Interfaces, Objects och References, Initialization

Objektorienterad Programkonstruktion. Föreläsning 6 23 nov 2015

Felhantering TDDD78, TDDE30, 729A

Beskrivning av gesällprov RMI Chat Mikael Rydmark

Grafiska användargränssitt och händelsehantering

Arv och Grafiska Användargränssnitt

INSTALLATION...3 ATT KOMMA IGÅNG...3 PROGRAMMETS DESIGN...4 LÄGGA TILL TABELL...4 EDITERA TABELL...4 EDITERA RELATION...5 SPARA OCH AVSLUTA...

Verktygsfält. Hantering av webbkarta Grundinstruktion. Sida 1 av 6. De olika verktygen och delarna förklaras i detalj längre ner i dokumentet.

Händelsestyrda program

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

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

OptiWay GIS Vind. Manual - Version OptiWay

Läsa med stöd av talsyntes

Uppgift 18 Eget programval

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Vad påverkar designen?

Slutrapport: Informationsvisualisering av släktträd

OOP Objekt-orienterad programmering

Publicera taltidningen

BuildingPortalSuite. Beskrivning BuildingPortalSuite - Beskrivning

LabelLogic. Bruksanvisning. Innehåll. Label Choices. Data Library. Print Centre. Design Centre

Optisk bänk En Virtuell Applet Laboration

Manual TorTalk Mac 1.0

Lathund till Publisher TEXT. Skriva text. Importera text. Infoga text. Dra och släpp

1. Uppdateringsmodul (CMS)

Inställningar för mus och tangentbord i Windows 7

Fyra i rad Javaprojekt inom TDDC32

Joomla CMS Del 2 av 2

ALEPH ver. 16 Introduktion

Handbok Spectacle. Boudhayan Gupta Boudhayan Gupta Översättare: Stefan Asserhäll

Vad utmärker ett bra användargränssnitt?

Anpassning av Windows XP

Grunderna i Excel. Identifiera gränssnittsobjekt som du kan använda för att utföra vanliga uppgifter.

Programmets startmeny ser ut så här. För att få fram menyerna Avsluta, Inställningar och Användare måste du föra markören upp till det blåa fältet.

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

Symmetry: Bortsett från menyn har innehållet av sidan viss symmetri när det kommer till videoklippen som är upplagda på sidan.

Visa stora ikoner utan text i Command Manager = Större arbetsyta

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Transkript:

TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2019 Grafiska användargränssnitt i Java En genomgång av de viktigaste begreppen

Alternativ 2 Från början fanns AWT, Abstract Window Toolkit Stora delar har ersatts av Swing: Mer omfattande, mer flexibelt Passar bra för våra behov Illustrerar begrepp som är vanliga i GUI-programmering Ett alternativ: JavaFX Helt annan struktur (scenes, stages, nodes)

Del 1: Att använda Swing: Fönster, knappar, menyer, Layout (placering) Händelsehantering någon tryckte en knapp" Genomgående exempel: "Ordbehandlare" Del 2: Att rita på skärmen, i en egen komponent

Att öppna ett fönster 5 Fönster: 2. Ordbehandlaren skapar ett fönster Fönstret registrerar sig i GUI-systemet, som informerar oss vid klick etc. (mer om detta senare!) 3. Sätt fönsterstorleken, se till att fönstret visas på skärmen 1. Huvudmetoden skapar ett objekt Men sedan då?

Komponenter och behållare 6 En är: En komponent Något grafiskt som visas på skärmen En behållare (container) Något som kan innehålla andra komponenter Kan läggas till vid behov Hela fönstrets innehåll. utom titelrad / menyrad

Komponenter 8 Istället för att "rita": Säg till vilka komponenter som ska finnas Menyer, knappar, textfält, statusrad Swing sköter om utseende (med mera) Alla komponenter: https://docs.oracle.com/javase/tutorial/uiswing/components/componentlist.html

Knappar i Java 9 Grunden för Swing-komponenter Har två lägen, av/på Radioknappar: Bara en aktiv åt gången i varje Standardknapp Checkbox, av/på

Textkomponenter 10 Editera text med flera stilar: HTML, Abstrakt, gemensam funktionalitet En enda rad text Textarea med flera rader Speciell formattering för datum, valuta, Lösenord syns inte när de skrivs in

Ordbehandlare med komponenter 11 Lägger till flera komponenter till behållaren fönstret Inget syns på skärmen än! NU är det dags att visa fönstret och dess innehåll

Hålla reda på komponenter 12 Behåll pekare till det du vill ha senare (plocka ut texten för att spara den, )

Resultat 13 Resultat: Rätt komponenter Fel layout Liten textarea

Layout 1: Önskemål 15 Hur får vi önskad layout (positioner och storlek)?

Layout 2: Absoluta koordinater? 16 Absoluta koordinater? Fördelar / nackdelar: (+) Enkelt att förstå ( ) Inget stöd för att ändra fönsterstorlek ( ) Hur hanterar man större text? ( ) Översättningar till andra språk, där ord kan ta mer plats? Tools / Инструменти URL / nettadresse

Layout 3: Layouthanterare 17 Swing: Använd layouthanterare med olika layout-regler! Om ingen annan hanterare är angiven: Layout vänster till höger Ingen text inskriven preferred size är minimal! Komponenter kan tala om sin önskade storlek (preferred size) : Storlek på texten i inställd fontstorlek + lite marginaler Returneras av getpreferredsize() Respekteras om det finns tillräckligt med utrymme

Layout 4: Fönsterstorlek 18 Så varje komponent vet önskad storlek men hur fick hela fönstret precis lagom storlek? frame.pack() anropar layouthanterare (layout manager) Layout: Frågar subkomponenter hur stora de vill vara Beräknar behållarens önskade storlek enligt sina layoutregler (här: "Allt i en rad") frame.pack() frame.setsize(önskad storlek)

Layout 5: Hierarkisk pack() 19 Fönster har en hierarki av komponenter pack() Varje behållare frågar sina direkta subkomponenter Fönster Jag vill vara så stor att hela menyraden får plats överst och ContentPane under den Menyrad ContentPane Meny: File Meny: Edit Meny: Help Knapp1 Knapp2 Textfält Statusrad Val1 Val2 Val3

Layout 6: Annan storlek än önskad? 20 En komponent får inte alltid begärd storlek! Kan få mer (fönstermaximering) eller mindre (ont om plats) Layouthanteraren har regler för hur utrymmet ska användas Just nu: Extra utrymme på höjden: Ska användas till textarean Extra utrymme på bredden: Menyrad: Extra plats mellan Edit och Help Knapprad: Allt vänsterjusterat Textfält, statusrad: Använder hela bredden

Exempel: MigLayout

MigLayout 1: Introduktion 22 MigLayout rekommenderas starkt! Nu: De enklaste funktionerna Se Baserad på oregelbundet rutnät

MigLayout 2: Rutor 23 Vi anger antal rader och kolumner, men (normalt) ingen storlek Vi anger vilka celler en komponent måste hålla sig inom Ungefärlig design kanske inte kommer att använda hela utrymmet! B I U Left Center Right Print Textarea Statusrad

MigLayout 3: En första layout 24 Wrap: Radbyte Span: Antal celler

MigLayout 4: Rutanpassning 25 MigLayout frågar komponenter efter önskad storlek Rutstorlek anpassas Växer för att få plats B I U Left Center Right Print Status: OK OK om komponenter inte täcker alla sina rutor!

MigLayout 5: Outnyttjat utrymme 26 Om vi drar ut fönstret: Ingen cell är bredare eller högre än absolut nödvändigt!

MigLayout 6: Hur får cellerna växa? 27 Vi förstorar fönstret Extra utrymme fördelas mellan cellerna B I U Left Center Right Print Status: OK Detta ändrar inte komponenternas storlek!

MigLayout 7: Avstånd, komponentstorlek 28 Separation Grow: Komponenter

B I U Left Center Right Print TextArea Status: OK B I U Left Center Right Print Print saknar grow TextArea Status: OK

Scrollning 30 Textfältet måste kunna scrollas Inte "inbyggt" i lägg den i en Fönster Knappar JScrollPane Statusrad Textfält

TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2019 Steg 4 Händelsehantering

Händelsehantering: Principer 33 Hur vet vi när någon tryckte på en knapp? En möjlighet: Vänta på ett klick Måste veta när det kan hända Måste hantera allt själva koordinater för knappen,

Händelsehantering: Principer (2) 34 I många grafiska gränssnitt: Säg till systemet vad det ska göra vid en händelse (ex: musklick) Fortsätt själv med något annat När händelsen inträffar hanteras detta asynkront ( i bakgrunden ), i en annan tråd Tråd: Som om du har en assistent Du säger: "Om någon klickar, gör detta" Assistenten håller koll på inmatning Ser att ett klick kommer, gör vad du bad om

Callbacks 35 Hur vet assistenten vad som ska göras? Låt knappen lagra en uppgift kod att utföra I vissa språk: Ge komponenten en funktion en callbackfunktion Liknar högre ordningens funktioner Vanlig funktion Lagra en pekare till själva funktionen! Assistenten: Varje gång knappen trycks: Använd pekaren till funktionen I Java: Ge komponenten ett objekt som har funktioner (metoder) I Swing: Lyssnare (objekt som lyssnar efter händelser)

Lyssnare 1: Gränssnitt, listor 37 Typsäkerhet: Vi definierar ett gränssnitt Vad måste ett callback-objekt, en lyssnare, kunna göra? Ta hand om ett klick! Komponenten har en lista på lyssnare av denna typ

Lyssnare 2: Implementation, registrering 38 Vi implementerar konkreta lyssnare Adderar lyssnare till komponenter Detta är ett objekt Objekt kan göra saker Listan (en pekare till) vårt innehåller nu -objekt!

Lyssnare 3: När något händer 39 När någon klickar med musen: Assistenten (händelsehanteringstråden) får info från operativsystemet Skapar ett objekt som beskriver händelsen:, Samtidigt kan vår huvudtråd vara upptagen med annat Eller kan ha avslutats så att allt nu drivs av händelsehanteringen

Lyssnare 4: När något händer 40 När någon klickar med musen: Assistenten (händelsehanteringstråden) får info från operativsystemet Skapar ett objekt som beskriver händelsen:, Tar reda på vilken komponent det gäller: Assistenten informerar varje lyssnare hos den relevanta komponenten Listan inkluderar vår registrerade

Lyssnartyper och abstraktionsnivåer 42 Exempel på lyssnartyper Lågnivå, kopplade till rå input Tryck på musknappar, koordinater Högnivå, meningsfulla händelser En handling utförs (korrekt klick på knapp, val i meny, ) Förflyttning av muspekare Slider/scrollbar flyttad Tryck på musknappar, koordinater Komponent flyttas, ändrar storlek Tangent tryckt / släppt, tecken skrivet Komplicerat, använd Key Bindings istället Mer info på vanliga lösningar

ActionListener 1: Introduktion 45 Vanlig och enkel lyssnare på högre nivå: ActionListener Anger vad som ska göras när någon vill "utföra en handling" Menyval Knapptryck Dubbelklick i lista

ActionListener 2: Exempel 46 Skapa knapp Ge den en lyssnare Lägg till den i fönstret Menyer hanteras på samma sätt Håll reda på textkomponenten När vi anropas: Manipulera textkomponenten

Grundläggande OO, syns exakt vad som händer, men mycket att skriva Mycket magi och automatiska transformationer, men kort och koncist En översikt över olika möjligheter behöver inte kunna allt i detalj!

Motivation 48 1. BoldListener synlig i hela paketet: Förorenar namnrymden (och vi måste hitta på ett bra namn) 2. Mycket arbete att hålla reda på information som lyssnaren behöver 3. Mycket extra kod runt den enda rad vi egentligen är intresserade av

Nästlade klasser 49 Nästlade klasser BoldListener är en implementationsdetalj i WordProcessor07 Kan ligga nästlad (static, inuti WordProcessor07) Kan döljas utifrån (private)

Inre klasser 50 Inre klasser Om BoldListener inte är static: Kan direkt komma åt fält i den omgivande klassen Magi? Nej: Kompilatorn ger BoldListener en pekare till omgivande objektet text outerobject.text

Inre klasser, inuti metoder 51 Inuti en metod Man kan till och med lägga en klass inuti en metod (Python: Definiera en funktion inuti en annan funktion ) Varför? 1) Kan ge bättre lokalitet: Kopplar lyssnarklassen till användning 2) Kan komma åt metodvariabler (exempel kommer)

Anonyma inre klasser 52 Anonymt Klasser kan skapas anonymt Helt ekvivalent med förra sidan: Detta deklarerar en ny klass, där kompilatorn hittar på ett namn, och ett objekt av nya klassen skapas

Hur många lyssnare?

En lyssnare, flera knappar 54 Lyssna på flera knappar Måste undersöka källan till en händelse (event) Klass i metod kommer åt final-variabler i metoden Vill vi göra så? Beror på hitta en bra balans!

Flera liknande lyssnarklasser? 55 Ibland blir det alltför upprepat

En parametriserad lyssnarklass! 56 Parametrisera om möjligt! -- Vilken Direction det gäller -- Vilken färg det gäller -- Vilken spelare det gäller --

Om lyssnaren har en metod

Förenkling 1: Lambda 58 Vi kan använda ett lambdauttryck! Fast metoden addactionlistener() kräver ett objekt av ActionListener-typ! Bakgrundsmagi ser till att detta fungerar Python Java

Förenkling 2: Metodreferens 59 Ange en referens till en metod med samma signatur (param, returtyp) som gränssnittets metod