PDA-applikationer med .NET och Mobiltelefonapplikationer med J2ME: Lektion 4

Idag: Kort repetition av Java, klasser, knappar, fönster och allt det där. (Inget nytt i kursen, utan bara repetition av den tidigare Java-kursen.)

Klicka på startknappen i den lilla mediaspelaren ovan för att lyssna på lektionen. (Man kan behöva vänta en stund på att ljudfilen laddas ner.) Om mediaspelaren inte syns, eller om det inte fungerar av något annat skäl, kan man klicka här för att ladda ner mp3-filen (ca 23 minuter, ca 11 megabyte). Beroende på hur webbläsaren är konfigurerad kan det kräva ett separat mp3-spelarprogram av något slag.

"Bild" 1: Vi kör ett riktigt tråkigt Java-program

Användarens inmatning visas i fetstil.

Vad heter du?
Olle
Hej, Olle!

"Bild" 2: Det riktigt tråkiga Java-programmet

Klassen Boring, på filen Boring.java.
(Radnumren ingår inte i programmet.)

    1   import java.io.*;                                            
    2
    3   public class Boring {
    4       public static void main(String args[]) throws IOException {
    5           BufferedReader kbd_reader
    6               = new BufferedReader(new InputStreamReader(System.in));
    7           System.out.println("Vad heter du?");
    8           String namn = kbd_reader.readLine();
    9           System.out.println("Hej, " + namn + "!");
   10       } // main
   11   } // Boring

Bild(er) 3: Vi kör ett mycket roligare Java-program

Körning av programmet NamnApplet Körning av programmet NamnApplet

"Bild" 4: Appleten på riktigt (om det fungerar i din webbläsare)

"Bild" 5: Det mycket roligare Java-programmet

Klassen NamnApplet, på filen NamnApplet.java:
(Radnumren ingår inte i programmet.)

Händelsestyrd programmering!

    1   import javax.swing.*;
    2   import java.awt.event.*;
    3   import java.awt.*;
    4
    5   public class NamnApplet extends JApplet implements ActionListener {
    6       private JLabel etiketten = new JLabel("Vad heter du?");
    7       private JTextField inmatningsfältet = new JTextField(6);
    8       private JButton knappen = new JButton("Kör!");
    9       private JLabel utskriften = new JLabel();
   10
   11       public void init() {
   12           knappen.addActionListener(this);
   13           Container cp = getContentPane();
   14           cp.setLayout(new FlowLayout());
   15           cp.add(etiketten);
   16           cp.add(inmatningsfältet);
   17           cp.add(knappen);
   18           cp.add(utskriften);
   19       }
   20
   21       public void actionPerformed(ActionEvent event) {
   22           String namnet = inmatningsfältet.getText();
   23           utskriften.setText("Hej, " + namnet + "!");
   24       } // actionPerformed
   25   } // class NamnApplet

Bild 6: Programmet BingBong som har två knappar

Körning av programmet BingBong

"Bild" 7: BingBong som en applet (om det fungerar i din webbläsare)

"Bild" 8: Källkoden till BingBong

Klassen BingBong, på filen BingBong.java:

    1   import javax.swing.*;
    2   import java.awt.event.*;
    3   import java.awt.*;
    4
    5   public class BingBong extends JApplet implements ActionListener {
    6       private JButton bingknappen = new JButton("Bing");
    7       private JButton bongknappen = new JButton("Bong");
    8       private JTextField textfältet = new JTextField(15);
    9
   10       public void actionPerformed(ActionEvent e) {
   11           JButton vilkenknapp = (JButton)e.getSource();
   12           if (vilkenknapp == bingknappen)
   13               textfältet.setText("Du tryckte på Bing");
   14           else if (vilkenknapp == bongknappen)
   15               textfältet.setText("Du tryckte på Bong");
   16           else
   17               textfältet.setText("Vad sjutton tryckte du på???");
   18       } // actionPerformed
   19
   20       public void init() {
   21           bingknappen.addActionListener(this);
   22           bongknappen.addActionListener(this);
   23           Container cp = getContentPane();
   24           cp.setLayout(new FlowLayout());
   25           cp.add(bingknappen);
   26           cp.add(bongknappen);
   27           cp.add(textfältet);
   28       }
   29   } // class BingBong

