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 (GUI)
Appletprogram/fristående program Appletprogrammet –körs i en webbläsare eller med programmet appletviewer. –behöver ingen main-metod. –se Cirkel.java Ett fristående grafiskt program –körs med java-kommandot. –kräver att man öppnar ett fönster att rita i. –se CirkelFri.java Exempel finns under ”The Java Tutorial”
Klassen Graphics Ett objekt ur klassen Graphics representerar den yta man ritar på. I klassen finns metoder för att rita linjer, rektanglar, ellipser och polygoner samt skriva text. Skriv import java.awt.*; och import java.awt.event.*; i början av programmet.
Koordinatsystemet (0,0) x y
Linjer drawLine(xstart, ystart, xslut, yslut) (xstart, ystart) (xslut, yslut)
Rektanglar drawRect(xstart, ystart, bredd, höjd) fillRect(xstart, ystart, bredd, höjd) (xstart, ystart) höjd bredd
Text Metoden println fungerar inte i ett grafiskt fönster. Istället används metoden drawString: drawString(sträng, xstart, ystart) Metoden String.valueOf() som omvandlar ett värdet till en sträng behövs när man vill skriva ut tecken eller tal: drawString(String.valueOf(tkn), 5, 20)
Färg Vill man byta den färg som linjer ritas med använder man setColor: setColor(Color.blue); Skapa en egen färg: Color mörkröd = new Color(125,0,0); Metoden setBackground byter bakgrundsfärg: setBackground(Color.pink);
Appletprogram Tas med i hemsidans HTML-kod Kan köras av vem som helst via Netscape/Explorer Innehåller ingen main- utan en paint-metod: public void paint(Graphics g) Parametern g är ett objekt ur klassen Graphics. Skriv import java.applet.*; och import java.awt.*; i början av filen.
Cirkel.java import java.applet.*; import java.awt.*; public class Cirkel extends Applet{ public void paint(Graphics g){ int sida = (int)(100*Math.random()); g.setColor(new Color(100,200,255)); g.fillOval(20,20,sida,sida); } //paint } //Cirkel
Arv När man skapar en ny klass kan man låta den ärva metoder och data från en klass som redan finns. Den existerande klassen kallas superklass. Den klassen som ärver metoder och data kallas subklass.
extends Ordet extends används vid deklaration av subklassen class Cirkel extends Applet { //bla bla } Klassen Cirkel blir nu subklass till Applet och ärver t ex metoden paint() från Applet.
super Om man i subklassen vill hänvisa till superklassen skriver man super. För att anropa en metod som ligger i superklassen kan man skriva super.metod(); Konstruktorn ärvs aldrig. För att anropa superklassens konstruktor kan man skriva super();
interface Ett interface används ungefär som en fördefinierad klass. Metoder i ett interface har givna namn men man måste själv tala om vad metoderna ska göra. Ordet implements används när man deklarerar en klass som ska använda ett interface: class TextInmatning implements ActionListener { // bla bla }
Cirkel.java import java.applet.*; import java.awt.*; public class Cirkel extends Applet{ public void paint(Graphics g){ int sida = (int)(100*Math.random()); g.setColor(new Color(100,200,255)); g.fillOval(20,20,sida,sida); } //paint } //Cirkel
HTML hypertext markup language Består av taggar som markerar textavsnitt. Taggarna omges av <> Filen börjar med taggen och avslutas med taggen I Applet-taggen anger man class-filens namn samt grafikfönstrets storlek (bredd och höjd).
RundaHemsidan.html Min runda hemsida Titta, en cirkel!
Händelsestyrda program I vanliga program utförs satserna i main- metoden - de bestämmer programmets beteende. I ett händelsestyrt program styr tex. användaren vad som ska göras och när, genom att trycka på knappar, välja menyalternativ osv.
Grafiska användargränssnitt Består av: –grafiska komponenter (knappar, menyer, mm) På engelska: GUI components –layout (hur komponenterna placeras ut i fönstret) På engelska: Layout managers –hantering av händelser (t ex en knapptryckning) På engelska: Event handling
Grafiska komponenter Label - används för textutskrifter. Label fråga = new Label(”Ge temp:”); add(fråga); TextField - kan användas för textinmatning. TextField indata = new TextField(”-”); add(indata); String texten = indata.getText(); Button - en knapp att trycka på. Button knapp = new Button(”Tryck!”); add(knapp);
Layout FlowLayout - komponenterna placeras ut radvis från vänster till höger. setLayout(new FlowLayout()); GridLayout - rader och kolumner BorderLayout - en komponent kan placeras i North, East, South, West eller Center CardLayout - som spelkort (med överlapp) GridBagLayout - variant av GridLayout
Händelser (events) Programmet måste reagera på att en händelse har inträffat. Man definierar särskilda klasser, lyssnare, som väntar på att en händelse ska inträffa. I programmet finns: –Kod som visar komponenterna –Lyssnare som väntar på händelser –Metoder som utförs när en händelse inträffat.
Hur gör man? Den klass där lyssnaren ligger måste implementera ett lyssnar-interface: class Fönster extends Frame implements ActionListener{ } En komponent måste associeras med lyssnaren: knapp.addActionListener(this);
Man måste definiera en metod som talar om vad som ska göras vid en händelse. public void actionPerformed(ActionEvent e) { duk.kastaMyntet(); }//Metoden actionPerformed