• No results found

Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 7 Jonas Lindgren, Institutionen för Datavetenskap, LiU

N/A
N/A
Protected

Academic year: 2022

Share "Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 7 Jonas Lindgren, Institutionen för Datavetenskap, LiU"

Copied!
12
0
0

Loading.... (view fulltext now)

Full text

(1)

TDDC30

Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 7 Jonas Lindgren, Institutionen för Datavetenskap, LiU

På denna föreläsning:

Strömmar

Grafiskt användargränssnitt, Swing

Lyssnare och händelser

1

Hittills, och vidare!

Objektorientering och Java

• Objekt, klasser, instanser

• Arv, polymorfism

• Dölj implementationen

• Interface!

Abstrakta datatyper (ADT)

• Datastruktur med algoritmer

• Listor, köer och stackar

• Gränssnitt vs implementation

Analys av algoritmer

• Komplexitet: tids-,rums-

• Fallstudie: Sorteringsalgoritmer (återstår) 2

(2)

In- och utmatning

Definition: En ström (en. Stream) är en sekvens av data från någon källa och/eller till något mål.

• In och utmating i Java utförs av strömmar Vanliga exempel

System.out (av klassen PrintStream)

Vanligen kopplad till terminalen

System.err (av klassen PrintStream)

Vanligen kopplad till terminalen

System.in (av klassen InputStream)

Vanligen ihopkopplad med annan ström som formaterar indatat, ex.

BufferedReader, BufferedLineReader, Scanner

3

In- och utmatning(2)

Exempel

// connect reader to inputstream

BufferedReader input = new BufferedReader(

new InputStreamReader(System.in));

// read a line and convert to int

int num = Integer.parseInt(input.readLine());

// open file for reading

FileInputStream stream = new FileInputStream(

new File(”test.txt”));

Scanner scanner = new Scanner(stream);

// read from file

System.out.println(scanner.nextInt());

4

(3)

Formatering

Ofta vill man skriva ut på en viss form

double f = 10.0/3.0;

System.out.println(f); // 3.3333333333333335

Metoden format i PrintStream kan hjälpa till:

System.out.format("Värdet %1.2f är bra grejor.\n", d); // 3,33 Locale.setDefault(Locale.UK);

// format adjust itself by looking at default locale!

System.out.format("The value %1.2f is indeed good\n.", d); // 3.33

5

Formatering(2)

Formatspecificerare är på följande form:

%[flagga][bredd]typ

Typ Förklaring Flaggor Förklaring

d Heltal, decimal

fom

- Vänsterjustering

x Heltal,

hexadecimal form

+ Talets tecken

skrivs ut

f Reellt tal,

decimalform

blankt Positivt tal inleder med blank

e Reellt tal,

exponentform

, Siffrorna

grupperas tre och tre

Fler specificerare finns, se javas API-dokumentation

6

(4)

Datum och tid

Klassen Date sparar en tid

// num = number of milliseconds since Jan 1, 1970 Date date = new Date(num);

Klassen Calendar är mer användbar, och kan ta fram nuvarande tid.

Calendar cal = Calendar.getInstance();

System.out.format("The time is: %tc \n", cal.getTime());

int minute = cal.get(Calendar.MINUTE); 7

Datum och tid(2)

DateFormat: en (abstrakt) klass som formaterar datum åt oss

DateFormat time = DateFormat.getTimeInstance();

DateFormat date = DateFormat.getDateInstance();

Date now = Calendar.getInstance().getTime();

// note that this is locale dependent

System.out.println(time.format(now)); // 13:37:00 System.out.println(date.format(now)); // 2012-nov-14

(Mer kontroll? SimpleDateFormat!)

8

(5)

Scanner

Scanner: En klass som hjälper oss att hantera inmatning

• Kopplas mot en InputStream

// example usage of scanner

Scanner scanner = new Scanner(System.in);

while (scanner.hasNextInt()){

myList.add(scanner.nextInt());

}

9

Hantering av strömmar

Filer läses som strömmar, använd FileReader resp FileWriter String filename = ”myfile.txt”;

FileReader reader = new FileReader(new File(filename));

Scanner scanner = new Scanner(reader);

//...

scanner.close(); // always close your files, or risk losing data!

scanner.nextInt(); //this will produce an error, since file is closed

10

(6)

Hantering av (binära) datafiler

• För datafiler, använd DataInputStream resp. DataOutputStream

String filename = ”myfile.dat”;

try {

DataInputStream input = new DataInputStream(

new FileInputStream(filename));

while (true) {

System.out.println(input.readInt());

}

} catch (EOFException e) {

System.out.println(”Something went wrong while reading:”);

e.printStackTrace(); // print the details!

} finally {

input.close(); // always close!

} 11

Serialisering

• Det går att spara objekt på fil mellan körningar

• Java kan platta till ett objekt till en sekvens av bytes

• Perfekt för att spara

• Använd strömmarna ObjectInputStream och ObjectOutputStream

Kräver att klassen implementerar Serializable

Object readObject(); // casting is needed to be usable void writeObject(Object o);

