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: Händelser, lyssnare och applets

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

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

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

1 Grafiska komponenter

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

Lab5 för prgmedcl04 Grafik

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

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

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

Mer om grafiska komponenter. Händelsestyrda program

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

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

OOP Objekt-orienterad programmering

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

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

3.5 Visuell programmering

Sophia Prosell DREAM WEAVER SKAPA OCH PUBLICERA EFFEKTIVA WEBBSIDOR

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

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

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

A. Datorn från grunden

Programmering. Scratch - grundövningar

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

Att använda talsyntes i en lässituation.

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

Java-concept och Swing. Swing low, sweet chariot

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

Gränssnitt för FakeGranska. Lars Mattsson

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

Wizkeys skärmtangentbord

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

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

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

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

OOP Objekt-orienterad programmering

Lektion Händelsehanterare

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

Lathund - webbsidor och filer

Sida Kapitel 3 Fönster och dörr... 3

Lathund CallCenter 2010

Användarmanual WebNailer. 19 januari 2004

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

Grafiska användargränssitt och händelsehantering

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

Uppgift 18 Eget programval

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

I högskolans nätverk hittar du programmet PowerPoint genom Startmenyn, Huvudmeny XP, Kontorsprogram, Microsoft Office, Microsoft PowerPoint.

Händelsestyrda program

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

OptiWay GIS Vind. Manual - Version OptiWay

Vad påverkar designen?

Arv och Grafiska Användargränssnitt

Bilaga 4, Skapa grafiskt användargränssnitt med guide

Manual TorTalk Mac 1.0

Beskrivning av gesällprov RMI Chat Mikael Rydmark

Labora&on 8 Formulär övningar/uppgi6er

DOTNETNUKE SKOLNING Skapat: den 20 november 2012

Lägga till artiklar i Joomla

4 Kolumn Kalkylbladet är uppdelat i rader (horisontellt) och kolumner (vertikalt). Där dessa möts finns alltid en cell.

729G06 Programmering och logik. Grafiska gränssnitt och eventdriven programmering del 2

LATHUND EKONOMISYSTEM

Design av användargränssnitt

Manual Trafikdatasystem Grävtillstånd, sökande

STOCKHOLMS UNIVERSITET. Handbok 2. Funktionaliteter moveon 4

Fönster och dörr. Kapitel 3 - Fönster och dörr... 3

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

Personalsupport. Medicinska fakulteten, Lunds universitet. Textredigeraren. Moodle version 2.7.1

Grundläggande Ordbehandling Microsoft Word

Läsa med stöd av talsyntes

Publicera taltidningen

In- och utenheter. Händelsebaserad programmering i GLUT. Interrupt-baserad interaktion. Sampling / polling. Händelsebaserad interaktion (forts.

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

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

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

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

Windows Forms Winstrand Development

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

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!

Manual GISportalen (MapGuide) På Internet

Arv och polymorfism i Java

Anpassning av Windows XP

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

KURSMÅL WINDOWS STARTA KURSEN

Idag: Centrerad utskrift. Granskning. DD1311 Programmeringsteknik med PBL. Granskning Felhantering GUI. Föreläsning 15.

ViTal. Talsyntes. Användarhandledning

Ett enkelt Kalkylexempel - Fruktaffären

1. Uppdateringsmodul (CMS)

Manual för banläggning i OCAD IF ÅLAND

Introduktion till datorer och nätverk vid institutionen för naturgeografi och ekosystemvetenskap

Lokal administration kommun Cosmic

Kapitel 3 Fönster och dörr... 3

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

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

Manual. Anpassad för CMS Made Simple version 1.9.x (uppdaterad ) Birger Eriksson webblots.se

Transkript:

TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2018 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: Ordbehandlaren behöver komma ihåg sitt fönster Sätt fönsterstorleken, se till att fönstret visas på skärmen

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 Alternativa layouthanterare med olika layout-regler! Om ingen annan 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

Händelsehantering: Principer 32 Hur vet vi när någon tryckte på en knapp? Tidigare kurs: Vänta på ett klick Måste veta när det kan hända Måste hantera allt själva koordinater,

Händelsehantering: Principer (2) 33 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 en annan 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

Lyssnare 0: Callbacks 34 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 def task(): print( Someone pushed the button ) Vanlig funktion frame.callback = task Lagra en pekare till själva funktionen! Assistenten: Varje gång knappen trycks: frame.callback() I Java: Ge komponenten ett objekt som har funktioner (metoder) I Swing: Lyssnare (objekt som lyssnar efter händelser)

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

Lyssnare 2: Implementation, registrering 36 Vi implementerar konkreta lyssnare Adderar lyssnare till komponenter Detta är ett objekt Objekt kan göra saker

Lyssnare 2b: Lagring 37 Ett ClickPrinter-objekt!

Lyssnare 3: När något händer 38 När någon klickar med musen: Assistenten (händelsehanteringstråden) får info från operativsystemet Skapar ett objekt som beskriver händelsen:,

Lyssnare 4: 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:, Tar reda på vilken komponent det gäller: Assistenten informerar varje lyssnare hos den relevanta komponenten Listan inkluderar vår registrerade

Lyssnare 5: Nästlad klass 40 Bekvämlighet: Kan lägga en klass inuti en annan, nästlat Färre filer att hålla reda på Lyssnarklassen behöver inte "synas" utåt

ActionListener 1: Introduktion 41 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 42 Skapa knapp Ge den en lyssnare Lägg till den i fönstret Menyer hanteras på samma sätt Håll reda på textkomponenten Om/när vi anropas: Manipulera textkomponenten

ActionListener 3: Förenklat mellansteg 43 Inre klasser kan komma åt fält i yttre klasser

ActionListener 4: Metodreferens 44 1. ActionListener har en enda metod 3. Ange en referens till den metoden! Kompilatorn ser till att det skapas ett objekt av ActionListener-typ, som anropar makebold() 2. Implementera en metod med samma parametrar

Några viktiga lyssnarklasser 45 Knapp tryckt, menyval gjort, Slider eller scrollbar flyttad Markering i lista Musknappar Förflyttning av muspekare Tangent tryckt / släppt, tecken skrivet Skickas till komponenten som har tangentbordsfokus Komplicerat ofta är key bindings bättre Mer info på vanliga lösningar