Kapittel 15: Grafiske brukergrensesnitt: Enkel GUI. Del I

Like dokumenter
Kapittel 15: Grafiske brukergrensesnitt: Enkel GUI. Del I

Kapittel 13: Grafiske brukergrensesnitt INF 100. Java som første programmeringsspråk

Klassen javax.swing.joptionpane

Klassen javax.swing.joptionpane

Kapittel 9: Sortering og søking Kort versjon

Kapittel 9: Sortering og søking Kort versjon

Kapittel 9: Sortering og søking Kort versjon

Kapittel 9: Sortering og søking Kort versjon

Kapittel 8: Sortering og søking

Kapittel 8: Sortering og søking INF100

Kapittel 8: Programutvikling

Kapittel 8: Sortering og søking INF100

Kapittel 7: Mer om arv

Kapittel 1: Datamaskiner og programmeringsspråk

Kapittel 1: Datamaskiner og programmeringsspråk

TOD063 Datastrukturer og algoritmer

Kapittel 5: Objektkommunikasjon

Løsningsforslag til eksamen i INF1000 våren 2006

IN Notat om I/O i Java

INF Notat om I/O i Java

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

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

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

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

UNIVERSITETET I OSLO

Leksjon 2. Setninger og uttrykk

Leksjon 2. Setninger og uttrykk

INF Uke 10. Ukesoppgaver oktober 2012

Oblig 4Hybelhus litt mer tips enn i oppgaven

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

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

UNIVERSITETET I OSLO

Leksjon 4. Metoder. Program, klasse og metode

Tre måter å lese fra terminal. Java 4. Eksempel. Formatert utskrift til skjerm

6108 Programmering i Java. Leksjon 4. Metoder. Roy M. Istad 2015

INF1000-SIKT - Notat om I/O i Java

. Ved sensur vl1 ahe bokstaverte deloppgaver (a, b, c,...) telle like mye.

EKSAMENSFORSIDE Skriftlig eksamen med tilsyn

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

1. Finn klassene (hvilke objekter er det i problemet) 1. Dataene som beskriver problemet (hvilke objekter har vi og hvor mange klasser er det?

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

Leksjon 7. Filer og unntak

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

GUI-programmering, del 3 Vinduslyttere Dialogvinduer GUI-komponenten JTable Egne datamodellklasser. En oversikt over kapittel 19 i boka

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

INF1000: Forelesning 4. Mer om arrayer Metoder

Kapittel 6: Arv. Redigert av: Khalid Azim Mughal

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

Gjennomgang av eksamen H99

INF1000 (Uke 4) Mer om forgreninger, While-løkker

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I

Lese fra fil. INF1000 : Forelesning 5. Eksempel. De vanligste lesemetodene. Metoder:

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

Seminaroppgaver IN1010, uke 2

I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker. Tre måter å lese fra terminal. Repetisjon. Mer om forgrening While-løkker

3 emner i dag! INF1000 Uke 5. Objekter og pekere. null. Litt om objekter, pekere og null Filer og easyio Litt mer om tekster

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4

Forelesning inf Java 4

INF1000 Behandling av tekster

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I Løsningsforslag

Spørsmål fra forrige forelesning. INF1000 Forelesning 7. Oppførselen til inword()/inint()/etc. Operator-presedens i Java

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

I dag INF1000 (Uke 4) Mer om forgreninger, While-løkker. Tre måter å lese fra terminal. Tre måter å lese fra terminal.

HØGSKOLEN I SØR-TRØNDELAG

import java.io.*; import java.util.*; import javagently.text;

AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE. Antall sider (Inkl forsiden): 8. Alle trykte og håndskrevne

Kapittel 13: Unntakshåndtering

Innlesning fra tastatur med easyio. INF1000 høst Vi må først skrive i toppen av programmet: import easyio.*;

INF1000 Uke 4. Innlesning fra terminal. Uttrykk og presedens. Oversikt

Hittil har programmene kommunisert med omverden via tastatur og skjerm Ønskelig at data kan leve fra en kjøring til neste

MER OM ARRAYER. INF1000: Forelesning 4. Anta at vi ønsker å lagre en liste med navnene på alle INF1000-studentene:

INF1010 MVC i tekstbaserte programmer

Løse reelle problemer

AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

Oppgave 1 (Programtolkning) INF1000 Eksamen V06. Oppgave 1 (Programtolkning) Oppgave 1 (Programtolkning)

Kapittel 12: Rekursjon

En klasse er noe - en metode gjør noe (! / # <= (! * +!! ",-' %. "- -/ %.!#) )! " 0'%! * *$! "1-)) '' % '. 22!'( 7/ /! * 2 2! "*"% 8"%% 9 - -!

Videregående programmering 6

EKSAMEN I EMNET INF100/INF100-F Grunnkurs i programmering (Programmering 1) Fredag 16. desember 2005 Tid: 09:00 14:00

Eksempel: Body Mass Index (BMI) Forelesning inf Java 3. Ferdig program (første del) Ferdig program (siste del)

Kapittel 13: Unntakshåndtering

INF 1000 høsten 2011 Uke september

Løsningsforslag ukeoppg. 4: sep (INF Høst 2011)

Forelesning inf Java 5

HØGSKOLEN I SØR-TRØNDELAG

Forelesning inf Java 5

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

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

Informasjon Eksamen i IN1000 og IN1001 høsten a) 1 poeng. 1b) 1 poeng. Tid. Oppgavene. Tillatte hjelpemidler. 30. november kl. 14.