"Bild" 9: Objektorientering

Kommer du ihåg hur det där med objektorientering fungerar?
  • Klass
  • Objekt
  • Arv
Om inte, repetera här: http://www.databasteknik.se/webbkursen/oo-grunder/index.html

"Bild" 10: Klasser och objekt

Klasserna Person och ObjektExempel, på filen ObjektExempel.java:

Skilj på klasser och objekt (= instanser): Varför fungerar inte de rödmarkerade raderna?

    1	class Person {
    2	    private int lön;
    3	    private int bonus;
    4	    public Person(int lön, int bonus) {
    5	        this.lön = lön;
    6	        this.bonus = bonus;
    7	    }
    8	    public int lönesumma() {
    9	        return lön + bonus;
   10	    }
   11	} // class Person
   12	
   13	public class ObjektExempel {
   14	    public static void main(String args[]) {
   15           int en_summa = Person.lönesumma();
   16           System.out.println("Summan = " + en_summa);
   17	
   18	        Person olle = new Person(17000, 200);
   19	        Person kajsa = new Person(38000, 29000);
   20	
   21	        int en_annan_summa = olle.lönesumma();
   22	        System.out.println("Olles lönesumma = " + en_annan_summa);
   23	        int en_tredje_summa = kajsa.lönesumma();
   24	        System.out.println("Kajsas lönesumma = " + en_tredje_summa);
   25	    } // main
   26	} // class ObjektExempel

"Bild" 11: BingBong, men med två olika lyssnarobjekt

Klassen BingBong2, på filen BingBong2.java:

    1   import javax.swing.*;
    2   import java.awt.event.*;
    3   import java.awt.*;
    4
    5   public class BingBong2 extends JApplet {
    6       private JButton bingknappen = new JButton("Bing");
    7       private JButton bongknappen = new JButton("Bong");
    8       private JTextField textfältet = new JTextField(15);
    9
   10       // Inre klass för att lyssna på en knapp
   11       class BingLyssnare implements ActionListener {
   12           public void actionPerformed(ActionEvent event) {
   13               textfältet.setText("Du tryckte på Bing");
   14           }
   15       }
   16
   17       // Inre klass för att lyssna på en annan knapp
   18       class BongLyssnare implements ActionListener {
   19           public void actionPerformed(ActionEvent event) {
   20               textfältet.setText("Du tryckte på Bong");
   21           }
   22       }
   23
   24       public void init() {
   25           ActionListener binglyssnaren = new BingLyssnare();
   26           bingknappen.addActionListener(binglyssnaren);
   27           ActionListener bonglyssnaren = new BongLyssnare();
   28           bongknappen.addActionListener(bonglyssnaren);
   29           Container cp = getContentPane();
   30           cp.setLayout(new FlowLayout());
   31           cp.add(bingknappen);
   32           cp.add(bongknappen);
   33           cp.add(textfältet);
   34       }
   35   } // class BingBong2

Läsanvisningar

Den här lektionen motsvaras inte av något kapitel i kursboken, utan är repetition av förkunskaperna från den tidigare Java-kursen.

Programmeringsövningar

Det finns inga programmeringsövningar till den här lektionen, men om du känner dig osäker kan du provköra exempelprogrammen ovan, och även repetera exempel och övningsuppgifter från den tidigare Java-kursen.

Föregående lektion | Lektionslista | Nästa lektion


Thomas Padron-McCarthy (Thomas.Padron-McCarthy@tech.oru.se), 19 september 2005