GUI-programmering, del 3 Vinduslyttere Dialogvinduer GUI-komponenten JTable Egne datamodellklasser LC191D Videregående programmering Semesterplan:

Slides:



Advertisements
Liknende presentasjoner
Repetisjon innkapsling static tabell av primitiv datatype LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring.
Advertisements

Tabeller av objekter Klassen ArrayList
Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring
Hvordan bruke Lions medlemsregister?
14 okt. 2003, Arne Maus Inst. for informatikk, UiO
Ebus Management Center En liten bruksanvisning for de enkleste funksjonene.
Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring
BraWeb Bestilling.
Datafiler og serialisering Tekstfiler Scanner-klassen Binær overføring av data Direkte tilgang til filinnholdet Serialisering LC191D Videregående programmering.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Slik kommer du til «Personverninnstillinger»: Logg inn på Facebook.
Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring
Lage e-post med bilde som vedlegg
Slik kommer du til «Personverninnstillinger»: Logg inn på Facebook.
Uke 10 - Sortering, og hvordan lage en klasse for et klassebibliotek 21 okt. 2003, Arne Maus Inst. for informatikk, UiO.
Polymorfi og arv, del 1 LC191D Videregående programmering Semesterplan: Høgskolen i Sør-Trøndelag, Avdeling.
1 Litt om OO og programmering Arne Maus. 2 OO og Java (og C++, C#)  Arven fra Simula  Programstruktur i Java  Generering av objekter  Beskyttelse.
Programmering i Java versjon januar 2005 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon januar 2005 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Kap.8 Sortering og søking sist oppdatert • Del 1 Søking - lineær søking m/u sorterte elementer - binærsøking - analyse • Del 2 Sortering - ”gamle”
Objektorientert programmering i PHP del 2
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
IS-102 Klassedefinisjoner
C# for javaprogrammerere
Operativsystemer.  Tilstandsmaskiner kalles på engelsk Finite State Machines.  Tilstandsmaskiner er en metode til å beskrive systemer med logisk og.
Fag LO189D - Objektorientert programmering Objektorientert programmering© Else Lervik, TISIP - HiST/IDB vår-99Leksjon 11 Applet’s Hva karakteriserer applet’sside.
Mer om programmering av aggregeringer Repetisjon: Komposisjon og aggregering En register-klasse: modellering En register-klasse: implementering Sortering.
Å lage sikre klasser Unntaksklassene i Java-API-et Unntakshåndtering i databasesammenheng try-catch-finally-setningen Trelagsarkitektur; egen databaseklasse.
GUI-programmering, del 2 Enkle layout-håndterere Forskjellige typer hendelser og lyttere GUI-komponenter for valg (oppgave) LC191D Videregående programmering.
Jæger: Robuste og sikre systemer INF150 Programmering torsdag 31.8 Kapittel 3: Grunnlag for programmering i Visual Basic.
Objekt Orientert Programmering (OOP). Objektorientering (OO)1/6 Objektorientering er en grunnleggende måte å organisere komplekse fenomener på.
Opplæring: PC-er DMF DatoVersjonForfatterGodkjent avEndringer utført André S. MathiesenTore Jo NilsenOpprettet Jan Inge S. OhrenOppdatert.
Læringsmål for forelesningen
Releasedokumentasjon versjon 6.1 – Vedlegg –Begrenset tilgang til brukere uten sertifikat Hvis følgende innstillinger er satt for leverandøren:
Singleton & Adapter Pattern Gruppe 3. Singleton Pattern Sørger for at en klasse kun kan ha en instans Vanligvis implementert med globale variabler –Singleton.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Java 11 Programmering med og uten objekter: hva er forskjellen?
Andre funksjoner. Her kommer en beskrivelse av søkefunksjoner, knapper og annen funksjonalitet. 2.
Arv og polymorfi, del 3 Modifikatoren abstract side 2-3
Å lese tall fra en fil, klassen Scanner 1.Et Scanner-objekt kan knyttes til et strømobjekt eller til en streng. 2.Kan skanne teksten etter data av ulike.
Finne og gå til et chatterom Bruk søk i Lync til å finne rom som du har tilgang til. 1.I hovedvinduet i Lync klikker du kategorien Chatterom. 2.I søkeboksen.
Programmering i Java tilpasset undervisning våren 2009 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet.
Tabeller Dette er en tabell, eller array. Den kan defineres sånn som dette: public int[] heltallsTabell = new int[11]; //Her er 11 tabellens lengde for.
Jæger: Robuste og sikre systemer INF150 Programmering Kapittel 2: Problemløsning Kapittel 3.1 og 3.2.
Hovedprosjekt 10 E Språktreningsprogram i Java utført av Ingrid Bork.
1 Java Database Connectivity (JDBC) Norvald H. Ryeng
Opplæring: Pålogging Prosedyre for logge på og av, låse og åpne PC’er DatoVersjonForfatterGodkjent avEndringer utført André S. MathiesenTore.
Main metoden n public static void main(String[] args){ } n Inni denne metoden skjer alt! n Det kan bare finnes en main metode per program. n Den kan ligge.
Fag LO189D - Objektorientert programmering Objektorientert programmering© Else Lervik, TISIP - HiST/IDB vår-99Leksjon 10 Mer om programmering av GUI Dialoger.
Programmering i Java versjon september 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Object  Klassen i java  Alle klasser arver fra denne om ikke noe annet blir spesifisert  ArrayList.add(Object instans)  Alle elementer formes til Object.
Ekstra mange tips til Oblig 3! 12. mars 2007 Are Magnus Bruaset og Arild Waaler Inst. for informatikk, UiO.
INF1000 (Uke 14) Eksamen V06 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Arild Waaler.
Byggeklosser i java  Klassedefinisjon  Variabel deklarasjon  Metodedeklarasjoner  En ordentlig klasse  Spesielle/kryptiske skrivemåter  løkker og.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Kapittel 4 Skriving av klasser. 4.1 Anatomien til ein klasse Så langt har vi brukt ferdige klasser frå klassebiblioteket i Java Vi lagar objekt og brukar.
Kapittel 10 Exceptions Handtering av exceptions Ein exception er eit objekt som representerer ein feil eller eit unntak Exceptions blir kasta av.
IN3030 – Effektiv parallellprogrammering Uke 1 2. del, våren 2019
Utskrift av presentasjonen:

GUI-programmering, del 3 Vinduslyttere Dialogvinduer GUI-komponenten JTable Egne datamodellklasser LC191D Videregående programmering Semesterplan: 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 : 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 Kodedetaljene knyttet til knappene i MinDialog er ikke pensum GUI-komponenten tabell (JTable), gjennomgås inkl. oppgave side GridBagLayout som layouthåndterer. Gjennomgås ikke. Ikke direkte pensum, men bør leses for å forstå det store eksemplet i boka Oppussingseksemplet, del 4. Gjennomgås ikke pga størrelsen, men pensum. Eksempel på bruk av enum (kap. 15.6) Å 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

Vinduer i Java Primærvindu (klassen JFrame) med knapper for minimering, maksimering og lukking og tittellinje 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. Sekundærvindu (dialog, klassen JDialog), lukkes dersom foreldrevinduet lukkes Forelesning 12, side 3

Klassetreet med vindusklassene Object Component JFrame JInternalFrame Dialog JDialog Container JComponent FrameJWindow Window Forelesning 12, side 4

Klassetreet med vindusklassene Object Component JFrame JInternalFrame Dialog JDialog Container JComponent FrameJWindow Window Forelesning 12, side 5 set/getBackground() addFocusListener() setSize() setLocation() hasFocus() setLayout() add() De gamle AWT-klassene for Button, Label, osv. er Componenter, men ikke Containere. LookAndFeel ToolTips De nye Swing- komponentene ligger under Jcomponent og er dermed også Containere vinduer uten ramme pack() addWindowListener() dispose() setTitle() add(), erstatter metoden arvet fra Container() 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

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 , men les kap først Nytt navn skrives inn og sendes tilbake til hovedvinduet. Navnet endres, og resultatet sendes tilbake til hovedvinduet foreldrevindu med to barnevinduer Forelesning 12, side 8

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 visDialog() 1 2 Forelesning 12, side 10

Meldingsutvekslingen i det aller enkleste dialogvinduet System. out foreldre- vindu knappelytter trykk knapp dialog- boks knappelytterokKnapp ”klient” actionPerformed() visDialog() trykk actionPerformed() setVisible(true) setVisible(false) println(”OK trykket…”) setVisible() ikke retur før meldingen setVisible(false) sendes til dialogboksen

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. Vis programliste 19.3 side 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

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 Forelesning 12, side 13

Overføring av data mellom foreldrevindu og dialogvindu Hansen, Ole Hansen, Ole Petter Forelesning 12, side 14

Tester PersonDialog Vis programliste 19.5 side Foreldrevindu extends JFrame PersonDialog extends MinDialog JOptionPane, kommer dersom brukeren lukker navnedialogen ved å trykke i øverste høyre hjørne 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 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

Å 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