Programmering i Java versjon 2001-05-16 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.

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
Ebus Management Center En liten bruksanvisning for de enkleste funksjonene.
GUI-programmering, del 3 Vinduslyttere Dialogvinduer GUI-komponenten JTable Egne datamodellklasser LC191D Videregående programmering Semesterplan:
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.
Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring
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.
Uke 10 - Sortering, og hvordan lage en klasse for et klassebibliotek 21 okt. 2003, Arne Maus Inst. for informatikk, UiO.
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.
Programmering i Java versjon januar 2005 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Samarbeid mellom objekter
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 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.
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.
Å 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.
Læringsmål for forelesningen
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 januar 2005 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 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 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
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 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 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.
Å 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.
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.
Fag LO189D - Objektorientert programmering Objektorientert programmering© Else Lervik, TISIP - HiST/IDB vår-99Leksjon 9 GUI-komponenter De vanligste GUI-komponenteneside.
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.
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
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.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
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 9 Polymorfi. 9.1 Sein binding Ofte er det perfekt match mellom typen til ein variabel og objektet han refererer til ChessPiece bishop;... bishop.
Variabler, datatyper og uttrykk
Utskrift av presentasjonen:

Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 15 Å lage brukergrensesnitt Menyerside 2-3 Knapperaderside 4 Dialogvinduer, introduksjon side 5-9 En standard OK-Avbryt-dialogside 10 Overføring av data mellom foreldrevindu og dialogvinduside Oppussingseksemplet, nytt GUIside 13 GridBagLayout som layout-håndtererside Kan vi styre størrelsen på komponentene?side 17 GUI-komponenten JTableside GUI til oppussingsprosjektetside 20

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 15, side 2 Menyer generelt MenuLookDemo er hentet fra Sun sine sider via JMenu(How to use Menus) i online API-dokumentasjonen.

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 15, side 3 Menyer i denne boka class VinduMedMeny extends VinduMedExit { private Container guiBeholder; public VinduMedMeny(){ super("Menytest"); guiBeholder = getContentPane(); MenyLytter lytteren = new MenyLytter(); JMenu menyen = new JMenu("Farge"); JMenuItem menypost = new JMenuItem("Gul"); menyen.add(menypost); menypost.addActionListener(lytteren); //…tilsvarende for rød og blå JMenuBar menylinje = new JMenuBar(); menylinje.add(menyen); setJMenuBar(menylinje); } private class MenyLytter implements ActionListener { public void actionPerformed(ActionEvent hendelse) { String kommando = hendelse.getActionCommand(); if (kommando.equals("Gul")) guiBeholder.setBackground(Color.yellow); else if (kommando.equals("Rød")) guiBeholder.setBackground(Color.red); else guiBeholder.setBackground(Color.blue); } Et menyvalg genererer en ActionEvent. menylinje (JMenuBar) meny (JMenu) menypost (JMenuItem) Gjør oppgave 1 side 453.

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 15, side 4 Knapperader class VinduMedKnapperad extends VinduMedExit { private Container guiBeholder; private JButton gulKnapp; private JButton rødKnapp; private JButton blåKnapp; public VinduMedKnapperad(){ super("Knapperad-test"); guiBeholder = getContentPane(); KnappeLytter lytteren = new KnappeLytter(); JToolBar knapperad = new JToolBar(); Icon ikon = new ImageIcon("gul.gif"); gulKnapp = new JButton(ikon); gulKnapp.addActionListener(lytteren); knapperad.add(gulKnapp); //… tilsvarende for rød og blå knapp guiBeholder.add(knapperad, BorderLayout.NORTH); } private class KnappeLytter implements ActionListener { public void actionPerformed(ActionEvent hendelse) { JButton knapp = (JButton) hendelse.getSource(); if (knapp == gulKnapp) guiBeholder.setBackground(Color.yellow); else if (knapp == rødKnapp) guiBeholder.setBackground(Color.red); else guiBeholder.setBackground(Color.blue); } knapperad, verktøylinje (JToolBar) knapp (JButton) Knapperaden på ”vanlig” plass knapperaden er dratt vekk fra sin vanlige plass,slik at den har blitt et eget vindu

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 15, side 5 Dialogvinduer, eksempel Nytt navn skrives inn og sendes tilbake til hovedvinduet. Navnet endres, og resultatet sendes tilbake til hovedvinduet foreldrevindu med to barnevinduer

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 15, side 6 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. Vi ser kun på modale dialogvinduer i denne boka.

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 15, side 7 Det enkleste dialogvinduet visDialog() 1 2

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 15, side 8 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(true) ikke retur før meldingen setVisible(false) sendes til dialogboksen

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 15, side 9 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 15.3 side Gjør oppgave 1 side 471.

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 15, side 10 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. –Det er knyttet akselerasjonstaster til knappene. Enter-tasten er knyttet til OK-knappen (krever at OK-knappen har fokus). Escape-tasten er knyttet til Avbryt-knappen (uavhengig av hvor fokus er). Vis programliste 15.4 side

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 15, side 11 Overføring av data mellom foreldrevindu og dialogvindu Bergen, Betae Bergen, Beate

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 15, side 12 Tester NavneDialog Vis programliste 15.5 side Foreldrevindu extends VinduMedExit NavneDialog extends MinDialog JOptionPane, kommer dersom brukeren lukker navnedialogen ved å trykke i øverste høyre hjørne Gjør oppgave 2 side 471.

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 15, side 13 Oppussingseksemplet, siste utgave - klassene fra kapittel 12 med nytt GUI JTable JList

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 15, side 14 GridBagLayout som layout-håndterer GridBagLayout er den mest generelle layout-håndtereren av alle, og ofte den eneste praktisk brukbare. Den egner seg ikke for prøv- og feil-metoden. Den krever nøyaktig og detaljert planlegging. Den har mange parametre, en feil kan gi uante konsekvenser. Lag først en skisse av vinduet: –Del det opp i ruter ved hjelp av loddrette og vannrette streker. –Ikke mer enn en komponent i hver rute. –En komponent kan gjerne dekke flere ruter. På grunnlag av skissen setter vi opp kravene til hver enkelt komponent.

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 15, side 15 Eksempel knappe- raden tabellen til venstre listen til høyre ledeteksten nederst tekstboksen gridx00312 gridy01122 gridwidth43111 gridheight11111 fillNONEBOTH NONEHORIZONTAL anchorWESTCENTER EASTWEST

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 15, side 16 Eksempel, forts. Container guiBeholder = getContentPane(); guiBeholder.setLayout(new GridBagLayout()); // denne må vi ikke glemme! GridBagConstraints krav = new GridBagConstraints(); krav.insets = new Insets(5, 5, 5, 5); // luft rundt en komponent, fast for alle krav.weightx = 0.5; // fast for alle komponentene krav.weighty = 0.5; /* Knapperaden */ krav.gridx = 0; krav.gridy = 0; krav.gridwidth = 4; krav.gridheight = 1; krav.fill = GridBagConstraints.NONE; krav.anchor = GridBagConstraints.WEST; guiBeholder.add(knapperad, krav); //..osv. for alle komponentene

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 15, side 17 Kan vi styre størrelsen på komponentene? Hva med metoden setSize() i klassen Component? –Den arves av alle GUI-komponentene. –Vi har brukt den til å sette størrelsen på vinduer. –For andre komponenter virker den bare dersom vi ikke bruker noen layout-håndterer i det hele tatt. Komponentene legges da ut i henhold til oppgitte pikselverdier. Hva med metodene setMaximumSize(), setMinimumSize() og setPreferredSize() i klassen JComponent? –Metodene arves av alle Swing-komponenter. –BorderLayout og GridLayout bryr seg ikke om noen av disse. –FlowLayout og GridBagLayout tar hensyn til en komponents ”preferred size”. –BoxLayout tar hensyn til alle ønskene. (Vurdert til å være nesten like vanskelig å bruke som GridBagLayout.) –Argumentet til alle disse metodene er et objekt av klassen Dimension. Konstruktør: Dimension(int bredde, int høyde). –Eksempel: liste.setPreferredSize(new Dimension(500, 300))

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 15, side 18 GUI-komponenten JTable En klasse med mange muligheter. Vi begrenser oss til følgende: –Tabellen har et fast antall kolonner med bestemte kolonnenavn. –Brukeren kan justere bredden på den enkelte kolonnen i tabellen. Dette fører til at andre kolonner blir smalere. –Brukeren kan ikke justere tabellstørrelsen (bredden og lengden på tabellen som helhet). –Brukeren kan ikke forandre på dataene i tabellen. –Programmet kan legge inn og ta ut rader i tabellen. Endring av data foregår ved at programmet tar ut en rad og legger inn en ny på denne sin plass. –Brukeren kan velge en enkelt rad i tabellen. Hvorvidt flere rader kan velges bestemmes av programmet på samme måte som for lister. –Programmet håndterer valget ved at brukeren trykker på en trykknapp.

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 15, side 19 Litt om den bakenforliggende ”modellen” Dersom innholdet i tabellen skal forandres, må vi gjøre endringer i den bakenforliggende datamodellen på samme måte som for lister. –Repetisjon: DefaulListModel listeinnhold = new DefaultlistModel(); JList liste = new JList(listeinnhold); listeinnhold.add(objekt); // toString()-metoden brukes ved presentasjon For tabeller bruker vi DefaultTableModel med en liten korreksjon: –Standardutgaven forutsetter at brukeren skal kunne editere i cellene i tabellen, det håndterer ikke våre program. –Vi lager en subklasse til DefaultTableModel der dette forbys: package mittBibliotek; import javax.swing.table.*; public class MinTabellModell extends DefaultTableModel { public MinTabellModell(String[] kolonnenavn) { super(kolonnenavn, 0); // kolonneoverskrifter, antall rader } public boolean isCellEditable(int rad, int kolonne) { return false; }

Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 15, side 20 GUI til oppussingsprosjektet Filen Dialoger.java: –et dialogvindu for hvert av “hovedobjektene” i det problemet vi skal løse: FlateDialog, MalingDialog, TapetDialog og BeleggDialog. Filen Konstanter.java: –et interface med mange av konstantene som brukes i de forskjellige vinduene. Eksempler på konstanter er navn på kommandoer, menyposter og lengder på tekstfelt. Ved å samle konstanter som brukes i flere klasser i et interface kan klasser som trenger konstantene få tilgang til dem ved å implementere interfacet. Filen Oppussingkap15.java: –primærvinduet –main() Vis programliste 15.7, 15.8 og 15.9 fra side 480 og utover.