0. Kod, Klassdiagram och Sekvensdiagram import java.awt.event.*; import javax.swing.*; import java.awt.*; public class TwoThreads implements ActionListener.

Slides:



Advertisements
Liknande presentationer
1 2I1049 Föreläsning 8 KTH-MI Peter Mozelius Grafiska gränssnitt, Java interface och händelsehantering.
Advertisements

Repetition av språket Java
Array Skriv ett program som frågar följande: ”Hur många tal vill du mata in?” användaren matat in ett tal t.ex n. då frågar programmet n ggr följande.
Next previous Internetprogrammering 2000 Internetprogrammering 2000 Föreläsning 10 Distribuerad programmering med Javas RMI, Remote Method Invocation.
Fortsättningskurs i Programmering lektion 3 Johan Hjerling
Fortsättningskurs i Programmering lektion 6
Objektorienterad utveckling
Klassarv och inkapsling
OOP Objekt-orienterad programmering
Metoder i java Det finns två typer av metoder i java
Övning5 Så här ska man tänka när man löser uppgift 1 på tentan lite grafik, så här söker man genom en lista så här läser man från en fil i java lösa uppgift.
Välkommen Vahid Mosavat
Programmeringsteknik för K och Media
Programmeringsteknik för K och Media
Programkodens uppbyggnad
Att programmera i språket Java
1 ITK:P1 Föreläsning 4 Grafiska gränssnitt och händelsehantering DSV Peter Mozelius.
Föreläsning 8 Appletprogram/fristående grafiska program Rita linjer, rektanglar mm Skriva text Byta färg Appletprogram html.
Föreläsning 6 Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
Next previous Innehåll Inledning Några enkla exempel Pekare till och kort beskrivning av större exempel Speciella referenser (som används i marginalen)
1 ITK:P1 Föreläsning 6 Layoutmodeller i Java DSV Marie Olsson.
Strömmar Vid läsning och skrivning används något som kallas strömmar.
OOP F4:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 4 Metoder klass-metoder instans-metoder.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 6 ( ) INNEHÅLL: -Mera om tabeller.
Klasser och objekt Klasser, objekt och instansvariabler
1. Klädlådor I byrån finns en strumplåda och en kalsonglåda. Objektmodellera och ge exempel på användning. Strategi: Ställ upp krav i textform Omvandla.
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: Trådprogrammering i Java - Avbrott (”interrupts”) - Metoden join() -
Föreläsning 15 (16) Introduktion till Swing. Historik (java.awt) JDK 1.0 – AWT (Abstract Window Toolkit) Paket för gränssnittsprogrammering Har en del.
Objektorienterad Modellering Programmering och Analys
Programmeringsteknik för Media1 & K1
1 Föreläsning 7 Repetition Instansvariabler och klassvariabler Klassmetoder och Instansmetoder.
ITK:P1 Lektion 4 Att implementera en spelidé i Java DSV Peter Mozelius.
1 MSPEL Lektion 2 DSV Peter Mozelius Spel i Java applets.
Mitt första Java program Mahmud Al Hakim Copyright, Mahmud Al Hakim, 1.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser -Att definiera egna klasser -Klassvariabler -Klassmetoder.
OOP F3:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 3 Iteration Många variabler av samma sort – Arrayer.
Föreläsning 8 Arv och abstrakta klasser. Arv Definierar en klass utifrån en redan existerande klass Den nya klassen utökar den ärvda klassen ( extends.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 8 ( ) INNEHÅLL:Klasser: -Konstruktorer -Klassvariabler -Instansmetoder -Privata.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Metoder -Lokala variabler -Mera om klasser: -Nyckelorden.
Föreläsning 14 ”Enkel” Filhantering.
1 ITK:P1 Föreläsning 8 Multimedia för spelkonstruktion DSV Peter Mozelius.
Next previous RMI, Remote Method Invocation Om du har boken av Marty Hall, läs avsnitt 15.8 För fler exempel se:
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Föreläsning 12 Om slutprovet. Repetition –deklaration av variabler –skapande av objekt (instansiering) –Vektorer och Vector-klassen –Klasser –Instans-/klassvariabler.
1. Ett problem/uppgift.
PROGRAMMERINGSTEKNIK Övningsgrupp 3 Marcus Hjelm
Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305
Föreläsning 1 Om kursen Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
ITK:P1 Föreläsning 2 Introduktion till objektorientering DSV Marie Olsson.
PROCESSPROGRAMMERING Föreläsning 1 ( )‏ Innehåll: Introduktion till paralellprogrammering (“concurrent programming”)‏ Introduktion till parallellprogrammering.
Föreläsning 13 Appletprogram/fristående grafiska program Arv Rita linjer, rektanglar mm Skriva text, byta färg Appletprogram & HTML Grafiska användargränssnitt.
ITK:P2 F8 Strömmar och filhantering DSV Peter Mozelius.
Föreläsning 9 Arv kap 8.1 Interface kap 9.2 Grafiska användargränssnitt (GUI) kap 10.
2I1073 Lektion 1 KTH-MI Peter Mozelius XHTML, stilmallar och Javascript.
OOP F13:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 13 Repetition variabler, selektion och iteration.
Programmering i C# Laborationer.
TILLÄMPAD DATALOGI (TILDA) Övningsgrupp 2 Marcus Hjelm
TILLÄMPAD DATALOGI (TILDA) Övning 1 Marcus Hjelm
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
Övning2 programmeringsteknik och Matlab 2D1312/ 2D1305
Övning 3. Repetition Metoder class RepetitionMetoder { public static void main(String [] args) double längd = 2.0; double bredd = 1.0; double area =
Programmeringsteknik för K och Media
Föreläsning 9 Inläsning och utskrift på fil –SimpleTextFileReader –SimpleTextFileWriter Felsökning Java API.
1 Föreläsning 2 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
OOP&M - teori1 OOP del III– Föreläsning vecka 9 GUI Containers och LayoutManagers (Inner classes)
OOP&M - teori1 OOP&M del III– Föreläsning 3 vecka 6 Kontrollkomponenter (Components) Som Applets.
OOP&M - teori1 OOPM del II– Föreläsning vecka Mer om ärvning.. Abstrakta klasser/metoder Gränssnitt/Interface klasser.
DA7351 Programmering 1 Skapa och placera en komponent i en container Layoutmanagers Applet Händelser och lyssnare Föreläsning 15.
Föreläsning 13: Swing (GUI), händelser, timer
Presentationens avskrift:

0. Kod, Klassdiagram och Sekvensdiagram import java.awt.event.*; import javax.swing.*; import java.awt.*; public class TwoThreads implements ActionListener { JButton b1; public TwoThreads() { JFrame f=new JFrame(); f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE); b1=new JButton("Knapp 1"); JButton b2=new JButton("Knapp 2"); b1.addActionListener(this); b2.addActionListener(this); b1.setPreferredSize( new Dimension(100,100)); b2.setPreferredSize( new Dimension(200,200)); f.getContentPane().add( b1,BorderLayout.WEST); f.getContentPane().add( b2,BorderLayout.EAST); f.pack(); f.setVisible(true); while(1==1) { printToScreen(); Thread.yield(); } public void actionPerformed(ActionEvent e) { System.out.println("\n"+e.getActionCommand()); } void printToScreen() { System.out.print("."); } public static void main(String[] args) { TwoThreads tt=new TwoThreads(); }

Klassdiagram

Sekvensdiagram

En enkel klient Börja med en enkel klient utan grafik, som öppnar en förbindelse med try { Socket socket=new Socket("shell.e.kth.se",4712); BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream())); PrintWriter ut=new PrintWriter(socket.getOutputStream()); ut.println("Charlotta"); ut.flush(); System.out.println(in.readLine()); } Den ska alltså sända ditt namn till den server som lyssnar på port 4712 och skriva ut det svar du får. Kom ihåg ut.flush(), annars sänds inte namnet iväg. När klienten fungerar kan du ägna dej helt åt det grafiska gränssnittet. Om servern skulle ha dött på shell.e.kth.se kan du använda servern som går på w2.nada.kth.se i stället. Samma portnummer. Swingkomponenterna Ditt program ska vara en public class Klient extends JFrame implements ActionListener{ där vänstra halvan är din spelplan och högra halvan datorns spelplan. Du ska använda BoxLayout, den layout som oftast blir bra. Varje spelplan är en vertikal Box som uppifrån och ner innehåller Rubrik, en JLabel med texten Jag: eller Datorn:. Meddelande, ett JTextField där det som sänds från dej och från datorn syns. (Först hälsningen, sedan STEN, SAX eller PÅSE). En knapp med en stenbild (skapas med new JButton (stenbild)...) En knapp med en saxbild (...där bilden är en ImageIcon...) En knapp med en pappersbild (...vars konstruktor vill ha en gif-fil) Resultat, en JLabel som efter ett tryck visar ETT..., efter andra trycket TVÅ... och efter tredje VINNER, OAVGJORT eller FÖRLORAR. Poäng, ett JTextField som visar Poäng: 7 Låt Spelplan vara en inre klass, så är det enkelt att skapa två exemplar av den och lägga bredvid varandra i en horisontell box. Fördelen med en box är att man kan lägga in fasta mellanrum mellan komponenterna Om man deklarerat Box box=Box.createHorizontalBox(); kan man göra så här. box.add(jag); //Spelplan jag=new Spelplan("Jag:"); har redan deklarerats box.add(Box.createHorizontalStrut(20)); //Ett mellanrum box.add(du); //Spelplan du=new Spelplan("Datorn:"); har redan deklarerats Extrauppgift: Lägg till ljudeffekter! (Kan kräva hörlurar på elektrodatorer utan högtalare). 1. Objektmodellera labben Sten, sax, påse!

1.Av labbinstruktionen framgår det att det ska finnas två vertikala boxar bredvid varandra, en med rubriken Jag och en med rubriken Datorn. Man ska alltså göra två objekt av klassen Spelplan, som ärver swingklassen Box. 2.Klassen Klient ska ärva JFrame och implementera ActionListener. 3.Knapptryckningslyssnaren bör inte vara knappen själv och inte i Spelplan, eftersom metoden actionPerformed ska meka med BÅDA spelplanerna. Lyssnaren bör vara i … En första analys: kraven i textform

Use Cases Användaren väljer vilken hand han vill vissa. Valet markeras genom att ändra på knappen och skriva ut valet i text. Datorn svarar genom att kontakta servern. Servens svar skrivs ut i text. Användaren frågar två ggr till, den tredje gången noteras vinsten och de två textfälten med poäng uppdateras. Domänklasser: Klient, Spelplan Övriga klasser: JFrame, Box, JButton

Klassdiagram

Implementation: Vilken arbetsmetodik? Robusthet, anpassningsbarhet och återanvändbarhet? Robusthet – Vi använder (måste) try-catch för felhantering Anpassningsbarhet – Klienten kan bytasut mot en som lokalt generar händerna sten, sax och påse Återanvändbarhet – Spelplan kan användas I ett nytt “lokalt” program Abstraktion, inkapsling och modularitet Abstraktion – Spelaren kan både vara datorn och människa Inkapsling – All kommunikation sker i klienten Modularitet – Spelaren är en egen modul som kan användas i flera olika program

Vilka designmönster används? Factory – Används med fördel när boxarna ska skapas Adapter – Klienten kan skrivas så att den både klarar av en nätverks och lokal hand generering Observer – Händelsehanteringen i … Model-View-Control – Vi har grafik…

Dokumentation av kod Tre typer av kommentarer: i) /* */ii) //iii) /** */ Javadoc exempel: /** Metoden returnerar summan av två x Detta ska vara tal y Detta ska vara tal Summan av de två talen A och B */ Public int summa(int x, int y) { return x+y; } När ska man kommentera? Allt som är deklarerat public Viktiga privata och lokal variabler och metoder.

