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

2I1049 Föreläsning 8

  • Upload
    cadee

  • View
    34

  • Download
    0

Embed Size (px)

DESCRIPTION

2I1049 Föreläsning 8. Grafiska gränssnitt, Java interface och händelsehantering. KTH-MI Peter Mozelius. Grafiska gränssnitt i Java. Efterfrågan på program med grafiskt gränssnitt har ökat avsevärt de senaste åren - PowerPoint PPT Presentation

Citation preview

Page 1: 2I1049 Föreläsning 8

1

2I1049 Föreläsning 8

KTH-MI Peter Mozelius

Grafiska gränssnitt,Java interface och händelsehantering

Page 2: 2I1049 Föreläsning 8

2

Grafiska gränssnitt i Java

Efterfrågan på program med grafiskt gränssnitt har ökat avsevärt de senaste åren

I Java finns två parallella komponenthierarkier som gör det enkelt att bygga fungerande GUI:s

AWT (Abstract Windowing Toolkit)– tungviktskomponenter, plattformsberoende

Swing (Infördes som Core Java i ver 1.2)– lättviktskomponenter, plattformsoberoende

Page 3: 2I1049 Föreläsning 8

3

AWT-komponenter

Abstract Windowing Toolkit De grafiska komponenter som funnits med

sedan den allra första versionen av Java Tungviktskomponenter som samarbetar med

operativsystemet där applikationen körs En knapp t ex ser därför annorlunda ut när

koden körs i Linux än den gör i Windows Den gemensamma basklassen är Component

Page 4: 2I1049 Föreläsning 8

4

AWT-komponenter

Page 5: 2I1049 Föreläsning 8

5

Paketet java.awt

awt package kan delas i tre delar:– KOMPONENTER: knappar, textrutor...– GRAFIK: bilder, fonter, färger…– LAYOUTMODELLER (Layout Managers)

Separata paket för bl a:– Händelsehantering: java.awt.event– Bildhantering: java.awt.image– Drag n’ Drop: java.awt.dnd

Page 6: 2I1049 Föreläsning 8

6

Swing-komponenter

På mångas begäran så utökades Java sedan med Swing i JDK 1.2

Swing var från början ett samarbete mellan bl a Sun, IBM och Netscape

En del komponenter har sitt urprung i Netscapes Internet Foundation Classes

Komponenter som ser likadana ut oberoende av plattform och OS

Lättviktskomponeter

Page 7: 2I1049 Föreläsning 8

7

Swing-komponenter

Swing består av 9st delpaket och en mängd klasser och interface

Grundpaketet heter javax.swing.*– import javax.swing.*;

AWT utgår från klassen Component Swing utgår från JComponent Button blir JButton Label blir JLabel

Page 8: 2I1049 Föreläsning 8

8

Swing-komponenter

Ett bra sätt att få en liten inblick i det som går att göra med Swing-komponenter är att ta sig till: X:\j2sdk1.4\demo\jfc\SwingSet2\ och sedan klicka upp SwingSet2Plugin.html

JFC = Java Foundation Classes Innehåller AWT, Swing, Java 2D, Printing mm

Page 9: 2I1049 Föreläsning 8

9

Model - View

Från början Model – View – Controller MVC Det viktigaste och det som finns i Swing är att

genom separeringen av Model – View skilja mellan logiken (Model) och gränssnittet (View)

Controller = uppdatering

Paus 15 min!

Page 10: 2I1049 Föreläsning 8

10

Java interface

interface - gränssnitt Ett interface innehåller abstrakta metoder Ett interface ärvs därför inte utan det

implementeras public class TV implements Fjärrkontroll I interfacet Fjärrkontroll finns metoder deklarerade

som sedan måste implementeras i klassen TV Exempel: public void bytKanal(int kanal)

Page 11: 2I1049 Föreläsning 8

11

Java interface

Java stödjer inte multipelt arv En klass kan implementera flera interface En samling metoder och konstanter (static final)

som inte naturligt passar in i en arvhierarki Vi kommer på denna kurs enbart att använda

färdiga interface från– java.awt.event– javax.swing.event

Page 12: 2I1049 Föreläsning 8

12

Händelser

En sorts objekt i Java är händelseobjekt som hjälper till med kommunikationen mellan andra objekt när en händelse inträffar

Olika händelseobjekt - event object är specialiseringar av basklassen java.util.Event

De händelser som skapar händelseobjekt behöver avlyssnas - händelselyssning

Page 13: 2I1049 Föreläsning 8

13

Händelselyssnare

En klass som kan fånga händelser är en lyssnarklass med särskilda metoder som systemet anropar när händelser inträffar

Till vår hjälp har vi lyssnargränssnitt som t ex:– MouseEvent - MouseListener– WindowEvent – WindowListener– ListSelectionEvent - ListSelectionListener

Page 14: 2I1049 Föreläsning 8

14

Händelselyssnare

Den händelse vi kommer att använda mest är av klassen ActionEvent

Interfacet heter ActionListener och i en klass kan inledas enligt:

