Tillbaka till lektionslistan

Mobila applikationer med Android: Lektion 2

Idag: Kort repetition av Java, klasser, knappar, fönster och allt det där.

Exemplen i den här lektionen kommer från "vanlig skrivbords-Java", och inte den Java-miljö som finns i Android eller i Java ME. Om man redan har läst en kurs om vanlig skrivbords-Java är detta förmodligen inget nytt, men om man inte läst Java innan fungerar det som en snabbintroduktion till språket Java och händelsestyrd programmering, och i så fall måste man förmodligen läsa och öva mer än att bara lyssna på den här lektionen.

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

Om man vill fördjupa sig i Java-programmering finns det många böcker om skrivbords-Java, till exempel den svenska Java direkt med Swing av Jan Skansholm, och även mycket material fritt tillgängligt på webben, till exempel The Java Tutorials från Sun (numera Oracle): http://download.oracle.com/javase/tutorial/

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 eventuella tidigare Java-kurser. Om Java är ett nytt språk för dig, vill du förmodligen jobba en del med detta.

Tillbaka till lektionslistan


Thomas Padron-McCarthy (thomas.padron-mccarthy@oru.se), 15 januari 2012