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

Like dokumenter
JPanel. Komponent hieraki. Window/JWindow. Applet/JApplet. JDialog. JFrame

Kapittel 15: Grafiske brukergrensesnitt. Del II

INF1010 Grafisk brukergrensesni3 med Swing og awt del 1 INF1010

HØGSKOLEN I SØR-TRØNDELAG

Gjennomgang av eksamen H99

LO191D/LC191D Videregående programmering

INF Seminaroppgaver til uke 3

INF Våren Li' repe$sjon om Tråder og GUI. Stein Gjessing, Ins$tu' for informa$kk, Universitetet i Oslo. Ins$tu' for informa$kk

LC191D/LO191D Videregående programmering mai 2010

Vi lærte sist å lage vinduer. Om å lage et vindu. GUI (Graphical User Interface)-programmering. Inf GUI - del 2

Klassen javax.swing.joptionpane

INF1010 Arv. Marit Nybakken 2. februar 2004

import javax.swing.*; import java.awt.*;

HØGSKOLEN I SØR-TRØNDELAG

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

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

UNIVERSITETET I OSLO

Grafiske brukergrensesnitt med Swing og AWT

Klasser skal lages slik at de i minst mulig grad er avhengig av at klienten gjør bestemte ting STOL ALDRI PÅ KLIENTEN!

Grafisk Brukergrensesnitt

INF1010. Grafisk brukergrensesni. med Swing og awt del 2. INF Grafisk brukergrensesni4 II

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring AITeL

Innhold. 3.7 Å lese data fra brukeren Klassen String Å formatere utskrift av desimaltall... 80

En klasse som arver, eller selv deklarerer en abstrakt metode, må deklareres som abstrakt.

TOD063 Datastrukturer og algoritmer

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

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

Antall sider (inkl. forsiden): 7. Alle trykte og håndskrevne

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

Kapittel 15: Grafiske brukergrensesnitt: Enkel GUI. Del I

Kapittel 15: Grafiske brukergrensesnitt: Enkel GUI. Del I

ANTDAGER = 358; I Ifra nyttår 08 til 08 1ed julaften

LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring. Else Lervik, januar 2012.

Kapittel 15: Grafiske brukergrensesnitt. Del II

Læringsmål for forelesningen

Forklaring til programmet AbstraktKontoTest.java med tilhørende filer Konto.java, KredittKonto.java, SpareKonto.java

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

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

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

GUI - del 2. Stein Gjessing Inst for Informatikk Univ. i Oslo

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

EKSAMEN I FAG TDT4100 Objekt-orientert programmering. Fredag 3. juni 2005 KL

Å bruke Java API-et til å sortere tabeller/arraylister der elementene er (referanser til) objekter

AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE

Videregående programmering 6

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

2 Om statiske variable/konstanter og statiske metoder.

Kapittel 7: Mer om arv

HØGSKOLEN I SØR-TRØNDELAG

Tittel Objektorientert systemutvikling 1. Eksamenstid, fra-til Ant. oppgaver 6

INF1000 Metoder. Marit Nybakken 16. februar 2004

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

HØGSKOLEN I SØR-TRØNDELAG

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

LO191D/LC191D Videregående programmering Løsningsforslag eksamen mai Oppgave 1

Vi lærte sist å lage vinduer. Om å lage et vindu. GUI (Graphical User Interface)-programmering. GUI - del 2

UNIVERSITETET I OSLO

Løsningsforslag ukeoppg. 9: okt (INF Høst 2011)

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

Repitisjonskurs. Arv, Subklasser og Grensesnitt

INF Notater. Veronika Heimsbakk 10. juni 2012

IN1010 våren januar. Objektorientering i Java

GUI («Graphical User Interface») del 2

J2EE. CMP Entity Beans, Transaksjoner, JSP

EKSAMEN. Objektorientert programmering