2. Grafik I labben Hoppsansa används knappar med olika bakgrundsfärg. Med swingkomponenten JButton kan man låta knappen visa en bild. Anta att filen frog.gif visar en groda som hoppar åt höger och filen penguin.gif en pingvin som hoppar åt vänster. Skriv kod som: Tillverkar bildknappar En metod som vid anropet byt(i,j) byter bild på knapp[i] och knapp[j].

Implementation Man tillverkar först ikonerna så här ImageIcon groda = new ImageIcon("frog.gif"); ImageIcon pingvin = new ImageIcon("penguin.gif"); och sedan kan man göra knappar med dessa bilder. for(int i=0;i<3;i++) knapp[i]=new JButton(groda); knapp[3]=new JButton(); for(int i=4;i<7;i++) knapp[i]=new JButton(pingvin); Och så här blir metoden: public void byt(int i, int j) { Icon bild1 = knapp[i].getIcon(); Icon bild2 = knapp[j].getIcon(); knapp[i].setIcon(bild2) ; knapp[j].setIcon(bild1) ; } Den tomma knappens getIcon blir null och det funkar också.

3. Hur gör man en pianoklaviaturm ed BoxLayout?

Lösning 1.En svartbox är en vertikal box med en svart JPanel överst och en horisontell box under den med två vita paneler och ett litet mellanrum (görs med Box.createHorizontalStrut(2) ). 2.En smalbox är en enda hög smal vit JPanel. 3.En bredbox är en horisontell box med två höga smala vita JPanel och ett litet mellanrum. Det finns inget naturligt sätt att dela in klaviaturen i vertikala småboxar som läggs in i en stor horisontell box. Jag föreslår att man skär vertikala snitt längs dom svarta tangenternas ytterkanter. Då uppstår tre sorters bitar:

