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 "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 "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@oru.se), 29 augusti 2008
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.
Vad heter du? Olle Hej, Olle!
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
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
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
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
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
Föregående lektion | Lektionslista | Nästa lektion