Arv. Book book1 = new Book(); book1. title = "Sofies verden" class Book { String title; } class Dictiona ry extends Book {

Kanter, kanter, mange mangekanter

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

class Book { String title; } class Dictionary extends Book { int wordcount; } class CartoonAlbum extends Book { int stripcount; }

UNIVERSITETET I OSLO

HØGSKOLEN I SØR-TRØNDELAG

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

Inf 1010 GUI - del 2

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

Eksekveringsrekkefølgen (del 1) Oppgave 1. Eksekveringsrekkefølgen (del 2) Kommentar til oppgave 1. } // class Bolighus

Velkommen som ny bruker av Uni Økonomi!

INF1010 LISTER. Listeelementer og listeoperasjoner. Foran. Bak

Forelesningsquiz. Forelesning inf Java 5. Sett dere to (eller tre) sammen og besvar de fire spørsmålene på utdelt ark. Tid: 15 min.

Gjøre noe i hele treet = kalle på samme metode i alle objekten. Java datastruktur Klassestruktur

UNIVERSITETET I BERGEN Det matematisk-naturvitenskapelige fakultet

UNIVERSITETET I OSLO

Argumenter fra kommandolinjen

Obligatorisk oppgave 4: Lege/Resept

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

Programmering i C++ Løsningsforslag Eksamen høsten 2005

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

GUI («Graphical User Interface») del 2

BOKMÅL Side 1 av 5. KONTERINGSEKSAMEN I FAG TDT4102 Prosedyre og objektorientert programmering. Onsdag 6. august 2008 Kl

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

INF1010 våren januar. Objektorientering i Java

HØGSKOLEN I SØR-TRØNDELAG

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; }

HØGSKOLEN I SØR-TRØNDELAG

Oblig 4Hybelhus litt mer tips enn i oppgaven

1. NetBeans IDE: Lage en enkel mobilapplikasjon

EKSAMEN I FAG TDT4180/IT2401 MMI Onsdag 23. mai 2007 Tid: kl

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

Hvordan hente ut listen over et hagelags medlemmer fra Hageselskapets nye portal

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

UNIVERSITETET I OSLO

Transkript:

GUI-programmering, del 3 Vinduslyttere Dialogvinduer GUI-komponenten JTable Egne datamodellklasser LC191D Videregående programmering Semesterplan: http://aitel.hist.no/fag/vprg/index_lc191d.php Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring Else Lervik, februar 2012 En oversikt over kapittel 19 i boka Kap. 19 i boka forelesning 29.02.2012: 19.1 Menyer, les på egen hånd 19.2 Knapperader, les på egen hånd 19.3 Ulike typer vinduer, gjennomgås raskt 19.4 Vinduslyttere, gjennomgås raskt 19.5 Dialogvinduer, gjennomgås grundig, inkl. oppgave side 651. Se også eksempel kap. 24.4, side 832-837. Kodedetaljene knyttet til knappene i MinDialog er ikke pensum. 19.6 GUI-komponenten tabell (JTable), gjennomgås inkl. oppgave side 654 19.7 GridBagLayout som layouthåndterer. Gjennomgås ikke. Ikke direkte pensum, men bør leses for å forstå det store eksemplet i boka. 19.8 Oppussingseksemplet, del 4. Gjennomgås ikke pga størrelsen, men pensum. Eksempel på bruk av enum (kap. 15.6). 19.9 Å lage egne datamodellklasser, pensum. Gjennomgår oppg. side 674 i stedet for det store eksemplet. (Se også løsningsforslaget øving 11.) Enum kapittel 15.6 leses på egen hånd (ikke eksamensaktuelt). Forelesning 12, side 2 1

Vinduer i Java Primærvindu (klassen JFrame) med knapper for minimering, maksimering og lukking og tittellinje Sekundærvindu (dialog, klassen JDialog), lukkes dersom foreldrevinduet lukkes Interne vinduer (klassen JInternalFrame) med knapper for minimering, maksimering og lukking. Ingen deler av et internt vindu kan vises utenfor det primærvinduet det tilhører. Forelesning 12, side 3 Klassetreet med vindusklassene Object Component Container JComponent Window JInternalFrame JWindow Frame Dialog JFrame JDialog Forelesning 12, side 4 2

