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.

Slides:



Advertisements
Liknande presentationer
Array Skriv ett program som frågar följande: ”Hur många tal vill du mata in?” användaren matat in ett tal t.ex n. då frågar programmet n ggr följande.
Advertisements

1 Windows programmering (2) Borland C++ Builder 4/5 Modsoft Ab Kent Westerholm.
BENÄMNA lätta ord SPRÅKTRÄNING VID AFASIKg VIII
Klasser och objekt.
Tillämpning av bolagsstyrningskoden vid årsstämmor 2005 och 2006.
Leif Håkansson’s Square Dancer Rotation
Next previous Internetprogrammering 2000 Internetprogrammering 2000 Föreläsning 10 Distribuerad programmering med Javas RMI, Remote Method Invocation.
Projektföljeforskning
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.
Välkommen Vahid Mosavat
Programmeringsteknik för K och Media
Programmeringsteknik för K och Media
Föreläsning 13 Allt om tentan. Sistaminutenhjälp: På fredag 17 december kl 12 sitter Linda i kemi-fiket och svarar på frågor.
Att programmera i språket Java
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.
Föreläsning 6 Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
Skånedatabasen & Region Skånes tillgänglighetsmodell
Karolinska Institutet, studentundersökning Studentundersökning på Karolinska Institutet HT 2013.
Kommunpussel Din uppgift är att sortera de organisatoriska delar på nästa sida på ett sådant sätt att det överensstämmer med hur din kommun är organiserad.
1 Föreläsning 6 Klass Object, instans av klass public/private Klassvariabler och klassmetoder.
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.
Bastugatan 2. Box S Stockholm. Blad 1 Läsarundersökning Maskinentreprenören 2007.
Föreläsning 11 Arrayer.
OOP F4:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 4 Metoder klass-metoder instans-metoder.
Programmering i C# 3. Klasser.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 6 ( ) INNEHÅLL: -Mera om tabeller.
Enkätresultat för Grundskolan Elever 2014 Skola:Hällby skola.
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
1 Vänsterskolan Debattartiklar. 2 Aktuell krok 3 Aktuella krokar 1. Direkt krok.
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
1 Joomla © 2009 Stefan Andersson 1. 2 MÅL 2 3 Begrepp Aktör: en användare som interagerar med webbplatsen. I diagrammet till höger finns två aktörer:
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.
1 Föreläsning 7 Repetition Instansvariabler och klassvariabler Klassmetoder och Instansmetoder.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser -Att definiera egna klasser -Klassvariabler -Klassmetoder.
OOP F3:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 3 Iteration Många variabler av samma sort – Arrayer.
Föreläsning 8 Arv och abstrakta klasser. Arv Definierar en klass utifrån en redan existerande klass Den nya klassen utökar den ärvda klassen ( extends.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 8 ( ) INNEHÅLL:Klasser: -Konstruktorer -Klassvariabler -Instansmetoder -Privata.
2 Agenda 1. Börja arbeta med Excel Hantera arbetsböcker 3. Formler 4. Formatera 5. Diagram 6. Skriva ut 7. Referenser mellan kalkylblad 8. Arbeta.
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 Föreläsning 5 Programmeringsteknik och Matlab 2D1312/2D1305 Repetition Metoder 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.
Next previous RMI, Remote Method Invocation Om du har boken av Marty Hall, läs avsnitt 15.8 För fler exempel se:
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Föreläsning 5 Arrayer & ArrayList Hur man använder API:n
Föreläsning 9 Gränssnitt. Super Super kan användas till anrop av en omdefinierad metod Super kan användas till anrop av konstruktorer i superklassen Super.
Föreläsning 4 Klasser Och Objekt.
1 ITK:P2 F6 Sortering av generiska containerklasser DSV Peter Mozelius.
1. Ett problem/uppgift.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Föreläsning 12 Sökning och Sökträd.
ITK:P1 Föreläsning 2 Introduktion till objektorientering DSV Marie Olsson.
1 Objektorienterad programmering i Java Föreläsning 5 Kort om Java-Applets.
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.
Bild 1 Prognos för länets arbetsmarknad Stefan Tjb.
OOP F13:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 13 Repetition variabler, selektion och iteration.
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 =
Föreläsning 5 Objekt Klasser Konstruktorer Metoder Minnesbilder av objekt.
Programmeringsteknik för K och Media
OOP&M - teori1 OOP del III–vecka 15 Mer NetBeans MouseEvent Graphics Threads TIJ Chapter 14 Menus sid Drawing File Dialogs
Föreläsning4 Repetition slingor Metoder. while-sats består av följande delar: 1. while 2. Villkor-sats (condition) 3. uttryck (statement) while-sats int.
Presentationens avskrift:

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 om Javas AWT och Swing

previous next 2 2D-transformationer. Java: 2D, AWT & Swing Grundläggande transformationer Translation –P' = P + d Rotation –P' = R * P Skalning –P' = S * P

previous next 3 2D-transformationer. Java: 2D, AWT & Swing... Translation –P’ = P + d

previous next 4 2D-transformationer. Java: 2D, AWT & Swing... Rotation kring origo 

previous next 5 2D-transformationer. Java: 2D, AWT & Swing...rotation på matrisform... Visas enklast med tex Eulers formel:

previous next 6 2D-transformationer. Java: 2D, AWT & Swing...

previous next 7 2D-transformationer. Java: 2D, AWT & Swing... Skalning

previous next 8 2D-transformationer. Java: 2D, AWT & Swing... Reflektion

previous next 9 2D-transformationer. Java: 2D, AWT & Swing Transformationer i homogena koordinater För att behandla transformationer på ett uniformt sätt, dvs translation, skalning och rotation använder vi homogena koordinater En punkt representeras av en trippel Vilket h som helst kan väljas, fast i grafik-sammanhang brukar man välja h = 1 Alla transformationer kan representeras av matrismultiplikationer

previous next 10 2D-transformationer. Java: 2D, AWT & Swing Rotation i 2D med homogena koordinater

previous next 11 2D-transformationer. Java: 2D, AWT & Swing Translation i homogena koordinater

previous next 12 2D-transformationer. Java: 2D, AWT & Swing Fler grundläggande operationer Skevning

previous next 13 2D-transformationer. Java: 2D, AWT & Swing Sammanslagning av transformationer Om homogena koordinater används kan alla transformationer utföras som matrismultiplikationer Detta gör att vi slå samman flera transformationer till en ny matris innan vi applicerar den på alla punkter i objektet (/objekten) –detta kan ge stora prestandavinster speciellt om vi skall utföra samma transformationer på tusentals punkter

previous next 14 2D-transformationer. Java: 2D, AWT & Swing Rotation kring fix punkt pfpf  Metod: 1. flytta rotationspunkten till origo 2. rotera 3. flytta tillbaks rotationspunkten

previous next 15 2D-transformationer. Java: 2D, AWT & Swing Dubbelbuffring Problem –I många fall ger omritande av en applikations fönster ett flimrigt intryck Lösning –Använd dubbelbuffring –Dvs en teknik att innan man ritar ut på skärmen först rita i en buffert i minnet när omritningen är klar presenteras hela bufferten (bitkartan) direkt på skärmen

previous next 16 2D-transformationer. Java: 2D, AWT & Swing... Användbara kompletterande tekniker –Bitkartsmanipulerande funktion a la RasterOp/BitBlt Som ger oss möjlighet att kombinera olika bitkartor och samtidigt ange hur med masker och/eller logiska villkor som or, and,osv Användningsområden –Där vi inte vill presentera delresultat –Animering –Gummibandsfigurer Resultat –Vi får en icke flimrande uppdatering –I och försig så går inte utritandet snabbare än vi ritar direkt på skärmen men upplevelsen blir ofta att den gör det

previous next 17 2D-transformationer. Java: 2D, AWT & Swing Gummibandsfigurer Ett sätt att rita linjesegment och andra figurer på ett direktmanipulativt sätt som förändras i interaktion med användaren Metafor ( dvs bildlikt uttryckt, liknelse, efterapning av) –Gummiband Lösningar –Rita linje över bakgrund, återställ, rita ny linje –Någon xor-liknande teknik där gummiband och bakgrund ”blandas” –Dubbelbuffring spara ”gammal” bakgrund rita gummiband återställ ”gammal” bakgrund

previous next 18 2D-transformationer. Java: 2D, AWT & Swing Java2D: hur Kör vi JDK1.2 används egentligen Graphics2D istället för Graphics Graphics2D är definierad som en direkt subklass till Graphics –därför kan vi om vi vill använda den som en Graphics För att komma åt Graphics2D :s rutiner måste vi dock göra en cast (i tex paint -metoden) public void paint(Graphics g) { Graphics2D g2 = (Graphics2D) g; // Nu kan vi använda rutiner i Graphics2D utan att // komplikatorn klagar...

previous next 19 2D-transformationer. Java: 2D, AWT & Swing Java2D: några primitiver och enkla ritrutiner linjetjocklek float width = 10; BasicStroke bs = BasicStroke(width); gc2.setStroke(bs); gc2.drawLine(10, 10, 100, 200); streckad linje float [] dash = {10}; BasicStroke b = new BasicStroke(3.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 10.0f, dash, 0.0f); g2.setStroke(b);

previous next 20 2D-transformationer. Java: 2D, AWT & Swing... polygon GeneralPath p = new GeneralPath(); p.moveTo(0, 0); p.lineTo(w/12, h/10); p.lineTo(0,h/5); p.closePath(); g2.draw(p);

previous next 21 2D-transformationer. Java: 2D, AWT & Swing Java2D: ange typ av linje och hörn I många grafikpaket kan man ange om ändor av linjer skall vara räta, rundade eller projicerade –CAP_BUTT, CAP_ROUND, CAP_SQUARE Motsvarande gäller för hörn i polygoner –BasicStroke.JOIN_MITER, BasicStroke.JOIN_ROUND, BasicStroke.JOIN_BEVEL BasicStroke bs = new BasicStroke(20.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND); Antialiasing g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); –Rita sen som vanligt

previous next 22 2D-transformationer. Java: 2D, AWT & Swing Java2D: rita figurer (urartat) exempel Ett exempel på olika typer av finesser i Java2D, fast utan skriftliga kommentarer här import java.awt.*; import java.awt.event.*; import java.awt.geom.*; public class Test extends Frame { private static int join[] = {BasicStroke.JOIN_MITER, BasicStroke.JOIN_ROUND, BasicStroke.JOIN_BEVEL }; private static String desc[] = {"Mitered", "Rounded", "Beveled"}; public Test(String s){ super(s); }

previous next 23 2D-transformationer. Java: 2D, AWT & Swing... public void drawDemoLines(int w, int h, Graphics2D g2) { AffineTransform at = g2.getTransform(); g2.translate(w/3, h/9); g2.setColor(Color.black); for (int i=0; i < 3; i++) { BasicStroke bs = new BasicStroke(20.0f, BasicStroke.CAP_BUTT, join[i]); GeneralPath p = new GeneralPath(); p.moveTo(0, 0); p.lineTo(w/12, h/10); p.lineTo(0,h/5); p.closePath(); g2.setStroke(bs); g2.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF); g2.draw(p);

previous next 24 2D-transformationer. Java: 2D, AWT & Swing... Color oldColor = g2.getColor(); g2.setColor(Color.red); g2.drawString(desc[i], w/12+20, h/10); g2.setColor(Color.blue); AffineTransform atTemp = g2.getTransform(); g2.translate(200, 0); g2.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.rotate(Math.PI / 3); g2.draw(p); g2.setTransform(atTemp); g2.translate(0, h/4); g2.setColor(oldColor); } g2.setTransform(at); }

previous next 25 2D-transformationer. Java: 2D, AWT & Swing... public void paint(Graphics g) { int x = 30; int y = 50; g.drawString("Streckade linjer", x, y); Graphics2D g2 = (Graphics2D) g; y += 10; float j = 1.1f; for (int i = 0; i < 10; i++, j += 1.0f) { float dash[] = { j}; BasicStroke b = new BasicStroke(3.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 10.0f, dash, 0.0f); g2.setStroke(b); g2.drawLine(5, y, 300, y); y += 5; }

previous next 26 2D-transformationer. Java: 2D, AWT & Swing... drawDemoLines(this.getWidth(),this.getHeight(), g2); } public static void main(String s[]) { Frame f = new Test("A Window"); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e){ System.exit(0);} }); f.setSize(new Dimension(500,400)); f.setVisible(true); }

