GUI («Graphical User Interface»)

Like dokumenter
GUI («Graphical User Interface»)

GUI («Graphical User Interface») del 2

En kort introduksjon til JavaFX

GUI («Graphical User Interface») del 2

GUI 1. Grafisk brukergrensesni1 i Java med JavaFX. INF1010 Stein Michael Storleer

Fra Python til Java, del 2

GUI. Grafisk brukergrensesni0 i Java med JavaFX. INF1010 Stein Michael Storleer

Steg 1: Sette opp Java-prosjekt, og lage app-mappe og app-klasse

Steg 1: Opprette app-pakke, app-klasse og FXML-fil

Kalkulator-leksjonen (nesten ferdig)

Oppsummering del 2. Læringsmål Viktigste Java-elementer Eksamen Til sist. Læringsmål Hovedpunkter Tilbakemelding Eksamen. IN1010 uke 17 våren 2019

Steg 1: Sette opp Java-prosjekt, og lage appmappe

UNIVERSITETET I OSLO

INF Løsning på seminaropppgaver til uke 8

Kapittel 8: Programutvikling

Konstruktører. Bruk av konstruktører når vi opererer med "enkle" klasser er ganske ukomplisert. Når vi skriver. skjer følgende:

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

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

Grafiske brukergrensesnitt med Swing og AWT

GUI 3 JavaFX. Mer interaksjon Hvordan gi input :l programmet. INF1010 Stein Michael Storleer

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

INF1010 Grafisk brukergrensesni3 med Swing og awt del 1 INF1010

Jentetreff INF1000 Debugging i Java

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

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

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

Qt Jambi E t R ammeverks His torie

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

IN Notat om I/O i Java

INF Notat om I/O i Java

Programmeringsspråk for nybegynnere. Krav til språket. Krav til språket. Krav til språket

TOD063 Datastrukturer og algoritmer

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

Rekursjon. (Big Java kapittel 13) Fra Urban dictionary: recursion see recursion. IN1010 uke 8 våren Dag Langmyhr

Rekursjon. (Big Java kapittel 13) Fra Urban dictionary: recursion see recursion. IN1010 uke 8 våren Dag Langmyhr

I et Java-program må programmøren lage og starte hver tråd som programmet bruker. Er dette korrekt? Velg ett alternativ

UNIVERSITETET I OSLO

Inf109 Programmering for realister Uke 5. I denne leksjonen skal vi se på hvordan vi kan lage våre egne vinduer og hvordan vi bruker disse.

UNIVERSITETET I OSLO

Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

Java PRP brukermanual

Forelesning inf Java 1

INF Uke 10. Ukesoppgaver oktober 2012

Enkel lesing og skriving i Java

UNIVERSITETET I OSLO

Oppsummering. Kort gjennomgang av klasser etc ved å løse halvparten av eksamen Klasser. Datastrukturer. Interface Subklasser Klasseparametre

Forkurs INF1010. Dag 1. Andreas Færøvig Olsen Tuva Kristine Thoresen

UNIVERSITETET I OSLO

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

Repitisjonskurs. Arv, Subklasser og Grensesnitt

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

INF1000: Forelesning 7

Programmeringsspråket C

EKSAMEN OBJEKTORIENTERT PROGRAMMERING Alle trykte og skrevne. Java API dokumentasjon er tilgjengelig lokalt på hver maskin.

Nyttige Linux-kommandoer. Hvordan du kan jobbe mer effektivt Dag Langmyhr

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

Introduksjon til objektorientert programmering

Enkle generiske klasser i Java

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

Programmeringsspråket C

Løsningsforslag Test 2

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

EKSAMEN 6108/6108N PROGRAMMERING I JAVA Alt trykt og skriftlig materiale.

Dagens tema. Hva er kompilering? Anta at vi lager dette lille programmet doble.rusc (kalt kildekoden): Hva er kompilering?

Sudokubrettet Et sudokubrett består av n n ruter. Vi bruker følgende begreper i oppgaven:

Eksamen. Objektorientert Programmering IGR 1372

