Next previous Frameworks. Konstruktion av fönster, gränssnitt och användning av grafik i Java OOMPA 2000 Föreläsning 15 Innehåll, kort om: Frameworks Grafik.

Slides:



Advertisements
Liknande presentationer
Next previous Björn Eiderbäck NADA, KTH Innehåll Klassdiagram i mer detalj Visibility och modifierare (vilka.
Advertisements

1 2I1049 Föreläsning 8 KTH-MI Peter Mozelius Grafiska gränssnitt, Java interface och händelsehantering.
Stefan Möller OOP F16:1 OOP Objekt-orienterad programmering Föreläsning 16 Grafiska användargränssnitt, GUI Ytor Komponenter Layout-managers Lyssnare.
Joomla © 2009 Stefan Andersson 1. Kontaktformulär  På varje seriös webbplats bör det finnas ett kontaktformulär.  Använd ej maillänkar, risk för spam!
BENÄMNA lätta ord SPRÅKTRÄNING VID AFASIKg VIII
Next previous GRIP 2000 Föreläsning 4 Innehåll Inmatningstyper Modeller för interaktiva applikationer Observer MVC Lyssnare Pluggbara komponenter Exempel.
Tillämpning av bolagsstyrningskoden vid årsstämmor 2005 och 2006.
Next previous Internetprogrammering 2000 Internetprogrammering 2000 Föreläsning 10 Distribuerad programmering med Javas RMI, Remote Method Invocation.
Projektföljeforskning
Next previous Innehåll Klassen URL Arbeta med URLer, exempel Referenser Harold,”Java Network Programming”, Elliotte Harold Hall, "CORE Web Programming"
Objektorienterad utveckling
Klassarv och inkapsling
Eddie Arnold - Make The World Go Away Images colorées de par le monde Déroulement automatique ou manuel à votre choix 1 för dig.
Objektorienterad utveckling Lektion 2 Objekt, överlagring, överskuggning, klasshierarkier och dynamisk bindning KTH Peter Mozelius.
Metoder i java Det finns två typer av metoder i java
Övning5 Så här ska man tänka när man löser uppgift 1 på tentan lite grafik, så här söker man genom en lista så här läser man från en fil i java lösa uppgift.
Programmeringsteknik för K och Media
Programmeringsteknik för K och Media
Swing Grafik delen i Java kallas för Swing. Swing är stort; ca 800 klasser i 16 paket. Swing är en utveckling av AWT (Abstarct Window Toolkit). AWT var.
1 ITK:P1 Föreläsning 4 Grafiska gränssnitt och händelsehantering DSV Peter Mozelius.
Förstudie 2. Design 3. Migrering 4 Analys av befintlig miljö –Microsoft Assessment and Planning (MAP) kan användas för att analysera sin miljö.
Next previous Lite mer om synkronisering. Mer om Java och trådar. RMI Objektorienterad Realtidsprogrammering 2000 Objektorienterad Realtidsprogrammering.
2D-grafik. Något om FrameWorks
Föreläsning 8 Appletprogram/fristående grafiska program Rita linjer, rektanglar mm Skriva text Byta färg Appletprogram html.
Next previous Innehåll Klassen URL Arbeta med URLer, exempel Speciella referenser (som används i här) Harold, dvs kursboken ”Java Network Programming”
1 ITK:P1 Föreläsning 6 Layoutmodeller i Java DSV Marie Olsson.
Java Nätverks API URL sockets.
Karolinska Institutet, studentundersökning Studentundersökning på Karolinska Institutet HT 2013.
1 Föreläsning 8 Grafik AWT. 2 Grafik Frame använder man för att skapa ett fönster Button använder man om man vill ha en knapp att trycka på Canvas är.
Punktprevalensmätning av trycksår 2011, v.40 Resultat från landstingen
Bastugatan 2. Box S Stockholm. Blad 1 Läsarundersökning Maskinentreprenören 2007.
Exception Handling Kapitel 9. Agenda Exceptions try, throw and catch Skapa en egen exception-klass Multipla throw / catch Slänga vidare en exception Olika.
Streams and File I/O Kapitel 10. Agenda Exceptions Textfiler Skriva Appenda Läsa File Sökvägar.
OOP F4:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 4 Metoder klass-metoder instans-metoder.
Next previous Grafik: 2D-geometri. Något om dubbelbuffring. Java: 2D, awt & Swing. Föreläsning 3 Innehåll 2D-transformationer Mer om 2D-grafik i Java Något.
Enkätresultat för Grundskolan Elever 2014 Skola:Hällby skola.
1 Vänsterskolan Debattartiklar. 2 Aktuell krok 3 Aktuella krokar 1. Direkt krok.
Next previous Föreläsning ii - Mer om Java bla this och konstruktorer Av Björn Eiderbäck Adress: Rum 1641, 6tr NADA Osquars Backe.
Metodik för problemlösning Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar.
Föreläsning 15 (16) Introduktion till Swing. Historik (java.awt) JDK 1.0 – AWT (Abstract Window Toolkit) Paket för gränssnittsprogrammering Har en del.
Hittarps IK Kartläggningspresentation år 3.
Från Gotland på kvällen (tågtider enligt 2007) 18:28 19:03 19:41 19:32 20:32 20:53 21:19 18:30 20:32 19:06 19:54 19:58 20:22 19:01 21:40 20:44 23:37 20:11.
Arbetspensionssystemet i bilder Bildserie med centrala uppgifter om arbetspensionssystemet och dess funktion
TÄNK PÅ ETT HELTAL MELLAN 1-50
Kouzlo starých časů… Letadla Pár foteček pro vzpomínku na dávné doby, tak hezké snění… M.K. 1 I Norrköping får man inte.
HUMAN-CENTERED SYSTEMS ::: DEPT. OF COMPUTER & INFO. SCIENCE Introduktion till Director Jody Foo.
1 Föreläsning 7 Repetition Instansvariabler och klassvariabler Klassmetoder och Instansmetoder.
ITK:P1 Lektion 4 Att implementera en spelidé i Java DSV Peter Mozelius.
1 MSPEL Lektion 2 DSV Peter Mozelius Spel i Java applets.
Arbetspensionssystemet i bilder Bildserie med centrala uppgifter om arbetspensionssystemet och dess funktion
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
1 ITK:P1 Föreläsning 8 Multimedia för spelkonstruktion DSV Peter Mozelius.
Enkätresultat för Grundskolan Föräldrar 2014 Skola - Gillberga skola.
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Next previous GRIP 2000 Föreläsning 4 Innehåll Inmatningstyper Modeller för interaktiva applikationer Observer MVC Lyssnare Pluggbara komponenter Exempel.
Föreläsning 5 Arrayer & ArrayList Hur man använder API:n
1 ITK:P2 F6 Sortering av generiska containerklasser DSV Peter Mozelius.
0. Kod, Klassdiagram och Sekvensdiagram import java.awt.event.*; import javax.swing.*; import java.awt.*; public class TwoThreads implements ActionListener.
Förskoleenkät Föräldrar 2012 Förskoleenkät – Föräldrar Enhet:Hattmakarns förskola.
Föreläsning 13 Appletprogram/fristående grafiska program Arv Rita linjer, rektanglar mm Skriva text, byta färg Appletprogram & HTML Grafiska användargränssnitt.
Föreläsning 9 Arv kap 8.1 Interface kap 9.2 Grafiska användargränssnitt (GUI) kap 10.
2I1073 Lektion 1 KTH-MI Peter Mozelius XHTML, stilmallar och Javascript.
Bild 1 Prognos för länets arbetsmarknad Stefan Tjb.
Grundskola Elever 2013 Grundskoleenkät - Elever Enhet: Gillberga skola.
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
Övning 3. Repetition Metoder class RepetitionMetoder { public static void main(String [] args) double längd = 2.0; double bredd = 1.0; double area =
OOP&M - teori1 OOP del III– Föreläsning vecka 9 GUI Containers och LayoutManagers (Inner classes)
OOP&M - teori1 OOP&M del III– Föreläsning 3 vecka 6 Kontrollkomponenter (Components) Som Applets.
OOP&M - teori1 OOP del III– Vecka 10 Händelser Kontrollkomponenter (Components) Featuring: Applets.
DA7351 Programmering 1 Skapa och placera en komponent i en container Layoutmanagers Applet Händelser och lyssnare Föreläsning 15.
Presentationens avskrift:

next previous Frameworks. Konstruktion av fönster, gränssnitt och användning av grafik i Java OOMPA 2000 Föreläsning 15 Innehåll, kort om: Frameworks Grafik med främst AWT Grafiska interaktiva applikationer Händelsehantering

previous next 2 Frameworks. Konstruktion av grafiska interaktiva applikationer. Frameworks (FW) •Ett FW är centralt för konstruktion av tex interaktiva grafiska applikationer •Varför ett framework? –svårt att tränga in i toolkits, eller följa givna designregler –återanvändbar applikationsdesign eller delsystem –representeras av ett antal abstrakta klasser och definitioner av hur dessa klasser samarbetar, vilket vägleder programutvecklaren och gör det enklare att konstruera enhetliga gränssnitt och applikationer •snabbare •mer uniformt

previous next 3 Frameworks. Konstruktion av grafiska interaktiva applikationer. Vad är ett Framework? •Ett framework (FW) beskriver hur ett problem skall brytas ner –Ett FW beskriver inte bara hur klasserna utan också hur deras instanser samverkar •definierar invarianter som objekten måste dela •anger också hur dom skall användas –Ett FW består typiskt av en uppsättning abstrakta klasser och gränssnitt som beskriver en semikomplett applikation som sedan specialiceras för att konstruera konkreta applikationer –Ett framework “påtvingar” en modell som programmeraren måste anpassa sig till •Dom flesta FW använder designmönster som Template Method och Strategy

previous next 4 Frameworks. Konstruktion av grafiska interaktiva applikationer. Hollywood •Omvänd kontroll –Ibland talar man om Hollywood-principen i ett framework –Ring inte oss vi ringer er! Användarkod Koda med klassbibliotek kod i klassbibliotek Framework Koda med framework användarkod

previous next 5 Frameworks. Konstruktion av grafiska interaktiva applikationer. Exempel på Frameworks i Java •Collection Framework –För mängdhantering –Se Collection-klasserna i Javas tutorial, •Framework för grafiska gränssnitt –Med bla AWT, Swing mm –Se resten av OH-bilderna + Javas tutorial, (Swing) Graphics •Input/output Framework –Strömmar med in- och utmaning –Se

previous next 6 Frameworks. Konstruktion av grafiska interaktiva applikationer. Javas API (Application Programming Interface) •Java:s API innehåller bla awt (abstract windowing toolkit) som delvis kan användas som ett Framework som bla stödjer konstruktion av applikationer med fönster •Den fundamentala klassen Frame –subklassas –beteendet ändras, dvs anpassas till dom egna önskemålen, genom att lämpliga metoder skrivs om i den konkreta (egna) subklassen

previous next 7 Frameworks. Konstruktion av grafiska interaktiva applikationer. Några viktiga klasser i java.awt java.lang java.awt Object Component Container ScrollPane Window Dialog Frame Button List Label Button TextComponent TextArea TextField … java.applet Applet Panel

previous next 8 Frameworks. Konstruktion av grafiska interaktiva applikationer. Skapa fönster import java.awt.*; public class FrameHelloFirst extends Frame { public static void main(String [] args) { FrameHelloFirst frame = new FrameHelloFirst(); frame.setSize(200, 300); //Fönstrets storlek frame.setVisible(true); //Öppna fönstret }

previous next 9 Frameworks. Konstruktion av grafiska interaktiva applikationer. Olika sätt att skapa fönster •Använd klassen Frame •Vi skapar en klass som använder en Frame för att skapa ett fönster import java.awt.Frame; public class Frame1 { public static void main(String args []) { // skapa ett fönster med given titel Frame frame = new Frame("Frame 1"); frame.setSize(300, 400); // fönstrets storlek frame.setVisible(true); // öppna fönstret }

previous next 10 Frameworks. Konstruktion av grafiska interaktiva applikationer.... •Alternativt kan vi konstruera subklass till Frame... public class Frame2 extends Frame { /* om vi vill använda konstruktören med argument måste vi skapa motsvarande konstruktör i den egna klassen */ public Frame2(String s) { super(s); }...

previous next 11 Frameworks. Konstruktion av grafiska interaktiva applikationer. Definiera utritning •Använd "subklass-strategin” •Skriv över metoden paint(Graphics g) •Dvs skriv public void paint(Graphics g) { // använd g för att rita } •metoden anropas automatiskt då fönstret behöver ritas om

previous next 12 Frameworks. Konstruktion av grafiska interaktiva applikationer. Rita text på fönstret •Använd metoden –drawString(String str, int x, int y) i klassen Graphics public void paint(Graphics g) { // vi skriver ut fönstrets höjd System.out.println(getHeight()); g.drawString ("Här kommer en sträng halvägs ner i y-led", 20,//x-koordinat getHeight() / 2); //y-koordinat }

previous next 13 Frameworks. Konstruktion av grafiska interaktiva applikationer. En rutin för att rita lite olika grafik public void paint(Graphics g) { int posY; posY = getBounds().height / 3; g.drawString("Man kan 'rita' ut text", 20, posY); //Färg g.setColor(Color.blue); posY = posY + 30; g.drawString("Man kan ändra färgen (och rita figurer)", 20, posY); g.setColor(Color.red); g.drawLine(10, 10, 100, posY); g.setColor(new Color((float) 0.5, (float) 1.0, (float) 0.7)); g.fill3DRect(posY, posY, posY + 50, posY + 70, true); }

previous next 14 Frameworks. Konstruktion av grafiska interaktiva applikationer. Ett objekt som själv ritar på skärmen import java.awt.*; public class Ball { Color myColor; Point position; int radius; public Ball(Color aColor, Point aPosition, int aRadius) { myColor = aColor; position = aPosition; radius = aRadius; } public void paint(Graphics g) { g.setColor(myColor); g.fillOval(position.x - radius, position.y - radius, 2 * radius, 2*radius); }

previous next 15 Frameworks. Konstruktion av grafiska interaktiva applikationer. … och ändra i Frameklassen public class FrameHelloFourth extends Frame { Ball [] theFigures = { new Ball(Color.red, new Point(70, 70), 50), new Ball(Color.blue, new Point(75, 170), 70)}; public static void main(String [] args) { FrameHelloFourth frame = new FrameHelloFourth(); frame.setSize(200, 300); frame.setLocation(new Point(100, 150)); frame.setTitle("Med två bollar"); frame.setVisible(true); frame.addWindowListener(new MyWindowListener()); } public void paint(Graphics g) { for(int i = 0; i < theFigures.length; i++) { theFigures[i].paint(g); }

previous next 16 Frameworks. Konstruktion av grafiska interaktiva applikationer. Vad kan jag rita i Java? •I Java 1.1 är ritrutinerna ganska primitiva –Man kan endast •rita objekt med tjocklek 1 (ett) •rita enklare typer av primitiva objekt •hantera pixelkartor på ett begränsat sätt –Man kan också använda tex färg och sätta klipprektangel •I Java 2 (JDK 1.2 och senare) med Java2D har vi fler möjligheter –som tex •rita splines och andra kurvor •ange tjocklek på kanter •ange typ av linje (tex rita streckad linjer mm) •ange transformationer som skalning, translation och rotation •rita genomskinligt eller ange att antialiasing skall användas •Idag tittar vi lite på Java 1.1 och den intresserade kan titta på Java 2 på SUNs sidor

previous next 17 Frameworks. Konstruktion av grafiska interaktiva applikationer. Rita ickefyllda grafiska objekt Några exempel •linje gc. drawLine(int x1, int y1, int x2, int y2); •oval gc. drawOval(int x, int y, int width, int height); •rektangel gc. drawRect(int x, int y, int width, int height); •polygon gc. drawPolyline(int xPoints[], int yPoints[], int nPoints); alternativt gc. drawPolygon(Polygon p);

previous next 18 Frameworks. Konstruktion av grafiska interaktiva applikationer. Rita fyllda grafiska objekt •oval gc. fillOval(int x, int y, int width, int height); •rektangel gc.fillRect(int x, int y, int width, int height); •polygon gc.fillPolygon(int[] xPoints, int[] yPoints, int nPoints) eller gc.fillPolygon(Polygon p)

previous next 19 Frameworks. Konstruktion av grafiska interaktiva applikationer. Rita med olika färg •ändra färg gc. setColor(Color c) •rita med XOR-mod, dvs alternera mellan den grafiska kontextens färg och den som ges som argument till metoden gc.setXORMode(Color c1)

previous next 20 Frameworks. Konstruktion av grafiska interaktiva applikationer. Rita bilder •Hämta bild från fil (från en Frame måste vi använda getToolKit, från en applet behövs inte detta) Image image = getToolkit().getImage(imageFile); •Rita bilden på grafiska kontexten (skalad att passa in i given rektangel) gr.drawImage(image, posX, posY, width, height, bgcol, this);

previous next 21 Frameworks. Konstruktion av grafiska interaktiva applikationer. Inmatning i Java •Händelsestyrd inmatning –Förändringar hos enheter placeras i en kö •intresserade program meddelas om att händelse inträffat från början av kön (flera kan alltså meddelas om samma händelse) •Det är sedan upp till varje program att själv bestämma hur det skall (eller inte skall) reagera –Exempel, en metod som reagerar om händelsen dubbeklick inträffar public void doubleClickEvent(Event event) { frame.setLocation(event.position()); }

previous next 22 Frameworks. Konstruktion av grafiska interaktiva applikationer. Java 1.1s händelsemodell •Java 1.1. och senare baseras på en modell där händelser i gränssnitten tas om hand av "lyssnare" •I princip sätter man upp en händelselyssnare per typ (tangentbord, mus, fokus, etc.) av händelse man är intresserad av i applikationen •Varje komponent (knapp, fält, mfl) kan också hanteras av sin egen händelselyssnare buttonX.addActionListener(myListenerForButtonX) •Med fördel används anonyma klasser för att definiera lyssnare för olika objekt

previous next 23 Frameworks. Konstruktion av grafiska interaktiva applikationer. Händelselyssnare •Händelser till en grafisk applikation tas omhand av händelselyssnare •Olika typer av lyssnare tar hand om olika typer av händelser •Till varje lyssnare finns ett speciellt interface som beskriver vilka metoder som lyssnaren implementerar •Lyssnarna och deras interface tillhör ett gemensamt package nämligen: java.awt.event

previous next 24 Frameworks. Konstruktion av grafiska interaktiva applikationer. Inre klasser •I Java kan man deklarera inre klasser på i princip tre sätt –Toppnivåklass public class A { //... private B test = new B(); //... } class B { //.. } –Nästlad medlemsklass public class A { //... class B { //.. } private B test = new B(); //... }

previous next 25 Frameworks. Konstruktion av grafiska interaktiva applikationer.... Inre klasser –Anonym klass public class A { //... Adapter myAdapter = new Adapter() //Här skapas en anonym subklass till Adapter { public void adapt(Event e) { // metoden skriver över superklassen Adapter:s // version av adapt(Event e) } }; //... this.addAdapter(myAdapter); }

previous next 26 Frameworks. Konstruktion av grafiska interaktiva applikationer. Lyssna efter stängningshändelse (med inre klass) import java.awt.*; import java.awt.event.*; public class FrameHelloSecond extends Frame { public static void main(String [] args) { FrameHelloSecond frame = new FrameHelloSecond(); frame.setSize(200, 300); frame.setLocation(new Point(100, 150)); frame.setTitle("The second one"); frame.setVisible(true); /* Vi är trötta på att stänga med CTRL-C så vi skriver följande */ frame.addWindowListener(new MyWindowListener()); }

previous next 27 Frameworks. Konstruktion av grafiska interaktiva applikationer. … och den inre klassen class MyWindowListener implements WindowListener { public void windowOpened(WindowEvent e) {} public void windowClosing(WindowEvent e) { System.exit(0); } public void windowClosed(WindowEvent e) {} public void windowIconified(WindowEvent e) {} public void windowDeiconified(WindowEvent e) {} public void windowActivated(WindowEvent e) {} public void windowDeactivated(WindowEvent e) {} }

previous next 28 Frameworks. Konstruktion av grafiska interaktiva applikationer. "Ritprogram" i Java 1.1 import java.awt.*; import java.awt.event.*; public class Scribble2 extends Frame implements MouseListener, MouseMotionListener { private int last_x = 0, last_y = 0; // koordinater public Scribble2(String s) { super(s); this.addMouseListener(this); this.addMouseMotionListener(this); } Vi deklarerar att vi imple- menterar rätt gränssnitt Vi lyssnar på både musknappar och musrörelser

previous next 29 Frameworks. Konstruktion av grafiska interaktiva applikationer.... // En metod beskriven i MouseListener. // Anropas vid tryck på musknapp. public void mousePressed(MouseEvent e) { last_x = e.getX(); last_y = e.getY(); } // En metod beskriven i MouseMotionListener. // Anropas då musen dras runt med knapp nertryckt. public void mouseDragged(MouseEvent e) { Graphics g = this.getGraphics(); int x = e.getX(), y = e.getY(); g.drawLine(last_x, last_y, x, y); last_x = x; last_y = y; } Vi tar hand om mustryck Vi tar hand om musrörelser

previous next 30 Frameworks. Konstruktion av grafiska interaktiva applikationer.... // Metoder deklarerade i MouseListener måste implementeras // även om vi inte gör något i dem public void mouseReleased(MouseEvent e) {;} public void mouseClicked(MouseEvent e) {;} public void mouseEntered(MouseEvent e) {;} public void mouseExited(MouseEvent e) {;} // och samma sak för metoder från MouseMotionListener. public void mouseMoved(MouseEvent e) {;} public static void main(String args []) { Scribble2 frame = new Scribble2("Scribble- Java 1.1 med lyssnare"); frame.setSize(200, 200); frame.setVisible(true); } Vi måste implementera hela “lyssnaren”

previous next 31 Frameworks. Konstruktion av grafiska interaktiva applikationer. Frame (och Applet) hur var det nu… •Ofta är det tillräckligt att (Java 1.1) –subklassa Frame och implementera tex WindowListener, MouseListener och MouseMotionListener •senare skall vi titta på hur vi istället kan använda adaptorer –skriva public static void main(String args[]) •instansiera den egna klassen, ange fönsterstorlek och ange att fönster och mushändelser skall tas emot ( addWindowListener(this) osv), öppna det hela –skriva public void paint(Graphics g) •rita på skärmen –konstruera metoder för gränssnitt till "lyssnare" som vi angett att vi skall implementera java.langjava.awt java.applet Object Component Container Panel Applet Window Frame

previous next 32 Frameworks. Konstruktion av grafiska interaktiva applikationer. Mer om händelselyssnare •Händelser till ett fönster eller komponent tas omhand av händelselyssnare •Olika typer av lyssnare tar hand om olika typer av händelser, MouseListener, WindowListener, FocusListener, ActionListener, osv –Namnet är uppbyggt på följande sätt: HändelsetypListener •Till varje lyssnare finns ett speciellt interface som beskriver vilka metoder som lyssnaren implementerar •Lyssnarna och deras interface tillhör ett gemensamt package nämligen: java.awt.event

previous next 33 Frameworks. Konstruktion av grafiska interaktiva applikationer. Händelselyssnare, några typiska EventListener ActionListener ComponentListener FocusListener KeyListener MouseMotionListener MouseListener TextListener WindowListener ItemListener ContainerListener AdjustmentListener

previous next 34 Frameworks. Konstruktion av grafiska interaktiva applikationer. Adaptorer och händelselyssnare •För att förenkla användningen av händelselyssnare finns ett antal fördefinierade adaptorer –Dessa adaptorer implementerar alla metoder deklarerade i den aktuella lyssnarens gränssnitt –En adaptor implementerar endast tomma metoder –Genom att subklassa en adaptor och använda den som lyssnare så räcker det att endast skriva om dom metoder som verkligen gör något, så slipper man som i föregående exempel implementera massa metoder utan metodkropp –Dessa adaptorer är speciellt enkla att använda tillsammans med anonyma inre klasser

previous next 35 Frameworks. Konstruktion av grafiska interaktiva applikationer. Adaptorer Object ContainerAdapter FocusAdapter ComponentAdapter MouseMotionAdapter MouseAdapter WindowAdapter ActionListener ComponentListener FocusListener KeyListener MouseMotionListener MouseListener TextListener WindowListener ItemListener ContainerListener AdjustmentListener KeyAdapter Klasser Gränssnitt

previous next 36 Frameworks. Konstruktion av grafiska interaktiva applikationer. Scribble med inre klasser och adaptorer import java.awt.*; import java.awt.event.*; /** Frame med anonyma inre klasser **/ public class Scribble4 extends Frame { int last_x, last_y;... public void init() { // Definiera, instansiera och registrera en MouseListener this.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { last_x = e.getX(); last_y = e.getY();} });

previous next 37 Frameworks. Konstruktion av grafiska interaktiva applikationer.... // Definiera, instansiera och registrera en MouseMotionListener this.addMouseMotionListener(new MouseMotionAdapter() { public void mouseDragged(MouseEvent e) { Graphics g = getGraphics(); int x = e.getX(), y = e.getY(); g.setColor(Color.blue); g.drawLine(last_x, last_y, x, y); last_x = x; last_y = y; } });

previous next 38 Frameworks. Konstruktion av grafiska interaktiva applikationer.... // Konstruera en knapp Button b = new Button("Clear"); // Definiera en lyssnare som tar hand om tryck på knappen b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { /* Rensa hela fönstret genom att rita en fylld rektangel i fönstrets storlek */ Graphics g = getGraphics(); g.setColor(getBackground()); //Rita med bakgrundens färg g.fillRect(0, 0, getSize().width, getSize().height); } }); // Lägg knappen i fönstret this.add(b); }

previous next 39 Frameworks. Konstruktion av grafiska interaktiva applikationer. Klasshierarki AWT Object Component ContainerList Panel Applet Label Window DialogFrame ButtonCheckboxTextComponent TextFieldTextArea

previous next 40 Frameworks. Konstruktion av grafiska interaktiva applikationer. Grafiska komponenter •Det finns flera olika typer av komponenter i Java –Button –Checkbox –List –Choice –Label –TextField –TextArea –Scrollbar •För illustration och exempel se exempel: komponenter nedan sidan 35

previous next 41 Frameworks. Konstruktion av grafiska interaktiva applikationer. Containers •En container är en komponent som kan innehålla andra komponenter •Ett objekt läggs in i containern med meddelandet –add(component) •Instanser av Panel brukar användas för att organisera komponenter på olika sätt inom appleten panel1 panel2

previous next 42 Frameworks. Konstruktion av grafiska interaktiva applikationer. Exempel: komponenter •Ett test av att skapa olika typer av komponenter och låta det hela placeras automatiskt

previous next 43 Frameworks. Konstruktion av grafiska interaktiva applikationer.... den här gången varierar vi oss och gör det som en applet, fast koden blir ungefär densamma som för en Frame. Mer detaljer om appletar nästa föreläsning (F15) import java.awt.*; import java.applet.*; public class DemoComponents extends Applet { private Button button; private Checkbox checkbox; private Label label; private List list; private Choice choice; private Scrollbar scrollbar; private TextField textField; private TextArea textArea;

previous next 44 Frameworks. Konstruktion av grafiska interaktiva applikationer.... public void init() { super.init(); resize(300, 200); button = new Button("En knapp"); add(button); checkbox = new Checkbox("En checkbox"); add(checkbox); label = new Label("En label"); add(label);

previous next 45 Frameworks. Konstruktion av grafiska interaktiva applikationer.... list = new List(); list.addItem("List 1"); list.addItem("List 2"); add(list); choice = new Choice(); choice.addItem("A"); choice.addItem("B"); add(choice); scrollbar = new Scrollbar(); add(scrollbar);

previous next 46 Frameworks. Konstruktion av grafiska interaktiva applikationer.... textField = new TextField("Textfält"); add(textField); textArea = new TextArea("Textruta", 4, 15); add(textArea); } •Skapa en HTML-fil och kör med en appletviewer eller nätbläddrare

previous next 47 Frameworks. Konstruktion av grafiska interaktiva applikationer. Layoutmanagers för att kontrollera placering av komponenter LayoutManager BorderLayout GridLayout GridBagLayout CardLayout FlowLayout

previous next 48 Frameworks. Konstruktion av grafiska interaktiva applikationer.... •FlowLayout –är default för Panelobjekt –placerar komponenter från vänster till höger. Vid full rad så ny rad •GridLayout –ser till att alla komponenter har samma storlek. Rutnät (rad, kolumn) •BorderLayout –är default för Window-klasser (ex Frame och Dialog) –Placerar komponenter i ”vädersträck” •CardLayout –Placerar objekten i en ”kortlek” där endast ett kort i taget synlikt •GridBagLayout –Mest generell (och komplex). Delar in ytan i flera celler. –Använder restriktioner (eng. constraints) för att beskriva hur komponenter placeras samt deras utsträckning

previous next 49 Frameworks. Konstruktion av grafiska interaktiva applikationer. Exempel: Flowlayout import java.awt.*; import java.applet.*; public class DemoFlowlayout extends Applet { Button buttons[]; public void init() { super.init(); setLayout(new FlowLayout()); buttons = new Button[10]; for (int i = 0; i < 10; i++) { buttons[i] = new Button("Knapp " + i); add(buttons[i]); }

previous next 50 Frameworks. Konstruktion av grafiska interaktiva applikationer.... •Layouten ”följer med” förändringar av fönsterstorlek

previous next 51 Frameworks. Konstruktion av grafiska interaktiva applikationer. Exempel: Gridalyout public class DemoGridlayout extends Applet { Button buttons[]; public void init() { super.init(); setLayout(new GridLayout(5, 2)); buttons = new Button[10]; for (int i = 0; i < 10; i++) { buttons[i] = new Button("Knapp " + i); add(buttons[i]); }

previous next 52 Frameworks. Konstruktion av grafiska interaktiva applikationer. Exempel: Borderlayout public class DemoBorderlayout extends Applet { public void init() { super.init(); resize(300, 400); setLayout(new BorderLayout()); add("North", new Button("Knapp " + "Norr")); add("South", new Button("Knapp " + "Söder")); add("East", new Button("Knapp " + "Öster")); add("West", new Button("Knapp " + "Väster")); add("Center", new Button("Knapp " + "Centrum")); }

previous next 53 Frameworks. Konstruktion av grafiska interaktiva applikationer. Metoder för att hantera komponenter •förutom layout kan komponenter också bla –visas eller döljas •setVisible(boolean) –göras aktiva eller passiva •setEnabled(boolean) –omritas, ritas eller markeras som “korrupta” •repaint(), paint(Graphics), invalidate() –layout kan anges för containerbaserade komponenter också –fönster kan visas, läggas i för- eller bakgrunden, titel kan anges, mm •show(), toFront(), toBack() –cursor kan ändras –storlek kanges (tänk på layout null) –...

previous next 54 Frameworks. Konstruktion av grafiska interaktiva applikationer. Blandat exempel import java.awt.*; import java.awt.event.*; public class TestOfFrame extends Frame { public TestOfFrame(String s) { super(s); } protected void delay(int ms) { // Vi måste ta hand om exceptions, vilket görs med ett try-catch-par try{ Thread.currentThread().sleep(ms); } catch(Exception e) {} }

previous next 55 Frameworks. Konstruktion av grafiska interaktiva applikationer.... protected void testLayoutes() { /* Lite urartat visar vi hur man kan fråga om komponenter. I det här fallet vet vi att det är en Container och "kastar" */ Container panel = (Container) this.getComponents()[0]; int delayTime = 3000; delay(delayTime); panel.setLayout(new GridLayout(5, 4, 10, 20)); this.setTitle("Gridlayout"); this.validate(); delay(delayTime); panel.setLayout(new FlowLayout(FlowLayout.LEFT, 7, 7)); this.setTitle("Flowlayout"); this.validate(); Gridlayout Flowlayout

previous next 56 Frameworks. Konstruktion av grafiska interaktiva applikationer.... Component[] panelComponents = panel.getComponents(); for (int i = 0; i < panelComponents.length; i++) { Component component = panelComponents[i]; component.setBounds((i % 5) * 40, i * 25, 50, 20); } delay(delayTime); panel.setLayout(null); this.setTitle("null layout"); this.validate(); } Ingen layout

previous next 57 Frameworks. Konstruktion av grafiska interaktiva applikationer.... public static void main(String args []){ TestOfFrame frame = new TestOfFrame("Test of frame layout"); Panel panel; frame.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e) { System.exit(0); } }); frame.setSize(200, 300); frame.show(); // Vi skapar en panel panel = new Panel(); frame.add(panel);

previous next 58 Frameworks. Konstruktion av grafiska interaktiva applikationer.... //Vi skapar några knappar for (int i = 0; i < 10; i++) { Button button = new Button("Button-" + new Integer(i).toString()); panel.add(button); // Alla knappar får bli "stängknappar" button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e){ System.exit(0); } }); /* För att ett nytt objekt skall visas på skärmen måste vi göra validate på framen (repaint eller invalidate hjälper inte! Bug??) */ frame.validate(); /* Vi skulle ju kunna göra validate efter slingan och visa alla nya knappar på en gång förstås! */ }

previous next 59 Frameworks. Konstruktion av grafiska interaktiva applikationer.... //Vi skapar några fält for (int i = 0; i < 10; i++) { TextField field = new TextField("Field-" + new Integer(i).toString()); panel.add(field); } // Den här gången gör vi "det" efter slingan frame.validate(); // Nu testar vi att ändra layouten frame.testLayoutes(); } }