ObjectOutputStream out = new ObjectOutputStream(

new FileOutputStream(new File(”test.dat”)));

out.writeObject(new Cat(”Isaac”, 11)); // if Serializable!

out.writeObject(”Hejsan”); // String is Serializable 12

(7)

Grafiskt användargränssnitt

Motivering

För ”vanligt folk” är följande inte ett program:

Men detta är:

13

Grafiskt användargränssnitt(2)

Fönster ser olika ut i olika operativsystem

Java abstraherar bort detta med grafikpaketet Swing

Swing – ett uniformt sätt att skapa GUI

• Byggd ovanpå föregångaren AWT

14

(8)

Dialogrutor

JOptionPane används för att visa dialogrutor

Ett urval av de statiska metoderna:

showConfirmationDialog

showInputDialog

showMessageDialog

String name = JOptionPane.showInputDialog(”Vad heter du?”);

If (name != null) {

JOptionPane.showMessageDialog(null, ”Hej ” + namn);

}

15

Dialogrutor(2)

Körexempel:

16

(9)

Fönster

Rätt snart vill man rita upp egna typer av fönster

Lösning:

• Klassen JFrame implementerar ett fönster

• För att skapa ett eget, skriv en klass som ärver från denna

• Fyll sedan fönstret med de komponenter du vill ha

17

Fönster, exempel

public class MyFrame extends JFrame { public MyFrame(){

super(”Välkomstfönster”):

JLabel text = new JLabel(”Hej allesammans!”);

getContentPane().add(text);

setSize(new Dimension(300,200));

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

public static void main(String[] args) { JFrame theWindow = new MyFrame();

theWindow.setVisible(true);

} }

18

(10)

Komponenter

19

Layouthanterare

Problem: Om två eller flera komponenter läggs till, var placeras de?

Lösning: Använd en layouthanterare

getContentPane().setLayout(new FlowLayout());

FlowLayout Komponenterna placeras från vänster till höger, uppifrån och ner

GridLayout(r, k) Delar upp fönstret i rutmönster om r rader och k kolumner.

Alla rutor d.v.s. komponenter blir lika stora

BorderLayout Delar upp fönstret i fem delar: längs sidorna och i mitten NORTH SOUTH WEST EAST CENTER

BoxLayout En gör-det-själv layout. Placerar komponenterna brevid varandra antingen i x-led eller y-led. Lätt att förstå, mycket att skriva.

...

20

(11)

Layouthanterare(2)

Gissa layouthanterare:

Borderlayout

• - Layouten blir ofta ganska grov

• + Enkel att använda

21

Händelser och lyssnare

För att programmet ska kunna reagera på händelser kopplar man på olika typer av lyssnare till komponenter i fönstret

Lyssnarna kan fånga upp händelser som knapptryckningar och musrörelser

Observera att lyssnare är interfaces, du måste själv implementera dem

Händelse Lyssnare

ActionEvent ActionListener

MouseEvent MouseListener, MouseMotionListener

KeyListener KeyEvent

MenuListener MenuEvent 22

(12)

Graphics

Problem: Ibland vill man inte använda standardkomponenter, utan behöver skapa något helt eget

Lösning:

• Skapa en egen komponent genom att ärva från JComponent

• Överskugga metoden paintComponent(Graphics g)

Nu finns tillgång att fritt rita ut sin komponent

Komponenten kan sedan hanteras som vilken annan komponent som helst, t.ex. av en layouthanterare

23

Graphics(2)

Graphics ska ses som en verktygslåda för att rita och är dessutom själva ritytan

Relaterade klasser:

setColor, setPen, setBrush, setFont drawLine

drawRect, fillRect drawOval, fillOval drawImage drawString

Color Representerar en 24 bitars färg

Pen Beskriver en penna: tjocklek, stil..

Font Beskriver typsnitt

24

References

Related documents

Tips: För att sidorna skall kunna bilda en triangel måste gälla att ingen sida får vara längre eller lika lång med den sammanlagda längden av de två övriga sidorna..

plats för en referens till ett objekt av typen SegelPlan plats för en referens till ett objekt av typen String int length=0; // man kan ange ett initialt värde.

kommer denna klass att ärva sina egenskaper från Media , men att set och get metoder för klassens två fält ska finnas.. Är antalet sidor fler än 1 så skrivs pages ut

Fö 1-2: Kursinfo, labbinfo, Java för Python-programmerare Utan objektorientering: Ändå mycket nytt…. Objektorienteringens grunder Principer

Fokus: Lär in rätt sätt, inte fel (svårt att bli av med) Både mindre uppgifter. och ett

Gå igenom listan, och för varje anställd så adderar man du personens lön till det skrivna talet. När man nått slutet på listan så är det ned skrivna

• Dela upp resten av högen i två delar: en som innehåller alla kort som är mindre än pivotelementet och en som innehåller alla som är större än eller lika med pivotelementet.

Rättigheterna visas (via ls -l) som tre grupper med rwx där r står för läsrättighet, w för skrivrättighet och x för rättigheten att exekvera filen.. Första gruppen