Operativsystemer og grensesnitt

Seminaroppgaver IN1010, uke 2

INF1000: Forelesning 7. Konstruktører Static

Kodetime for Nordstrand barneskole

Dagens tema Kapittel 8: Objekter og klasser

Program delegate. Lage et nytt prosjekt i Visual Studio

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program

På tide med et nytt spill! I dag skal vi lage tre på rad, hvor spillerne etter tur merker ruter med X eller O inntil en av spillerne får tre på rad.

UNIVERSITETET I OSLO

OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK

Kapittel 1. Datamaskiner og programmeringsspråk. 1.1 Programmering

Introduksjon til Eclipse

Post-it spørsmål fra timen (Arv og subklasser)

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

Sudokubrettet Et sudokubrett består av n n ruter. Vi bruker følgende begreper i oppgaven:

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl

AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE

INF1000: Forelesning 6. Klasser og objekter del 1

1. NetBeans IDE: Lage en enkel mobilapplikasjon

INF2100. Oppgaver uke 40 og

UNIVERSITETET I OSLO

Utplukk av Java (GUI, kode-konvensjon, Java og bildebehandling i J2SE. BufferedImage m/venner. polymorfisme, classpath, javadoc) UNIVERSITETET I OSLO

Transkript:

GUI («Graphical User Interface») Om GUI JavaFX Se også på Infoskrivet https://www.uio.no/studier/emner/matnat/ ifi/in1010/v18/gui/fx-intro-in1010.pdf Programkoden i https://www.uio.no/studier/emner/ matnat/ifi/in1010/v18/gui/

Hvorfor trenger vi GUI? Tripp-trapp-tresko med og uten GUI 1 2 3 4 5 6 7 8 9 $ java TTT1 X spiller 8 Hva spiller O? 5 O spiller 5 X spiller 1 Hva spiller O? 3 O spiller 3 X spiller 2 Hva spiller O? 7 O spiller 7 Vinneren er O! $ java TTT2 X Hva spiller O? 5 X O X Hva spiller O? 8 : Hva spiller O? 2 Vinneren er O! X O O X O X

Positive og negative sider ved GUI Fordeler med GUI Mer intuitivt å bruke Færre muligheter for brukerfeil Visuelt mer tiltalende Ulemper Mer komplisert å programmere Mange ulike GUI-biblioteker å velge blant Svært få biblioteker fungerer for både Linux, Mac og Windows.

En norsk verdenssuksess Historien om Qt Opprinnelig laget av det norske firmaet Trolltech i 1994. Hovedideen var at programmer skrevet i C++ kunne linkes med et Qt-bibliotek og så kjøre på ulike systemer. Sannsynligvis det mest brukte generelle vindusbiblioteket i 1990- og 2000-årene. Solgt til Nokia i 2008 (og siden til Digia og The Qt Company). Finnes i både kommersiell og åpen kildekode-versjoner. Brukes i dag i Google Earth, Mathematica, Tesla-biler,...

Hvorfor hører GUI hjemme i IN1010? Hvorfor GUI i IN1010? Allmennkunnskap for programmerere Et godt eksempel på bruk av OO Viser en ny programmeringstankegang: Hendelsesorientert programmering (neste uke) Et godt eksempel på bruk av parallellisering og tråder (neste uke)

Historien om Java og GUI Java og GUI Java har alltid hatt som mål at programmene skal kunne kjøres uendret på alle platformer. Derimot skal utseendet tilpasses operativsystemets «standard». AWT («Abstract Window Toolkit») fra 1995: et ganske enkelt grensesnitt mot OSets vindussystem Swing fra 2007: et mer avansert og generelt system bygget oppå AWT JavaFX fra 2012: et enda mer komplett og velstrukturert system

Hvordan lager vi et GUI-program? Teatermetaforen De som laget JavaFX tenkte seg at det en bruker ser i et GUI-vindu, minner mye om det man ser på teater når teppet går opp. Teater Scene Kulisser class Stage class Scene class Pane