import java.awt.* ; import javax.swing.* ; import java.awt.event.* ; public class Piano extends JFrame { Box oktav=Box.createHorizontalBox() ; public Piano() { getContentPane().setLayout( new FlowLayout()); oktav.add(bredbox()) ; oktav.add(svartbox()) ; oktav.add(smalbox()) ; oktav.add(svartbox()) ; oktav.add(bredbox()) ; oktav.add(svartbox()) ; oktav.add(smalbox()) ; oktav.add(svartbox()) ; oktav.add(smalbox()) ; oktav.add(svartbox()) ; oktav.add(bredbox()) ; oktav.setBackground(Color.white) ; getContentPane().add(oktav) ; setSize(290,240) ; setBackground(Color.white) ; setVisible(true) ; } public Box bredbox() { Box box=Box.createHorizontalBox() ; box.add(bredvit()) ; box.add(Box.createHorizontalStrut(2)) ; box.add(bredvit()) ; return box ; } public Box smalbox() { Box box=Box.createHorizontalBox() ; box.add(smalvit()) ; return box ; } public JPanel bredvit() { JPanel bred=new JPanel() ; bred.setBackground(Color.white) ; bred.setPreferredSize(new Dimension(23,200)); return bred ; } public JPanel smalvit() { JPanel smal=new JPanel() ; smal.setBackground(Color.white) ; smal.setPreferredSize(new Dimension(11,200)); return smal ; } public Box svartbox() { Box box=Box.createVerticalBox() ; box.add(svarttangent()) ; box.add(vithalvor()) ; return box ; } public Box vithalvor() { Box box=Box.createHorizontalBox() ; box.add(vithalva()) ; box.add(Box.createHorizontalStrut(2)) ; box.add(vithalva()) ; return box ; } public JPanel vithalva() { JPanel halva=new JPanel() ; halva.setBackground(Color.white) ; halva.setPreferredSize(new Dimension(14,80)); return halva ; }

public JPanel svarttangent() { JPanel tang=new JPanel() ; tang.setBackground(Color.black) ; tang.setPreferredSize(new Dimension(30,120)); return tang ; } class Pianotest { public static void main(String[] args) { new Piano() ; } Mer tips: I paketet Applet finns det klasser och metoder som kan användas för att spelaupp ljud.