INF1000 undervisningen INF 1000 høsten 2011 Uke september

INF1010 våren 2018 tirsdag 23. januar

Blokker og metoder INF1000 (Uke 6) Metoder

Del 3: Evaluere uttrykk

Oppgave 1. Oppgave 2. Oppgave 3. Prøveeksamen i INF1000. Ole Christian og Arne. 23. november 2004

Transkript:

Kapittel 15: Grafiske brukergrensesnitt: Enkel GUI Del I Redigert av: Khalid Azim Mughal (khalid@ii.uib.no) Kilde: Java som første programmeringsspråk (3. utgave) Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen Cappelen Akademisk Forlag, 2006. ISBN: 82-02-24554-0 http://www.ii.uib.no/~khalid/jfps3u/ (NB! Boken dekker opptil Java 6, men notatene er oppdatert til Java 7.) 12/7/2012 15: Grafiske brukergrensesnitt: Enkel GUI 15-1/20 Emneoversikt Enkel dialogutforming med javax.swing.joptionpane Presentasjon av utdata til brukeren Lesing av inndata fra brukeren Bekreftelse av opplysninger fra brukeren JFPS3U 15: Grafiske brukergrensesnitt: Enkel GUI 15-2/20

Enkel dialogutforming med JOptionPane Klassen JOptionPane tilbyr predefinerte dialogvinduer som kan brukes til å utveksle inndata og utdata med brukeren via et enkelt grafisk brukergrensesnitt. Utforming av dialogvinduer for tre formål ved hjelp av klassen JOptionPane: Hvordan informasjon kan presenteres til brukeren Hvordan brukeren kan taste inndata til programmet Hvordan programmet kan be brukeren om å bekrefte opplysninger Klassen JOptionPane definerer tre statiske metoder som har navnet showtypedialog(), der Type kan erstattes med Message, Input eller Confirm, avhengig av hvilken type dialogvindu vi ønsker. Alle dialogvinduene blir modale, det vil si at brukeren må bli ferdig med dialogvinduet før hun kan fortsette med programmet. GUI-basert programmet må avsluttes med kallet System.exit(0) i kildekoden. JFPS3U 15: Grafiske brukergrensesnitt: Enkel GUI 15-3/20 Tabell 15.1: Utdrag av metoder fra klassen JOptionPane javax.swing.joptionpane static void showmessagedialog( Object beskjed) static void showmessagedialog( Object beskjed, String tittel, int beskjedtype) static String showinputdialog (Object beskjed) static String showinputdialog( Object beskjed) static String showinputdialog( Object beskjed, String tittel, int beskjedtype) Metoden showmessagedialog() brukes til å presentere informasjon til brukeren. Den første metoden bruker vindustittelen "Message" og beskjedtypen angitt ved JOptionPane.INFORMATION_MESSAGE. Metoden showinputdialog() brukes til å be brukeren om inndata. Det som ble tastet blir returnert som en streng. Dersom dialogvinduet ble kansellert, returneres null-litteralen. Den første og andre metoden bruker vindustittelen "Input" og beskjedtypen angitt ved JOptionPane.QUESTION_MESSAGE. JFPS3U 15: Grafiske brukergrensesnitt: Enkel GUI 15-4/20