Hvordan lager vi et GUI-program? Teatret Et teater settes opp på denne måten: import javafx.application.application; import javafx.stage.stage; public class Xxx extends Application { @Override public void start(stage teater) { // Sett opp scene og kulisser teater.settitle("overskrift"); // teater.setscene(scene); teater.show(); public static void main(string[] args) { launch(args);

Hvordan lager vi et GUI-program? Selv om det ikke er ferdig, kan programmet kjøres: $ javac Xxx.java $ java Xxx

Hvordan lager vi et GUI-program? Alt med JavaFX ligger i biblioteket og vi må importere klassene vi trenger. Alle JavaFX-programmer må være subklasser av Application. main må kalle launch for å starte JavaFX. Hovedklassen må definere en start som setter opp det hele; parameteren angir hovedvinduet («teateret»). settitle angir vinduets tittel. show angir at teppet skal gå opp. import javafx.application.application; import javafx.stage.stage; public class Xxx extends Application { @Override public void start(stage teater) { // Sett opp scene og kulisser teater.settitle("overskrift"); // teater.setscene(scene); teater.show(); public static void main(string[] args) { launch(args);

Hvordan lager vi et GUI-program? Scener og kulisser Vi må også lage en scene og en (foreløbig tom) samling kulisser: import javafx.application.application; import javafx.scene.layout.pane; import javafx.scene.scene; import javafx.stage.stage; public class Xxx2 extends Application { @Override public void start(stage teater) { // Sett opp scene og kulisser Pane kulisser = new Pane(); Scene scene = new Scene(kulisser); teater.settitle("overskrift"); teater.setscene(scene); teater.show(); public static void main(string[] args) { launch(args);

Hvordan lager vi et GUI-program? Ulike typer kulisser Det finnes mengder av ting vi kan bruke som kulisser; vi skal bruke: tekst (class Text) firkanter (class Rectangle) sirkler (class Circle) linjer (class Line) polygoner (class Polygon)

Det kjente hallo-programmet Et eksempel: Hallo-programmet import javafx.application.application; import javafx.stage.stage; import javafx.scene.scene; import javafx.scene.layout.pane; import javafx.scene.text.font; import javafx.scene.text.text; public class Hallo extends Application { @Override public void start(stage teater) { Text hilsen = new Text("Hallo, alle sammen!"); hilsen.sety(40); hilsen.setfont(new Font(40)); Pane kulisser = new Pane(); kulisser.getchildren().add(hilsen); Scene scene = new Scene(kulisser); teater.settitle("velkommen til Java FX"); teater.setscene(scene); teater.show(); public static void main(string[] args) { Application.launch(args);

Det kjente hallo-programmet Vi må importere de klassene vi trenger opprette teksten: Text hilsen = new Text("Hallo, alle sammen!"); Vi kan tilpasse elementene ved for eksempel å endre fontstørrelsen: hilsen.setfont(new Font(40)); inkludere tekstelementet blant kulissene: kulisser.getchildren().add(hilsen);

Det kjente hallo-programmet Nå kan programmet kjøres: $ javac Hallo.java $ java Hallo

Koordinatsystemet Plassering Når vi har flere kulisser, må vi angi posisjonen så de ikke havner oppå hverandre. Koordinatsystemet er litt uvant: Y-aksen går nedover. x y Enheten er piksler på skjermen.

Et eksempel fra Harry Potter Symbolet for Deathly hallows fra Harry Potter-bøkene kan lages slik: et Circle-objekt sort rand med bredde 4; hvit innmat et Line-objekt brunt, med bredde 4 et Polygon-objekt purpurfarget rand med bredde 4; hvit innmat

Et eksempel fra Harry Potter import javafx.application.application; import javafx.stage.stage; import javafx.scene.scene; import javafx.scene.layout.pane; import javafx.scene.shape.*; import javafx.scene.paint.color; public class DeathlyHallows extends Application { @Override public void start(stage teater) { final double r = 63; Circle stein = new Circle(r); stein.setcenterx(100); stein.setcentery(224-r); stein.setstroke(color.black); stein.setstrokewidth(4); stein.setfill(color.white); Line stav = new Line(100,224, 100,0); stav.setstroke(color.brown); stav.setstrokewidth(4); Polygon kappe = new Polygon(0,224, 200,224, 100,0); kappe.setstroke(color.purple); kappe.setstrokewidth(4); kappe.setfill(color.white); Pane kulisser = new Pane(); kulisser.getchildren().add(kappe); kulisser.getchildren().add(stein); kulisser.getchildren().add(stav); Scene scene = new Scene(kulisser); teater.settitle("the deathly hallows"); teater.setscene(scene); teater.show();

Å plassere ting i et rute nett Plassering i rutenett Noen ganger trenger vi å plassere kulisser i et rutenett. Til det finnes klassen GridPane som selv er en kulisse. (Det er altså mulig å bygge kulisser på kulisser på kulisser... )

Å plassere ting i et rute nett import javafx.application.application; import javafx.application.platform; import javafx.stage.stage; import javafx.scene.scene; import javafx.scene.layout.pane; import javafx.scene.layout.gridpane; import javafx.scene.control.button; import javafx.scene.text.text; import javafx.scene.text.font; /* Brettet: 1 2 3 4 5 6 7 8 9 Spillerne: X - maskinen O - brukeren */ public class TTT0 extends Application { @Override public void start(stage teater) { GridPane rutenett = new GridPane(); rutenett.setgridlinesvisible(true); rutenett.add(new Text(" "), 0, 0); rutenett.add(new Text("X"), 1, 0); rutenett.add(new Text("X"), 2, 0); rutenett.add(new Text(" "), 0, 1); rutenett.add(new Text("O"), 1, 1); rutenett.add(new Text("X"), 2, 1); rutenett.add(new Text("O"), 0, 2); rutenett.add(new Text("O"), 1, 2); rutenett.add(new Text(" "), 2, 2); Pane kulisser = new Pane(); kulisser.getchildren().add(rutenett); Scene scene = new Scene(kulisser); teater.settitle("tripp-trapp-tresko"); teater.setscene(scene); teater.show();

Hva hvis jeg trenger en fil? Å be om et filnavn JavaFX kan også brukes til å be om et filnavn. La oss anta at vi har noen filer med farger angitt som RGB-verdier: 127 255 212 akvamarin.rgb Så kan vi i programmet vårt be brukeren velge en slik fil:

Hva hvis jeg trenger en fil? Klassen FileChooser Denne klassen gjør det enkelt å be brukeren om et filnavn: File file = new FileChooser(). showopendialog(teater); import javafx.application.application; import javafx.stage.stage; import javafx.scene.scene; import javafx.scene.layout.pane; import javafx.stage.filechooser; import javafx.scene.paint.color; import javafx.scene.shape.circle; import java.io.file; import java.util.scanner; public class VisFarge extends Application { @Override public void start(stage teater) { int r = 0, g = 0, b = 0; File file = new FileChooser().showOpenDialog(teater); try { Scanner f = new Scanner(file); r = f.nextint(); g = f.nextint(); b = f.nextint(); catch (Exception e) { Circle fargedemo = new Circle(100); fargedemo.setcenterx(100); fargedemo.setcentery(100); fargedemo.setfill(color.rgb(r,g,b)); Pane kulisser = new Pane(); kulisser.getchildren().add(fargedemo); Scene scene = new Scene(kulisser); teater.settitle("rgb-farge"); teater.setscene(scene); teater.show();

Dagens lille moralpreken Til slutt Husk JavaFX er et enormt bibliotek; det er lett å gå seg vill. Det er ofte mange måter å gjøre noe på, men ikke alle varianter passer sammen. Søking på internettet vil lett kunne gi kode som forvirrer mer enn den hjelper. Forelesningene og IN1010-introduksjonsheftet inneholder det man trenger å vite for å kunne lage enkle GUI-programmer, og løse oblig nr 6. Når du skal programmere GUI i IN1010, ta utgangspunkt i et program som finnes, og modifiser det.