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
1
2I1049 Föreläsning 8
KTH-MI Peter Mozelius
Grafiska gränssnitt,Java interface och händelsehantering
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
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
4
AWT-komponenter
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
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
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
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
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!
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)
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
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
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
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
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?
16
AWT-layoutmodeller
Implementeras i kontainerklassen genom: setLayout(Layoutklass);
Olika layoutklasser i AWT: BorderLayout CardLayout FlowLayout GridLayout GridBagLayout
17
AWT-layoutmodeller
Defaultmodellen för många komponenter ärBorderLayout som explicit sätts genom: setLayout(new BorderLayout());
North
West Center East
South
18
AWT-layoutmodeller
Fem stycken knapparutplacerade enligtBorderLayout
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
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
21
AWT-layoutmodeller
panel = new JPanel();
panel.setLayout(
new GridLayout(4,4));
add(”Center”,panel);
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
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
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.
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
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
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
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
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
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!