2I1049 Föreläsning 8
Grafiska gränssnitt,
Java interface och
händelsehantering
KTH-MI Peter Mozelius
1
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)
–

Swing (Infördes som Core Java i ver 1.2)
–
2
tungviktskomponenter, plattformsberoende
lättviktskomponenter, plattformsoberoende
AWT-komponenter





3
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
AWT-komponenter
4
Paketet java.awt

awt package kan delas i tre delar:
–
–
–

Separata paket för bl a:
–
–
–
5
KOMPONENTER: knappar, textrutor...
GRAFIK: bilder, fonter, färger…
LAYOUTMODELLER (Layout Managers)
Händelsehantering: java.awt.event
Bildhantering: java.awt.image
Drag n’ Drop: java.awt.dnd
Swing-komponenter





6
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
Swing-komponenter


Swing består av 9st delpaket och en mängd
klasser och interface
Grundpaketet heter javax.swing.*
–




7
import javax.swing.*;
AWT utgår från klassen Component
Swing utgår från JComponent
Button blir JButton
Label blir JLabel
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

8
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!
9
Java interface




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)

10
interface - gränssnitt
Ett interface innehåller abstrakta metoder
Ett interface ärvs därför inte utan det
implementeras
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
–
–
11
java.awt.event
javax.swing.event
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

12
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:
–
–
–
13
MouseEvent - MouseListener
WindowEvent – WindowListener
ListSelectionEvent - ListSelectionListener
Händelselyssnare




14
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
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);
15
RAST?
AWT-layoutmodeller


16
Implementeras i kontainerklassen genom:
setLayout(Layoutklass);
Olika layoutklasser i AWT:
BorderLayout
CardLayout
FlowLayout
GridLayout
GridBagLayout
AWT-layoutmodeller
Defaultmodellen för många komponenter är
BorderLayout som explicit sätts genom:
 setLayout(new BorderLayout());
North
West
Center
South
17
East
AWT-layoutmodeller
Fem stycken knappar
utplacerade enligt
BorderLayout
18
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





19
AWT-layoutmodeller

java.awt.Gridlayout

Arbeta med rader och kolumner m h a:
setRows() setColumns()




20
Lägger komponenterna i ett rutnät
Alla komponenter blir lika stora
Statiskt och rätt fyrkantigt
Lätt att använda
AWT-layoutmodeller
panel = new JPanel();
panel.setLayout(
new GridLayout(4,4));
add(”Center”,panel);
21
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


22
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:
–
–
23
BoxLayout
OverlayLayout
Repetition från Föreläsning1


24
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.
Polymorfism




25
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
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ör
att räkna ut arean hos just en rektangel
26
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
27
Överskuggning




28
När en eller flera av superklassens instansmetoder 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
Dynamisk bindning i Java

Om en instansmetod metod anropas via
referensen ref enligt:
ref.metod();



29
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
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!
30