public class A extends JFrame implements ActionListener {

Vi kan sedan fånga händelser från komponenter som (J)Button och (J)TextField

Page 15: 2I1049 Föreläsning 8

15

Händelselyssnare

Den metod som sedan behöver implementeras är actionPerformed:

public void actionPerformed(ActionEvent e) { Lite smart kod; }//actionPerformed

Lyssnaren behöver slutligen även registreras knapp1.addActionListener(this);

knapp2.addActionListener(this); RAST?

Page 16: 2I1049 Föreläsning 8

16

AWT-layoutmodeller

Implementeras i kontainerklassen genom: setLayout(Layoutklass);

Olika layoutklasser i AWT: BorderLayout CardLayout FlowLayout GridLayout GridBagLayout

Page 17: 2I1049 Föreläsning 8

17

AWT-layoutmodeller

Defaultmodellen för många komponenter ärBorderLayout som explicit sätts genom: setLayout(new BorderLayout());

North

West Center East

South

Page 18: 2I1049 Föreläsning 8

18

AWT-layoutmodeller

Fem stycken knapparutplacerade enligtBorderLayout

Page 19: 2I1049 Föreläsning 8

19

AWT-layoutmodeller

java.awt.FlowLayout Lägger ut dina komponenter i rader som ord i en

ordbehandlare med konstanterna CENTER LEFT RIGHT Reglera avstånd ihöjd och sidled med setHgap() och setVgap() Mycket lätt att använda Känslig för storleksändringar av fönstret Default för Panel-objekt

Page 20: 2I1049 Föreläsning 8

20

AWT-layoutmodeller

java.awt.Gridlayout Arbeta med rader och kolumner m h a:

setRows() setColumns() Lägger komponenterna i ett rutnät Alla komponenter blir lika stora Statiskt och rätt fyrkantigt Lätt att använda

Page 21: 2I1049 Föreläsning 8

21

AWT-layoutmodeller

panel = new JPanel();

panel.setLayout(

new GridLayout(4,4));

add(”Center”,panel);

Page 22: 2I1049 Föreläsning 8

22

AWT-layoutmodeller

java.awt.GridBagLayout

Med ett rutnät i grunden men med möjligheter till positionering och storleksförändring i med

hjälpklassen GridBagConstraints Elegant, flexibel modell men lite krånglig Träna först med någon annan LayoutManager

Page 23: 2I1049 Föreläsning 8

23

Swing-layoutmodeller

Swing-komponenter stödjer alla AWT:s layout-modeller + 6 st nya : BoxLayout, JRootPane.RootLayout OverlayLayout, ViewportLayout SpringLayout och ScrollPaneLayout Mest användbara är:

– BoxLayout – OverlayLayout

Page 24: 2I1049 Föreläsning 8

24

Repetition från Föreläsning1

På förra årets kurs var det flera studenter som tyckte att det absolut svåraste på kursen var:– Överskuggning– Polymorfism– Dynamisk bindning

Vi kör därför en repetition av dessa viktiga begrepp. Ni som redan förstått hur det hänger ihop behöver inte stanna.

Page 25: 2I1049 Föreläsning 8

25

Polymorfism

polymorfism = mångformighet I en klasshierarki kan det i de olika klasserna

finnas metoder med samma namn och samma argument/returtyp MEN med olika metodkroppar

Objektorienterade språk har inbyggda mekanismer för dynamisk bindning

Rätt metod körs automatiskt när programmet exekveras

Page 26: 2I1049 Föreläsning 8

26

Polymorfism

I en abstrakt basklass:public abstract class Figur

Finns det en abstrakt metod:public abstract double visaArea();

I den ärvande klassen Rektangel:public class Rektangel extends Figur

har metoden formats så att den passar föratt räkna ut arean hos just en rektangel

Page 27: 2I1049 Föreläsning 8

27

Polymorfism

I klassen Rektangel: public double visaArea() {

return bredd * höjd;

}//visaArea i klassen Rektangel

Medan den i klassen Cirkel överskuggas enligt:public double visaArea() {

return PI * radie * radie;

}//visaArea i klassen Cirkel

Page 28: 2I1049 Föreläsning 8

28

Överskuggning

När en eller flera av superklassens instans-metoder omdefinieras i en eller flera subklasser

Vid exekveringen så är det objektets klass som avgör vilken metod som anropas

Olika objekt i en klasshierarki kan på detta sätt behandlas enhetligt utan att varje enskilt objekt måste klassbestämmas

Att rätt metod automatiskt anropas under programkörningen kallas dynamisk bindning

Page 29: 2I1049 Föreläsning 8

29

Dynamisk bindning i Java

Om en instansmetod metod anropas via referensen ref enligt:

ref.metod(); Så undersöker javainterpretatorn vilken klass

objektet har som ref refererar till Om objektets klass har en passande metod() så

körs denna Om inte, så letar javatolken vidare uppåt bland

superklasserna tills en metod återfinns

Page 30: 2I1049 Föreläsning 8

30

Tack för idag!

I slutet på nästa föreläsning tänkte jag att vi även skulle hinna med att prata lite om vad som varit bra och dåligt på årets 2I104930

Tack för idag!