previous next 27 2D-transformationer. Java: 2D, AWT & Swing Java 1.1: definiera utritning Använd "subklasstsrategin" 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 28 2D-transformationer. Java: 2D, AWT & Swing Java 1.1: 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 29 2D-transformationer. Java: 2D, AWT & Swing 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 1.2 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 först på Java 1.1 och återkommer till några delar av Java 1.2 i slutet (och mer nästa vecka)

previous next 30 2D-transformationer. Java: 2D, AWT & Swing Java 1.1: 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); alt gc. drawPolygon(Polygon p);

previous next 31 2D-transformationer. Java: 2D, AWT & Swing Java 1.1: 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 32 2D-transformationer. Java: 2D, AWT & Swing Java 1.1: 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 givna gc.setXORMode(Color c1)

previous next 33 2D-transformationer. Java: 2D, AWT & Swing Java 1.1: rita bilder Hämta bild från fil (i ett Frame -program) 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 34 2D-transformationer. Java: 2D, AWT & Swing Exempel Exemplet innehåller bland annat –Med metoder för att sätt klipprektangel, färg och rita olika typer av figurer En liten test av olika grafikrutiner

previous next 35 2D-transformationer. Java: 2D, AWT & Swing...kod... import java.awt.*; public class GraphicsDemoFrame extends Frame { static int offsetX = 10, offsetY = 10; String imageFile = "c:/katalog/frog.gif"; Image image = null; public GraphicsDemoFrame(String s){ super(s); }

previous next 36 2D-transformationer. Java: 2D, AWT & Swing... private void drawFunc1(Graphics gr, int x, int y, int w, int h) { // Rita ett X gr.drawLine(x+offsetX,y+offsetY,w-20,h-20); gr.drawLine(x+offsetX,h-20,w-20,y+offsetY); } private void drawFunc2(Graphics gr, int x, int y, int w, int h) { // Rita en röd rektangel Color prevColor = gr.getColor(); gr.setColor(new Color(255,0,0)); gr.fillRect(x+offsetX,y+offsetY,w-20,h-20); gr.setColor(prevColor); }

previous next 37 2D-transformationer. Java: 2D, AWT & Swing... private void drawFunc3(Graphics gr, int x, int y, int w, int h) { // Rita en blå cirkel Color prevColor = gr.getColor(); gr.setColor(new Color(0,0,255)); gr.fillOval(x+offsetX,y+offsetY,w-20,h-20); gr.setColor(prevColor); }

previous next 38 2D-transformationer. Java: 2D, AWT & Swing... private void drawFunc4(Graphics gr, int x, int y, int w, int h) { // Rita en svart rektangel med en grön, förhöjd, rektangel ovanpå Color prevColor = gr.getColor(); gr.setColor(new Color(0,0,0)); gr.fillRect(x+1,y+1,w-2,h-2); gr.setColor(prevColor); prevColor = gr.getColor(); gr.setColor(new Color(0,255,0)); gr.fill3DRect(x+offsetX,y+offsetY,w-20,h- 20,false); gr.setColor(prevColor); }

previous next 39 2D-transformationer. Java: 2D, AWT & Swing... private void drawFunc5(Graphics gr, int x, int y, int w, int h) { // Skriv "Java" i röd fet Courier font Color prevColor = gr.getColor(); gr.setColor(new Color(255,0,0)); //alt. Color.red Font f = new Font("Courier",Font.BOLD,25); gr.setFont(f); gr.drawString("Java!",x+offsetX,y+h/2); gr.setColor(prevColor); }

previous next 40 2D-transformationer. Java: 2D, AWT & Swing... private void drawFunc6(Graphics gr, int x, int y, int w, int h) { // Rita en bild (grodan) Color bgcol = new Color(127,127,127); gr.drawImage(image,x+offsetX,y+offsetY,w-20,h- 20,bgcol,this); }

previous next 41 2D-transformationer. Java: 2D, AWT & Swing... private void drawFunc7(Graphics gr, int x, int y, int w, int h) { // Rita en polygon (femhörning) Polygon fillPol = new Polygon(); fillPol.addPoint(x+offsetX,y+offsetY); fillPol.addPoint(x+15,y+56); fillPol.addPoint(x+5,y+62); fillPol.addPoint(x+95,y+72); gr.fillPolygon(fillPol); }

previous next 42 2D-transformationer. Java: 2D, AWT & Swing... private void drawFunc8(Graphics gr, int x, int y, int w, int h) { // Rita en båge gr.drawArc(x+offsetX,y+offsetY,w-20 h-20,75,190); }

previous next 43 2D-transformationer. Java: 2D, AWT & Swing... public void paint(Graphics gr) {Rectangle r = gr.getClipBounds(); int nBoxWidth = r.width / 4; int nBoxHeight = r.height / 2; gr.clearRect(r.x,r.y,r.width,r.height); // Rama in rutor for (int nTemp1 = 0; nTemp1 < 2; nTemp1++) for (int nTemp2 = 0; nTemp2 < 4; nTemp2++) { int x = nBoxWidth * nTemp2; int y = nBoxHeight * nTemp1; gr.drawRect(x, y, x + nBoxWidth, y + nBoxHeight); }

previous next 44 2D-transformationer. Java: 2D, AWT & Swing... // Anropa respektive ritfunktion drawFunc1(gr,nBoxWidth*0,nBoxHeight*0,nBoxWidth,nBoxHeight); drawFunc2(gr,nBoxWidth*1,nBoxHeight*0,nBoxWidth,nBoxHeight); drawFunc3(gr,nBoxWidth*2,nBoxHeight*0,nBoxWidth,nBoxHeight); drawFunc4(gr,nBoxWidth*3,nBoxHeight*0,nBoxWidth,nBoxHeight); drawFunc5(gr,nBoxWidth*0,nBoxHeight*1,nBoxWidth,nBoxHeight); drawFunc6(gr,nBoxWidth*1,nBoxHeight*1,nBoxWidth,nBoxHeight); drawFunc7(gr,nBoxWidth*2,nBoxHeight*1,nBoxWidth,nBoxHeight); drawFunc8(gr,nBoxWidth*3,nBoxHeight*1,nBoxWidth,nBoxHeight); }

previous next 45 2D-transformationer. Java: 2D, AWT & Swing... public void init() { image = getToolkit().getImage(imageFile); setSize(430,300); } public static void main(String args[]){ //Skapa en instans med givet namn på fönstret GraphicsDemoFrame f = new GraphicsDemoFrame("Olika grafik"); //Initiera f.init(); // Visa fönstret f.setVisible(true); }