static int showconfirmdialog( Object beskjed) static int showconfirmdialog( Object beskjed, String tittel, int opsjonstype) static int showconfirmdialog( Object beskjed, String tittel, int opsjonstype, int beskjedtype) javax.swing.joptionpane Metoden showconfirmdialog() brukes til å be brukeren om å bekrefte informasjon. For tolking av returverdien, se Tabell 15.4. Den første metoden bruker vindustittelen "Select an Option", opsjonstypen angitt ved JOptionPane.YES_NO_CANCEL_OPTION og beskjedtypen angitt ved JOptionPane. QUESTION_MESSAGE. Den andre metoden bruker beskjedtypen angitt ved JOptionPane.QUESTION_MESSAGE. JFPS3U 15: Grafiske brukergrensesnitt: Enkel GUI 15-5/20 Tabell 15.2: Felles parametere til metodene showtypedialog() Parameternavn Component foreldrekomponent Object beskjed String tittel int beskjedtype Beskrivelse Angir rammen dialogvinduet skal plasseres i. En standard ramme opprettes dersom verdien er null eller ikke er spesifisert. Angir det som skal presenteres til brukeren, for eksempel en beskjed eller ledetekst. Vanligvis er dette et String-objekt. Dersom dette ikke er tilfellet, brukes tostring()-metoden på objektet for å lage en strengrepresentasjon som vises i dialogvinduet. Angir tittel som skal settes på dialogvinduet. Denne verdien angir implisitt hvilket ikon som skal brukes i dialogvinduet. Oversikt over lovlige verdier er gitt i Tabell 15.3. JFPS3U 15: Grafiske brukergrensesnitt: Enkel GUI 15-6/20

Tabell 15.3: Angivelse av ikon i klassen JOptionPane Beskjedtyper i javax.swing.joptionpane ERROR_MESSAGE INFORMATION_MESSAGE WARNING_MESSAGE QUESTION_MESSAGE PLAIN_MESSAGE Disse konstantene i klassen JOptionPane representerer standardikoner som brukes i et dialogvindu. JFPS3U 15: Grafiske brukergrensesnitt: Enkel GUI 15-7/20 Tabell 15.4: Tolking av heltallsverdien returnert fra metodene i klassen JOptionPane Returverdikonstant er definert i klassen JOptionPane YES_OPTION NO_OPTION CANCEL_OPTION OK_OPTION CLOSED_OPTION Angir hvilken handling brukeren har foretatt. Klikket på Yes-knappen. Klikket på No-knappen. Klikket på Cancel-knappen. Klikket på Ok-knappen. Klikket på lukk-vindu-boksen til dialogvinduet. JFPS3U 15: Grafiske brukergrensesnitt: Enkel GUI 15-8/20

