300 likes | 435 Views
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
E N D
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 • 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
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
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
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
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
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
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!
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)
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
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
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
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
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?
AWT-layoutmodeller • 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 East South
AWT-layoutmodeller Fem stycken knappar utplacerade enligt BorderLayout
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
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
AWT-layoutmodeller panel = new JPanel(); panel.setLayout( new GridLayout(4,4)); add(”Center”,panel);
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
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
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.
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
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
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
Ö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
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
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!