Fag LO189D - Objektorientert programmering Objektorientert programmering© Else Lervik, TISIP - HiST/IDB vår-99Leksjon 10 Mer om programmering av GUI Dialoger.

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
14 okt. 2003, Arne Maus Inst. for informatikk, UiO
GUI-programmering, del 3 Vinduslyttere Dialogvinduer GUI-komponenten JTable Egne datamodellklasser LC191D Videregående programmering Semesterplan:
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.
Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring
Uke 10 - Sortering, og hvordan lage en klasse for et klassebibliotek 21 okt. 2003, Arne Maus Inst. for informatikk, UiO.
Uke 8 - Mer om: Objekter, klasser og pekere
1 Java 6 Mer om metoder Tekster Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet i Oslo.
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.
Java 4 Mer om forgreninger While-løkker Ole Christian Lingjærde
Objekt, Instanser og referanser + litt til. Objekter  Instanser  En instans er et objekt av en bestemt klasse  Instanser blir laget ved å kalle klassens.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
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
Eiendomregister mars 2002 Arne Maus. import java.util.*; import inf101.*; /* Klasse med main() som starter hele programmet */ class EiendomsregisterMain.
C# for javaprogrammerere
En gang til!? .
Jæger: Robuste og sikre systemer INF150 Programmering mandag 2.10 Default values – standardverdier ved oppstart MER OM: Sub-prosedyrer og sub-funksjoner.
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.
INF150 Programmering mandag 11.9
Objekt Orientert Programmering (OOP). Objektorientering (OO)1/6 Objektorientering er en grunnleggende måte å organisere komplekse fenomener på.
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 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 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 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.
Objektorientert programmering
Java 11 Programmering med og uten objekter: hva er forskjellen?
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.
Programmering i Java tilpasset undervisning våren 2009 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet.
Fag LO189D - Objektorientert programmering Objektorientert programmering© Else Lervik, TISIP - HiST/IDB vår-99Leksjon 7 Grafikk Fra AWT til Swingside 2.
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.
Fag LO189D - Objektorientert programmering Objektorientert programmering© Else Lervik, TISIP - HiST/IDB vår-99Leksjon 9 GUI-komponenter De vanligste GUI-komponenteneside.
INF1000 (Uke 14) Resten av eksamen H03 + del av V05 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Anja B.
Objekt, Instanser og referanser + litt til. Objekter  Instanser  Kan sees på som det samme. Personen Per kan være både et objekt og en instans av klassen.
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.
INF Objektorientert programmering
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.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
INF1000 (Uke 4) Mer om forgreninger, While-løkker
INF1000 (Uke 11) Programmering
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 3 Bruk av klasser og objekt. 3.1 Å lage objekt Eit variabelnamn i Java representerer Ein primitiv verdi (f eks boolean, int ) Eit objekt (f eks.
Utskrift av presentasjonen:

Fag LO189D - Objektorientert programmering Objektorientert programmering© Else Lervik, TISIP - HiST/IDB vår-99Leksjon 10 Mer om programmering av GUI Dialoger side 2 Ferdigdefinerte dialogbokserside 3-4 Å lage egen dialogboks, en meldingsboksside 5-6 Utveksling av data mellom eier og dialogvinduside 7-9 Arv og brukergrensesnitt side GridLayoutside 16 GridBagLayoutside 17-18

Objektorientert programmering© Else Lervik, TISIP - HiST/IDB vår-99Leksjon 10, side 2 Dialoger Eksempler: Meldingsbokser, ja/nei- bokser, innlesing av data Modal eller ikke-modal Har alltid en JFrame som eier, ved utprøving kan denne være null En JDialog kan ikke være en subklasse til CloseableFrame Vi må derfor selv –sette størrelsen –håndtere lukking Det fins en del ferdigdefinerte dialoger (JOptionPane). Dette er imidlertid ikke klasser som du kan lage ”extensions ” til. Object Component Container Window FrameDialog JComponent JOptionPane JDialog Closeable Frame JFrame

Objektorientert programmering© Else Lervik, TISIP - HiST/IDB vår-99Leksjon 10, side 3 Ferdigdefinerte dialogbokser, eksempler Enkel meldingsboks Spørsmål med ja-/nei-svar Valgmuligheter! Inputfelt. Flere eksempler: Kjør Ex s. 508, OptionDialogTest.java

Objektorientert programmering© Else Lervik, TISIP - HiST/IDB vår-99Leksjon 10, side 4 Mange muligheter! Type –navnet på metoden er showXxxDialog() Message Type (konstant) –bestemmer ikonet til venstre Message (Object) –meldingen! Confirm (konstant) –knappene nederst Option (Object[]) –brukernes valg ved Option-melding Input –input-metode ved Input- melding Statiske metoder i klassen javax.swing.JOptionPane. Returverdiene forteller de valg som brukeren har gjort.

Objektorientert programmering© Else Lervik, TISIP - HiST/IDB vår-99Leksjon 10, side 5 class Meldingsboks extends JDialog { public Meldingsboks(JFrame eier, String tittel, String tekst) { super(eier, tittel, true); // true = modal setSize(200, 100); Container innhold = getContentPane(); JLabel teksten = new JLabel(tekst); innhold.add(teksten, BorderLayout.CENTER); JButton ok = new JButton("Ok"); innhold.add(ok, BorderLayout.SOUTH); ok.addActionListener(okKommando); addWindowListener(lukkKommando); } // Meldingsboks private class OkLytter implements ActionListener { public void actionPerformed(ActionEvent hendelse) { setVisible(false); } } // okLytter private class VindusLytter extends WindowAdapter { public void windowClosing(WindowEvent hendelse) { setVisible(false); } } // okLytter OkLytter okKommando = new OkLytter(); VindusLytter lukkKommando = new VindusLytter(); } // Meldingsboks Å lage en egen dialog, en enkel meldingsboks Testprogrammet kan prøve boksen slik: Meldingsboks test = new Meldingsboks (null, "Meldingsboks", ”Du trykket!"); test.show();

Objektorientert programmering© Else Lervik, TISIP - HiST/IDB vår-99Leksjon 10, side 6 I praksis vil en dialog alltid være knyttet til en JFrame class TestMeldingsboks extends CloseableFrame { TestMeldingsboks() { Container innhold = getContentPane(); innhold.setLayout(new FlowLayout()); JButton knapp = new JButton("Trykk her!"); innhold.add(knapp); knapp.addActionListener(visMeldingKommando); } // TestMeldingsboks private class knappLytter implements ActionListener { public void actionPerformed(ActionEvent hendelse) { melding.setVisible(true); } } // okLytter private Meldingsboks melding = new Meldingsboks(this, "Meldingsboks", "Du trykket!"); private knappLytter visMeldingKommando = new knappLytter(); static public void main(String[] args) { TestMeldingsboks test = new TestMeldingsboks(); test.show(); } } // TestMeldingsboks

Objektorientert programmering© Else Lervik, TISIP - HiST/IDB vår-99Leksjon 10, side 7 Utveksling av data mellom eier og dialogvindu Trykk her åpner dialogen med startdata Bruker kan endre dataene Ok fører til at data sendes tilbake til eiervinduet Avbryt og Lukk fører til at data ikke sendes tilbake Lag en egen klasse som inneholder dataene som skal overføres. Her bruker vi klassen Navn med to instansvariabler (fornavn og etternavn), samt konstruktør, sett- og finn-metoder. eiervindu dialogvindu

Objektorientert programmering© Else Lervik, TISIP - HiST/IDB vår-99Leksjon 10, side 8 setVisible(true) returnerer ikke før setVisible(false) eller er kalt et annet sted i programmet class Dialogvindu extends JDialog {....konstruktør.... private class OkLytter implements ActionListener { public void actionPerformed(ActionEvent hendelse) { okData = true; // data skal sendes tilbake setVisible(false); } } // okLytter...lytter til avbrytknappen...lytter til vindushendelser (lukking) public boolean visDialog(Navn data) { fornavn.setText(data.finnFornavn()); etternavn.setText(data.finnEtternavn()); okData = false; setVisible(true); if (okData) { data.settFornavn(fornavn.getText()); data.settEtternavn(etternavn.getText()); } return okData; } // visDialog...instansvariabler... } // Dialogvindu Instansvariabler: boolean okData = false; JTextField fornavn = new JTextField(20); JTextField etternavn = new JTextField(20);...lytterobjekter... Programstruktur, Dialogvindu

Objektorientert programmering© Else Lervik, TISIP - HiST/IDB vår-99Leksjon 10, side 9 fullstendig programliste vedlagt class TestDialogvindu extends CloseableFrame {....konstruktør... private class knappLytter implements ActionListener { public void actionPerformed(ActionEvent hendelse) { if (navnedialog.visDialog(etNavn)) { System.out.println("OK trykket"); } System.out.println("Navn er: " + etNavn.finnFornavn() + " " + etNavn.finnEtternavn()); } // actionPerformed } // knappLytter private Dialogvindu navnedialog = new Dialogvindu(this, "Navn"); private knappLytter visMeldingKommando = new knappLytter(); private Navn etNavn = new Navn("NN", "NN"); static public void main(String[] args) { TestDialogvindu test = new TestDialogvindu(); test.show(); } // main } // TestDialogvindu Programstruktur, TestDialogvindu

Objektorientert programmering© Else Lervik, TISIP - HiST/IDB vår-99Leksjon 10, side 10 Arv og brukergrensesnitt I tillegg til standardhierarkiet er det ofte nyttig å lage sitt eget arvehierarki for å sette farger, skrifttyper, plassering av komponenter, etc. Eksempel: JDialog EnkelBoks MinDialogMeldingsBoks fra Swing Ok-knapp, størrelse, farge, skrifttype, etc. Avbryt-knapp melding vises

Objektorientert programmering© Else Lervik, TISIP - HiST/IDB vår-99Leksjon 10, side 11 Klassen EnkelBoks public class EnkelBoks extends JDialog { public EnkelBoks(JFrame foreldre, String tittel) { super(foreldre, tittel, true); Container innhold = getContentPane(); p = new JPanel(); JButton bOK = new JButton("Ok"); bOK.addActionListener(new OkCommand()); p.add(bOK); innhold.add(p, BorderLayout.SOUTH); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { setVisible(false); } }); setSize(220, 150); setLocation(new Point(300,300)); } // enkelBoks, konstruktør …forts.

Objektorientert programmering© Else Lervik, TISIP - HiST/IDB vår-99Leksjon 10, side 12 Klassen EnkelBoks, forts class OkCommand implements ActionListener { public void actionPerformed(ActionEvent evt) { settOk(true); setVisible(false); } protected void settOk(boolean verdi) { ok = verdi; } // sett Ok protected boolean finnOk() { return ok; } // finnOk protected JPanel finnKnappePanel() { return p; } // finnPanel private JPanel p; private boolean ok; } // EnkelBoks

Objektorientert programmering© Else Lervik, TISIP - HiST/IDB vår-99Leksjon 10, side 13 Klassen Meldingsboks public class MeldingsBoks extends EnkelBoks { MeldingsBoks(JFrame foreldre, String tittel, String melding) { super(foreldre, tittel); Container innhold = getContentPane(); JPanel p = new JPanel(); tekst = new Label(melding); p.add(tekst); innhold.add(p, BorderLayout.CENTER); } // meldingsBoks, konstruktør public void settMelding(String nyMelding) { tekst.setText(nyMelding); } // settMelding private Label tekst; } // MeldingsBoks

Objektorientert programmering© Else Lervik, TISIP - HiST/IDB vår-99Leksjon 10, side 14 Klassen MinDialog public class MinDialog extends EnkelBoks { MinDialog(JFrame foreldre, String tittel) { super(foreldre, tittel); JPanel p = finnKnappePanel(); JButton bAvbryt = new JButton("Avbryt"); bAvbryt.addActionListener(new AvbrytCommand()); p.add(bAvbryt); } // minDialog, konstruktør class AvbrytCommand implements ActionListener { public void actionPerformed(ActionEvent evt) { settOk(false); setVisible(false); } } // MinDialog

Objektorientert programmering© Else Lervik, TISIP - HiST/IDB vår-99Leksjon 10, side 15 Og testprogrammet så slik ut: class TestArvehierarki { static public void main(String[] args) { EnkelBoks boks1 = new EnkelBoks(null, "En enkel boks"); boks1.show(); MeldingsBoks boks2 = new MeldingsBoks(null, "Meldingsboks", "Dette er en prøve"); boks2.show(); MinDialog boks3 = new MinDialog(null, "Skjelettet til en dialogboks"); boks3.show(); } Alle fire klassene ligger på egne filer.

Objektorientert programmering© Else Lervik, TISIP - HiST/IDB vår-99Leksjon 10, side 16 LayoutManager GridLayout Konstruktører: –GridLayout(int antRader, int antKol); –GridLayout(int antRader, int antKol, int horisontGap, int vertGap); Rader og kolonner. Alle cellene er like store. Eksempel 9-15 s Calculator. –et panel med BorderLayout –tekstfeltet legges i nord –lager et panel med plass til tallene GridLayout(4,4) –legger dette panelet i sentrum GridLayout er ofte praktisk dersom man vil ha en rad eller en kolonne med knapper (eller andre komponenter) med samme størrelse.

Objektorientert programmering© Else Lervik, TISIP - HiST/IDB vår-99Leksjon 10, side 17 LayoutManager GridBagLayout Her kan du få til det meste, men det krever god planlegging og nøyaktighet! Lag en skisse av vinduet. Del det opp i rader og kolonner slik at det ikke er mer enn en komponent i hver celle. En komponent kan legge beslag på mer enn en celle. (med pack() )

Objektorientert programmering© Else Lervik, TISIP - HiST/IDB vår-99Leksjon 10, side 18 Hvordan lage GridBagLayout? La et objekt av klassen GridBagLayout være LayoutManager for beholderen: –Container innhold = getContentPane(); // eller et panel –GridBagLayout gbl = new GridBagLayout(); –innhold.setLayout(gbl); For hver komponent skal et objekt av klassen GridBagConstraints bestemme plasseringen. Komponenten legges inn i beholderen ved å oppgi både komponentnavn og GridBagConstraints-objekt –GridBagConstraints layoutKrav = new GridBagConstraints(); –... gi verdi til layoutKrav... –innhold.ass(knapp, layoutKrav);

Objektorientert programmering© Else Lervik, TISIP - HiST/IDB vår-99Leksjon 10, side 19 GridBagConstraints Kravene settes opp ved å gi verdi til offentlige instansvariabler. Forutsetter at vinduet er delt inn i celler som forklart foran. Konstantnavnene nedenfor er definert i klassen GridBagConstraints Følgende variabler kan/må gis verdi –int gridx, intgridy - øverste venstre hjørne på komponenten –int gridwidth, gridheight - bredde og høyde på komponenten i antall kolonner. Standard er 1. –double weightx, weigthy. Boka anbefaler å sette denne til 100. Hvis du vil at komponenten aldri skal endre størrelse, kan du sette 0. –int fill - i hvilken retning skal komponenten strekke seg hvis den ikke fyller den avsatte plassen. BOTH, HORIZONTAL, VERTICAL. Standard er NONE. –int anchor - hvis komponenten har god plass, i hvilken ”ende” av den avsatte plassen skal den ha sitt feste? CENTER, NORTH, NORTHEAST, EAST, SOUTHEAST, SOUTH, SOUTHWEST, WEST, NORTHWEST. Standard er CENTER –int ipadx, ipady. Insets inset. - for å legge inn mellomrom mellom og rundt komponentene.

Objektorientert programmering© Else Lervik, TISIP - HiST/IDB vår-99Leksjon 10, side 20 Eksempel Nummererer linjer og kolonner. –(0,0) i øverste venstre hjørne Listeboksen –gridx = 0, gridy = 0 –gridwidth = 1, gridheight = 3 –Kan fylle ut i alle retninger: fill = BOTH, anchor = CENTER Øverste avkrysningsboks –gridx = 2, gridy = 0 –gridwidth = 1, gridheight = 1 –Bør ikke fylle i noen retning fill = NONE, anchor = CENTER Nederste avkrysningsboks –som øverste, men gridy = 1 Label ”Size:” –gridx = 1, gridy = 2 –gridwidth = 1, gridheight = 1 –Bør ikke fylle i noen retning fill = NONE, anchor = EAST Tekstfelt med fontstørrelse –gridx = 2, gridy = 2 –gridwidth = 1, gridheight = 1 –Kan fylle horisontalt fill = HORIZONTAL anchor = CENTER Nederste tekstfelt –gridx = 0, gridy = 3 –gridwidth = 3, gridheight = 1 –Fyller i alle retninger fill = BOTH, anchor = WEST se vedlagt programkode