Presentasjon av utdata til brukeren Et slikt dialogvindu består vanligvis av en beskjed til brukeren og en OK-knapp som brukeren kan klikke på etter å ha lest beskjeden. Metoden showmessagedialog() brukes for slike dialogvinduer (Program 15.1). Figur 15.1: Dialogvinduer med metoden showmessagedialog() JOptionPane.showMessageDialog( // (1) "Hei på deg!" (a) JOptionPane.showMessageDialog( // (2) "Du har vunnet i tipping! Gratulerer!", "Beskjed", JOptionPane.WARNING_MESSAGE (b) JFPS3U 15: Grafiske brukergrensesnitt: Enkel GUI 15-9/20 Program 15.1: Bruk av metoden showmessagedialog() import javax.swing.joptionpane; // Importerer klassen JOptionPane public class BeskjedDialog { public static void main( String[] args ) { JOptionPane.showMessageDialog( // (1) // Ingen forelder-ramme "Hei på deg!" // Beskjeden JOptionPane.showMessageDialog( // (2) // Ingen foreldre-ramme "Du har vunnet i tipping! Gratulerer!", // Beskjeden "Beskjed", // Tittel på vinduet JOptionPane.WARNING_MESSAGE // Beskjedtypen System.exit(0 // (3) Nødvendig for å avslutte programmet. JFPS3U 15: Grafiske brukergrensesnitt: Enkel GUI 15-10/20

Lesing av inndata fra brukeren Denne typen dialogvindu består vanligvis av et tekstfelt som brukeren kan skrive i og to knapper (en Ok-knapp og en Cancel-knapp) for å avlevere inndata eller kansellere dialogvinduet. Metoden showinputdialog() brukes for dette formålet (Program 15.2). Metoden returnerer innholdet av tekstfeltet som en streng, som må eksplisitt konverteres til andre typer verdier, dersom programmet krever det. JFPS3U 15: Grafiske brukergrensesnitt: Enkel GUI 15-11/20 Figur 15.2: Dialogvinduer med metoden showinputdialog() JOptionPane.showInputDialog("Navn:" // (1) JOptionPane.showInputDialog( // (2) "Postkode:" (a) (b) JOptionPane.showInputDialog( // (4) "Poststed:", "Inndata", JOptionPane.PLAIN_MESSAGE (c) JFPS3U 15: Grafiske brukergrensesnitt: Enkel GUI 15-12/20

Program 15.2: Bruk av metoden showinputdialog() import javax.swing.joptionpane; public class InndataDialog { public static void main( String[] args ) { String navn = JOptionPane.showInputDialog( // (1) "Navn:" String postkodestr = JOptionPane.showInputDialog( // (2) // Ingen foreldre-ramme "Postkode:" int postkode = Integer.parseInt(postkodeStr // (3) String poststed = JOptionPane.showInputDialog( // (4) // Ingen foreldre-ramme "Poststed:", "Inndata", // Tittel på vinduet JOptionPane.PLAIN_MESSAGE // Beskjedtypen JOptionPane.showMessageDialog( navn + "\n" + postkode + " " + poststed, "Opplysninger", JOptionPane.PLAIN_MESSAGE System.exit(0 JFPS3U 15: Grafiske brukergrensesnitt: Enkel GUI 15-13/20 Bekreftelse av opplysninger fra brukeren Et slikt dialogvindu består vanligvis av et spørsmål om et forhold som brukeren må ta stilling til. I tillegg har dialogvinduet vanligvis to knapper (en Yes-knapp og en No-knapp) for å gi svar på spørsmålet. Metoden showconfirmdialog() brukes for dette formålet (Program 15.3). Tolking av returverdien fra metoden showconfirmdialog() er vist i Tabell 15.4. Denne metoden kan også ta en parameter som angir opsjonstype (Tabell 15.5). Tabell 15.5: Angivelse av knapper i metoden showconfirmdialog() DEFAULT_OPTION YES_NO_OPTION YES_NO_CANCEL_OPTION OK_CANCEL_OPTION Opsjonstype definert i klassen javax.swing.joptionpane Ok-knapp Yes- og No-knapp Yes- og No- og Cancel-knapp Yes- og Cancel-knapp JFPS3U 15: Grafiske brukergrensesnitt: Enkel GUI 15-14/20

Figur 15.3: Dialogvinduer med metoden showconfirmdialog() JOptionPane.showConfirmDialog( // (1) "Skal du gifte deg?" (a) JOptionPane.showConfirmDialog( // (2) "Forstår vi hverandre?", "Bekreftelse 2", JOptionPane.YES_NO_OPTION (b) JOptionPane.showConfirmDialog( // (3) "Java er gøy, ikke sant?", "Bekreftelse 3", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE (c) JFPS3U 15: Grafiske brukergrensesnitt: Enkel GUI 15-15/20 Program 15.3: Bruk av metoden showconfirmdialog() import javax.swing.joptionpane; public class BekreftDialog { public static void main( String[] args ) { int svar1 = JOptionPane.showConfirmDialog( // (1) // Ingen forelder-ramme "Skal du gifte deg?" // YES-, NO- og CANCEL-knappen String svarstr1 = null; switch(svar1) { case JOptionPane.YES_OPTION: svarstr1 = "Gratulerer!"; break; case JOptionPane.NO_OPTION: svarstr1 = "Nei vel."; break; case JOptionPane.CANCEL_OPTION: case JOptionPane.CLOSED_OPTION: svarstr1 = "Beklager at jeg spurte."; break; default: assert false; JOptionPane.showMessageDialog( svarstr1 JFPS3U 15: Grafiske brukergrensesnitt: Enkel GUI 15-16/20

int svar2 = JOptionPane.showConfirmDialog( // (2) // Ingen foreldre-ramme "Forstår vi hverandre?", "Bekreftelse 2", // Tittel på vinduet JOptionPane.YES_NO_OPTION // YES- og NO-knappen String svarstr2 = null; switch(svar2) { case JOptionPane.YES_OPTION: svarstr2 = "Bra!"; break; case JOptionPane.NO_OPTION: case JOptionPane.CLOSED_OPTION: svarstr2 = "Nei vel."; break; default: assert false; JOptionPane.showMessageDialog( svarstr2 int svar3 = JOptionPane.showConfirmDialog( // (3) // Ingen foreldre-ramme "Java er gøy, ikke sant?", "Bekreftelse 3", // Tittel på vinduet JOptionPane.OK_CANCEL_OPTION, // OK- og CANCEL-knappen JOptionPane.PLAIN_MESSAGE // Beskjedtypen JFPS3U 15: Grafiske brukergrensesnitt: Enkel GUI 15-17/20 String svarstr3 = null; switch(svar3) { case JOptionPane.OK_OPTION: svarstr3 = "Da er vi enige!"; break; case JOptionPane.CANCEL_OPTION: case JOptionPane.CLOSED_OPTION: svarstr3 = "Synd at du ikke vil bekrefte."; break; default: assert false; JOptionPane.showMessageDialog( svarstr3 System.exit(0 JFPS3U 15: Grafiske brukergrensesnitt: Enkel GUI 15-18/20

Støtte for enkel GUI-dialog Se filen GUIDialog.java (Program 15.4). Statiske metoder i klassen GUIDialog int lesheltall(object ledetekst) double lesflyttall(object ledetekst) String lesstreng(object ledetekst) void skrivmelding(object melding) int bekreft(object opplysninger) Beskrivelse Leser en int verdi Leser en double verdi. Leser en ikke-tom streng. Skriver en melding Bekrefter opplysninger. JFPS3U 15: Grafiske brukergrensesnitt: Enkel GUI 15-19/20 Program 15.5 viser eksempel på bruk av klassen GUIDialog. public class GUIDialogDemo { public static void main(string[] args) { GUIDialog.skrivMelding( // (1) "Du blir bedt om å skrive inn ett heltall om gangen." + " Et negativt tall vil avslutte innlesingen." int maks = 0; while (true) { int n = GUIDialog.lesHeltall("Skriv et heltall." // (2) if (n < 0) break; if (n > maks) maks = n; GUIDialog.skrivMelding("Største heltall inntastet: " + maks // (3) System.exit(0 JFPS3U 15: Grafiske brukergrensesnitt: Enkel GUI 15-20/20