Klassetreet med vindusklassene De gamle AWT-klassene for Button, Label, osv. er Componenter, men ikke Containere. Object Component Container set/getbackground() addfocuslistener() setsize() setlocation() hasfocus() setlayout() add() LookAndFeel ToolTips JComponent Window pack() addwindowlistener() dispose() settitle() JInternalFrame JWindow Frame Dialog De nye Swingkomponentene ligger under Jcomponent og er dermed også Containere vinduer uten ramme JFrame JDialog add(), erstatter metoden arvet fra Container() Forelesning 12, side 5 setdefaultcloseoperation() Vinduslyttere Hittil setdefaultcloseoperation(jframe.exit_on_close); Av og til trenger vi selv å kontrollere lukkingen, for eksempel dersom filer skal lukkes: setdefaultcloseoperation(windowconstants.do_nothing_on_close); Interface java.awt.event.windowlistener: void windowactivated(windowevent hendelse); void windowclosed(windowevent hendelse); void windowclosing(windowevent hendelse); void windowdeactivated(windowevent hendelse); void windowdeiconified(windowevent hendelse); void windowiconified(windowevent hendelse); void windowopened(windowevent hendelse); Forelesning 12, side 6 3

Klassen WindowAdapter Et vinduslytterobjekt må tilhøre en klasse som implementerer interfacet WindowListener Vanligvis er de fleste metodene tomme Det er derfor laget en adapter-klasse (gjelder alle awt-lytter-interface med mer enn én metode): package java.awt.event; public abstract class WindowAdapter implements WindowListener { public void windowopened(windowevent hendelse) {} public void windowclosing(windowevent hendelse) {} //... og så videre, bare tomme metoder } Eksempel på bruk private class Vinduslytter extends WindowAdapter { public void windowclosing(windowevent hendelse) {... sett inn kode her... dispose(); System.exit(0); // hvis programmet skal avsluttes } } Forelesning 12, side 7 Dialogvinduer, eksempel se kode kap. 24.4, side 832-837, men les kap. 19.5 først foreldrevindu med to barnevinduer Nytt navn skrives inn og sendes tilbake til hovedvinduet. Navnet endres, og resultatet sendes tilbake til hovedvinduet Forelesning 12, side 8 4

Dialogvinduer Et dialogvindu er et sekundærvindu, det vil si at det alltid bør være knyttet til et foreldrevindu. Et modalt dialogvindu hindrer brukeren tilgang til andre vinduer så lenge dialogvinduet er åpent. Ikke-modale vinduer er mer praktiske for brukeren, men krever mer av programmereren i og med at flere vinduer må holdes oppdatert på en gang. Forelesning 12, side 9 Det enkleste dialogvinduet 1 2 visdialog() Forelesning 12, side 10 5

Meldingsutvekslingen i det aller enkleste dialogvinduet System. out klient foreldrevindu knapp knappelytter dialogboks okknapp knappelytter setvisible() trykk actionperformed() visdialog() setvisible(true) trykk actionperformed() setvisible(false) println( OK trykket ) ikke retur før meldingen setvisible(false) sendes til dialogboksen Vis programliste 19.3 side 638-640 Hvordan gjør vi det, kort fortalt 1. Et dialogvindu er en subklasse til JDialog. Den må ha en konstruktør som kaller superklassen sin konstruktør med argumentet modal = true. (Standardkonstruktøren til JDialog lager en ikke-modal dialog.) 2. La hvert enkelt dialogvindu ha en metode med navn visdialog() e.l. Inne i denne metoden finner vi kallet setvisible(true). For modale dialogvinduer vil denne metoden ikke returnere før setvisible(false) er kalt. 3. All aktivitet i dialogen må avsluttes med kallet setvisible(false). 4. Lag foreldrevinduet med dialogene som objektvariabler. Gjør oppgave 1 side 651: Endre programliste 19.3 slik at MiniDialog inneholder et tekstfelt som brukeren kan skrive i. Endre visdialog() slik at den returnerer denne teksten som en streng til foreldrevinduet dersom bruker trykker på OK-knappen. Hvis brukeren trykker på Avbryt-knappen, skal metoden returnere null. Foreldrevinduet skal skrive ut teksten rett under trykknappen "Trykk her!" Forelesning 12, side 12 6

En standard OK-Avbryt-dialog OK betyr at endringene som er lagt inn i dialogvinduet skal gjelde. Avbryt betyr at endringene ikke skal gjelde. Vi lager en klasse som beskriver et dialogvindu med disse knappene og lar våre øvrige dialogvinduer være subklasser til denne. Klassen heter MinDialog og ligger i pakken mittbibliotek. Øvrig funksjonalitet: Klassen inneholder metoden okdata(). En subklasse kan lage sin egen utgave av denne metoden for kontroll av inndata. Dersom brukeren trykker OK vil ikke dette aksepteres dersom okdata() returnerer false. Dersom brukeren prøver å lukke vinduet ved å trykke i øverste høyre hjørne, vil spørsmålet Skal eventuelle registrerte data lagres? komme. Hvis brukeren svarer ja, vil dataene lagres dersom okdata() returnerer true. OK-knappen er definert som standardknapp. Escape-tasten er knyttet til Avbryt-knappen. Vis programliste 19.4 side 643-645 Forelesning 12, side 13 Overføring av data mellom foreldrevindu og dialogvindu Hansen, Ole Hansen, Ole Petter Forelesning 12, side 14 7

Tester PersonDialog Foreldrevindu extends JFrame PersonDialog extends MinDialog JOptionPane, kommer dersom brukeren lukker navnedialogen ved å trykke i øverste høyre hjørne Vis programliste 19.5 side 647-651 Forelesning 12, side 15 GUI-komponenten tabell (klassen JTable) En tabell har kolonner og linjer. Kolonnene har navn. Brukeren kan velge linjer i tabellen ved å klikke på dem. Kan sette opp om det skal være mulig å velge kun én linje av gangen, ett intervall av linjer, eller flere intervall. Valget håndteres omtrent på samme måte som for lister. Standard er at brukeren velger linjer, ikke celler. Brukeren kan endre dataene direkte i cellene. Vis programliste 19.6 side 652-653. Gjør oppgaven side 654: Endre programmet foran slik at opplysninger om nye byer kan legges inn. Modellklassen du skal bruke, heter DefaultTableModel. Forelesning 12, side 16 8

Å lage egne datamodellklasser Trenger å forholde oss til den underliggende datamodellen når datainnholdet i GUI-komponentene liste (JList) og tabell (JTable) skal oppdateres DefaultListModel og DefaultTableModel kan brukes Da kopierer vi våre egne data inn i objekter av disse klassene Kan også lage våre egne En bedre og mer direkte løsning, da bruker vi våre egne klasser Datamodell for JList Subklasse til AbstractListModel Må implementere Object getelementat(int indeks) og int getsize() Må varsle datamodellen når dataene er forandret: protected metode fireintervaladded() (flere metoder, se online API-dok.) kaller den fra en egenlaget offentlig metode Datamodell for JTable Subklasse til AbstractTableModel Må implementere int getcolumncount(), int getrowcount() og Object getvalueat(int rad, int kolonne) Må varsle datamodellen når dataene er forandret: firetabledatachanged() (flere metoder, se online API-dok.) Kan selvfølgelig lage egne utgave av arvede metoder, dersom ønskelig Gjør oppgaven side 674: I oppgaven på side 654 brukte du DefaultTableModel. Skift ut denne med en subklasse til AbstractTableModel. Forelesning 12, side 17 9