DOA GUI-del 1. Java och enkla grafiska gränssnitt. Kodexempel. Steg för steg 1. Skapa fönster. 1. Skapa fönster. 2. Skapa knapp

Storlek: px
Starta visningen från sidan:

Download "DOA GUI-del 1. Java och enkla grafiska gränssnitt. Kodexempel. Steg för steg 1. Skapa fönster. 1. Skapa fönster. 2. Skapa knapp"

Transkript

1 DOA GUI-del 1 Grafik och Interaktionsprogrammering Skapa fönster, rita och ta hand om inmatning i Java Java och enkla grafiska gränssnitt Då man konstruerar enkla grafiska gränssnitt kan man med fördel använda Swing Eller det äldre, men mindre generella/eleganta, AWT Vi börjar med att på ett pragmatiskt sätt diskutera hur enkla grafiska komponenter som inmatningsfält, knappar, mus och 2D-grafik kan hanteras Björn Eiderbäck bjorne@nada.kth.se Först fokuserar vi på grunderna i Swing, med exemplifiering av hur fönster, knappar, inmatningsfält och andra enkla komponenter (widgets) kan konstrueras och hanteras. Vid nästa föreläsning fokuserar vi på modeller, men återkommer också med flera exempel. previous next previous next 2 Fönster JFrame Kodexempel Vi tittar på Java/Swing genom att steg för steg (pragmatiskt!) konstruera en tillämpning med några textinmatningsfält med rubriker, ett fält att rita på, och en knapp. Vi kommer konstruera en tillämpning som ser ut i stil med följande figur Rubrik JLabel Inmatningsfält JTextField Rityta (i detta fall en) JPanel På vilken en text ritats ut Knapp JButton Dessa objekt Grupperade via en JPanel previous next 3 Steg för steg 1. Skapa fönster 2. Skapa knapp Lägg den på fönsterytan 3. Skapa inmatningsfält för text som ska visas Koppla knappbeteende så att det man skrivit in i fältet visas på terminalen vid knapptryck 4. Skapa utritningsyta Koppla ihop knappens beteende så att den ritar texten från fältet på ytan istället 5. Ge koordinater för utritning via inmatningsfält Ordna layouten med inre panel Ta hand om eventuella fel 6. Kompilera och kör previous next 4 1. Skapa fönster Koden skrivs på föreläsningen 2. Skapa knapp Lägg den på fönsterytan previous next 5 previous next 6

2 3. Skapa inmatningsfält för text som ska visas 4. Skapa utritningsyta Koppla knappbeteende så att det man skrivit in i fältet visas på terminalen vid knapptryck Koppla ihop knappens beteende så att den ritar texten från fältet på ytan istället previous next 7 previous next 8 5. Ge koordinater för utritning via inmatningsfält Styr var utritningen ska hamna via koordinater i givna i fält 6. Kompilera och kör Ordna layouten med inre panel Ta hand om eventuella fel previous next 9 previous next 10 Hela kodexemplet i main För överskådlighetens skull skriver vi första versionen av exemplet helt i en main-metod. En sak man då speciellt måste tänka på är att final-deklarera variabler som man vill skicka meddelanden till i inre anonyma klasser package doa1; Om vi ska göra det snyggt så definierar vi ett eget paket (fast man kan klara sig utan paket) Vi behöver använda oss av en del klasser i dessa paket så vi importerar dem (för enkelhets skull hela paketen) previous next 11 public class MyTest1 { fönster public static void main(string[] args) { Dess container knapp inmatningsfält Panel att lägga saker på Panel att rita på Dess storlek Placera i mitten JFrame f = new JFrame("Test"); Container container = f.getcontentpane(); JButton button = new JButton("Rita"); final JTextField text = new JTextField(15); final JTextField xfield = new JTextField(3); final JTextField yfield = new JTextField(3); JPanel panel = new JPanel(); panel.add(new JLabel("Text: ")); panel.add(text); panel.add(new JLabel("x: ")); panel.add(xfield); panel.add(new JLabel("y: ")); panel.add(yfield); final JPanel component = new JPanel(); component.setpreferredsize(new Dimension(200, 200)); container.add(component, BorderLayout.CENTER); container.add(panel, BorderLayout.NORTH); container.add(button, BorderLayout.SOUTH); Vi måste final-deklarera om vi ska accessa variablerna från inre anonyma klasser Vi grupperar vissa objekt genom att lägga dom i en egen panel först Lägg komponenterna i fönstrets container, därmed kommer dom synas då vi öppnar fönstret previous next 12

3 Ta tag i en komponentens grafiska rityta Läs x- och y-koordinater från inmatningsfälten Rita ut texten på komponenten Beskriv vad som ska hända om man trycker på knappen button.addactionlistener(new ActionListener(){ public void actionperformed(actionevent arg0) { Graphics g = component.getgraphics(); int x, y; x = getcoordinate(xfield, 0); y = getcoordinate(yfield, 20); g.drawstring(text.gettext(), x, y); f.setsize(200, 300); f.pack(); f.setvisible(true); Öppna fönstret Fönsterstorlek Se till att komponenterna (layoutmässigt)ordnas efter sina beskrivningar Hjälpmetod private int getcoordinate(final JTextField field, int defaultint) { int intval = defaultint; try { intval = Integer.parseInt(field.getText()); catch (NumberFormatException e1) { ; ; return intval; ); previous next 13 previous next 14 Kodexemplet som klass package doa1; public class MyTest1 { static final String ButtonText = "Rita"; static final int FieldWidth = 3; static final int TextWidth = 15; static final Dimension ComponentDimension = new Dimension(200, 200); static final Point FieldPosition = new Point(0, 20); Om vi aldrig ändrar dessa värden i koden kan vi tydliggöra detta genom att finaldeklarera dessa konstanter. Om dom dessutom inte ska ändras eller anpassas på instansnivå kan vi deklarera dom som klassvariablet (static) public static void main(string[] args) { JFrame f = new JFrame("Test"); new MyTest1(f); f.setsize(200, 300); f.pack(); f.setvisible(true); protected Container container; protected JButton button; protected JTextField text; protected JTextField xfield; protected JTextField yfield; protected JPanel panel; protected JPanel component; Vi definierar komponenterna som instansvariabler previous next 15 previous next 16 public MyTest1(JFrame f) { container = f.getcontentpane(); createbasicwidgets(); populatepanel(); createdrawingcomponent(); populatecontainer(); definebuttonaction(); protected void createbasicwidgets() { button = new JButton("Rita"); text = new JTextField(15); xfield = new JTextField(3); yfield = new JTextField(3); panel = new JPanel(); protected void populatepanel() { panel.add(new JLabel("Text: ")); panel.add(text); panel.add(new JLabel("x: ")); panel.add(xfield); panel.add(new JLabel("y: ")); panel.add(yfield); protected void createdrawingcomponent() { component = new JPanel(); component.setpreferredsize(componentdimension); protected void populatecontainer() { container.add(component, BorderLayout.CENTER); container.add(panel, BorderLayout.NORTH); container.add(button, BorderLayout.SOUTH); previous next 17 previous next 18

4 protected void definebuttonaction() { button.addactionlistener(new ActionListener() { public void actionperformed(actionevent arg0) { Graphics g = component.getgraphics(); int x, y; x = getcoordinate(xfield, (int) FieldPosition.getX()); y = getcoordinate(yfield, (int) FieldPosition.getY()); g.drawstring(text.gettext(), x, y); private int getcoordinate(jtextfield field, int defaultint) { int intval = defaultint; try { intval = Integer.parseInt(field.getText()); catch (NumberFormatException e1) { ; ; return intval; ); previous next 19 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 Med Med Swing bör bör man man använda metoden paintcomponent(graphics g) g) för för flertalet komponenter istället previous next 20 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 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 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 previous next 21 previous next 22 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); 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 23 previous next 24

5 Java 1.1: rita med olika färg ändra färg gc.setcolor(color c) Java 1.1: rita bilder Hämta bild från fil (i ett Frame-program) Image image = gettoolkit().getimage(imagefile); rita med XOR-mod, dvs alternera mellan den grafiska kontextens färg och den givna gc.setxormode(color c1) Rita bilden på grafiska kontexten (skalad att passa in i given rektangel) gc.drawimage(image, posx, posy, width, height, bgcol, this); previous next 25 previous next 26 Enkelt exempel public class LiteGrafikTest extends JFrame { public void paint(graphics g) { //Rita sträng g.drawstring("hallå", 10, 50); //Ändra aktuell färg g.setcolor(color.red); g.drawstring("igen", 15, 70); //Byt font Font f = new Font("Times",Font.BOLD,24); g.setfont(f); g.drawstring("ny font", 15, 100); previous next 27 //Rita oval (med ny färg) g.setcolor(new Color(120, 240, 90)); g.drawoval(100, 200, 100, 75); // och en fylld polygon int x = 20; int y = 120; Polygon fillpol = new Polygon(); fillpol.addpoint(x,y); fillpol.addpoint(x+15,y+60); fillpol.addpoint(x+5,y+70); fillpol.addpoint(x+115,y+80); g.fillpolygon(fillpol); public static void main(string[] args) { LiteGrafikTest f = new LiteGrafikTest(); f.settitle("lite test av grafik"); f.setsize(300, 500); f.setlocation(100, 100); f.setvisible(true); previous next 28 Java2D: hur Kör vi JDK1.2 eller senare används egentligen Graphics2D och inte 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 29 Java2D: några primitiver och enkla ritrutiner linjetjocklek float width = 10; BasicStroke bs = new 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 30

6 Polygon (beskriv först rita sedan) GeneralPath p = new GeneralPath(); p.moveto(0, 0); p.lineto(w/12, h/10); p.lineto(0,h/5); p.closepath(); g2.draw(p); //Rita ut det hela nu 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 31 previous next 32 Java2D, Några exempel Följande två exempel inspirerade av och till stora delar lika med ett par exempel i den utmärkta Javaexempelsamlingen Java Examples in a Nutshell, A Tutorial Companion to Java in a Nutshell, av David Flanagan, O Reilly 3ed 2004, Exempel 1: olika figurer import java.awt.geom.*; import java.awt.font.*; /** A demonstration of Java2D shapes */ public class Shapes extends JComponent{ static final int WIDTH = 725, HEIGHT = 300; public String getname() {return "Shapes"; public int getwidth() { return WIDTH; public int getheight() { return HEIGHT; // Size of our example previous next 33 previous next 34 Shape[] shapes = new Shape[] { // A straight line segment new Line2D.Float(0, 0, 100, 100), // A quadratic bezier curve. Two end points and one control point new QuadCurve2D.Float(0, 0, 80, 15, 100, 100), // A cubic bezier curve. Two end points and two control points new CubicCurve2D.Float(0, 0, 80, 15, 10, 90, 100, 100), // A 120 degree portion of an ellipse new Arc2D.Float(-30, 0, 100, 100, 60, -120, Arc2D.OPEN), // A 120 degree portion of an ellipse, closed with a chord new Arc2D.Float(-30, 0, 100, 100, 60, -120, Arc2D.CHORD), // A 120 degree pie slice of an ellipse new Arc2D.Float(-30, 0, 100, 100, 60, -120, Arc2D.PIE), // An ellipse new Ellipse2D.Float(0, 20, 100, 60), // A rectangle new Rectangle2D.Float(0, 20, 100, 60), // A rectangle with rounded corners new RoundRectangle2D.Float(0, 20, 100, 60, 15, 15), // A triangle new Polygon(new int[] { 0, 0, 100, new int[] {20, 80, 80, 3), ; // These are the labels for each of the shapes String[] labels = new String[] { "Line2D", "QuadCurve2D", "CubicCurve2D", "Arc2D (OPEN)", "Arc2D (CHORD)", "Arc2D (PIE)", "Ellipse2D", "Rectangle2D", "RoundRectangle2D", "Polygon", "Polygon (random)", "Spiral" ; /** Draw the example */ public void paintcomponent(graphics g) { super.paintcomponent(g); Graphics2D g2 = (Graphics2D) g; g2.setfont(new Font("SansSerif", Font.PLAIN, 10)); g2.setstroke(new BasicStroke(2.0f)); g2.setrenderinghint(renderinghints.key_antialiasing, RenderingHints.VALUE_ANTIALIAS_ON); g2.translate(10, 10); previous next 35 previous next 36

7 // Loop through each shape for(int i = 0; i < shapes.length; i++) { g2.setcolor(color.yellow); // Set a color g2.fill(shapes[i]); // Fill the shape with it g2.setcolor(color.black); // Switch to black g2.draw(shapes[i]); // Outline the shape with it g2.drawstring(labels[i], 0, 110); // Label the shape g2.translate(120, 0); // Move over for next shape if (i % 6 == 5) g2.translate(-6*120, 120); // Move down after 6 JFrame f = new JFrame(); Shapes s = new Shapes(); f.getcontentpane().add(s); f.setsize(s.getwidth(), s.getheight()); f.settitle(s.getname()); f.setvisible(true); Exempel 2: Transformationer import java.awt.geom.*; /** A demonstration of Java2D transformations */ public class Transforms extends JComponent{ public String getname() { return "Transforms"; public int getwidth() { return 750; public int getheight() { return 300; Shape shape; // The shape to draw AffineTransform[] transforms; // The ways to transform it String[] transformlabels; // Labels for each transform previous next 37 previous next 38 public Transforms() { GeneralPath path = new GeneralPath(); // Create a shape to draw path.append(new Line2D.Float(0.0f, 0.0f, 0.0f, 100.0f), false); path.append(new Line2D.Float(-10.0f, 50.0f, 10.0f, 50.0f), false); path.append(new Polygon(new int[] { -5, 0, 5, new int[] { 5, 0, 5, 3), false); this.shape = path; // Remember this shape // Set up some transforms to alter the shape this.transforms = new AffineTransform[6]; // 1) the identity transform transforms[0] = new AffineTransform(); // 2) A scale tranform: 3/4 size transforms[1] = AffineTransform.getScaleInstance(0.75, 0.75); // 3) A shearing transform transforms[2] = AffineTransform.getShearInstance(-0.4, 0.0); // 4) A 30 degree clockwise rotation about the origin of the shape transforms[3] = AffineTransform.getRotateInstance(Math.PI*2/12); // 5) A 180 degree rotation about the midpoint of the shape transforms[4] = AffineTransform.getRotateInstance(Math.PI, 0.0, 50.0); // 6) A combination transform transforms[5] = AffineTransform.getScaleInstance(0.5, 1.5); transforms[5].shear(0.0, 0.4); transforms[5].rotate(math.pi/2, 0.0, 50.0); // 90 degrees previous next 39 // Define names for the transforms transformlabels = new String[] { "identity", "scale", "shear", "rotate", "rotate", "combo" ; /** Draw the defined shape and label, using each transform */ public void paintcomponent(graphics g) { super.paintcomponent(g); Graphics2D g2 = (Graphics2D) g; g2.setcolor(color.black); // black g2.setstroke(new BasicStroke(2.0f, BasicStroke.CAP_SQUARE, // 2-pixel BasicStroke.JOIN_BEVEL)); g2.setrenderinghint(renderinghints.key_antialiasing, // antialias RenderingHints.VALUE_ANTIALIAS_ON); previous next 40 // Now draw the shape once using each of the transforms we've defined for(int i = 0; i < transforms.length; i++) { AffineTransform save = g2.gettransform(); // save current state g2.translate(i* , 50); // move origin g2.transform(transforms[i]); // apply transform g2.draw(shape); // draw shape g2.drawstring(transformlabels[i], -25, 125); // draw label g2.drawrect(-40, -10, 80, 150); // draw box g2.settransform(save); // restore transform Swing Ett par av SUNs Java-tutorials som handlar om Swing JFrame f = new JFrame(); Transforms s = new Transforms(); f.getcontentpane().add(s); f.setsize(s.getwidth(), s.getheight()); f.settitle(s.getname()); f.setvisible(true); previous next 41 previous next 42

8 Java Eventmodell 1.1 Java 1.1 och senare har en modell där man definierar objekt som tar omhand om händelser som sker i komponenter i gränssnitten I princip sätter man upp en händelselyssnare per typ (tangentbord, mus, fokus, etc.) av händelse man är intresserad av att applikationen ska reagera på 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 Händelselyssnare Händelser till ett fönster eller komponent tas omhand av händelselyssnare påminner mycket om mönstret Observer, och i grafiska sammanhang om MVC, fast dom "beroende" objekten, dvs lyssnarna, måste implementera ett mer varierat utbud av metoder beroende av typ av lyssnare måste olika API:er implementeras 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 43 previous next 44 Händelselyssnare, några typiska KeyListener ActionListener ComponentListener FocusListener WindowListener EventListener TextListener MouseListener MouseMotionListener ItemListener AdjustmentListener Exempel: implementation av lyssnarfunktionalitet direkt i den egna klassen public class MyFrame1 extends Frame implements WindowListener{ public void windowopened(windowevent e) { 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) { ContainerListener previous next 45 previous next 46 MyFrame1 frame = new MyFrame1(); frame.settitle("fönster som lyssnar efter fönsterhändelser v1 (fönstret gör det själv)"); frame.setsize(400, 300); frame.addwindowlistener(frame); frame.setvisible(true); Exempel: lyssnare som inre klass class MyWindowListener implements WindowListener { public void windowopened(windowevent e) { 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 47 previous next 48

9 public class MyFrame2 extends Frame { Frame frame = new MyFrame2(); frame.settitle("fönster som lyssnar efter fönsterhändelser v2 (med inre klass)"); frame.setsize(400, 300); frame.addwindowlistener(new MyWindowListener()); frame.setvisible(true); 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 implemeneterar 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 49 previous next 50 Object Object Klasser Adaptorer ComponentAdapter ContainerAdapter FocusAdapter KeyAdapter MouseAdapter MouseMotionAdapter WindowAdapter WindowListener WindowListener ActionListener ActionListener AdjustmentListener AdjustmentListener ComponentListener ComponentListener ContainerListener ContainerListener FocusListener FocusListener ItemListener ItemListener KeyListener KeyListener MouseListener MouseListener MouseMotionListener MouseMotionListener TextListener TextListener Gränssnitt Gränssnitt Exempel: lyssnare via adapter class MyWindowAdapter extends WindowAdapter { public class MyFrame3 extends Frame { Frame frame = new MyFrame3(); frame.settitle("fönster som lyssnar efter fönsterhändelser v3 (med egen adapter)"); frame.setsize(400, 300); frame.addwindowlistener(new MyWindowAdapter()); frame.setvisible(true); previous next 51 previous next 52 Exempel: lyssnare via anonym subklass public class MyFrame4 extends Frame { Frame frame = new MyFrame4(); frame.settitle("fönster som lyssnar efter fönsterhändelser v4 (med anonym subklass till adapter)"); frame.setsize(400, 300); frame.addwindowlistener(new WindowAdapter (){ ); frame.setvisible(true); Exempel: RitProgram1 public class RitProgram1 extends JFrame implements WindowListener, MouseListener, MouseMotionListener { protected int last_x, last_y; public RitProgram1(String s) { super(s); this.init(); previous next 53 previous next 54

10 public void init() { // Använd MouseListener och MouseMotionListener // addxxxlistener anger att vi ar intresserade av den aktuella typen av händelser. this.addwindowlistener(this); this.addmouselistener(this); this.addmousemotionlistener(this); this.setsize(300, 300); // En metod beskriven i MouseListener. // Anropas då vid tryck på musknapp. public void mousepressed(mouseevent e) { last_x = e.getx(); last_y = e.gety(); // 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) { // En metod beskriven i MouseMotionListener. // Anropas då musen rörs 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; previous next 55 previous next 56 public void windowopened(windowevent e) { 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) { Exempel: RitProgram2 class MinRityta extends JComponent { protected int last_x, last_y; public MinRityta() { super(); this.init(); public static void main(string args []) { RitProgram1 ritprog = new RitProgram1("Enkelt ritprogram"); ritprog.setvisible(true); previous next 57 previous next 58 public void init() { this.addmouselistener(new MouseAdapter() { public void mousepressed(mouseevent e) { last_x = e.getx(); last_y = e.gety(); ); this.addmousemotionlistener(new MouseMotionAdapter() { public void mousedragged(mouseevent e) { Graphics g = getgraphics(); int x = e.getx(), y = e.gety(); g.drawline(last_x, last_y, x, y); last_x = x; last_y = y; ); public class RitProgram2 { public static void main(string args []) { JFrame ritprog = new JFrame("Ritprogram 2"); ritprog.getcontentpane().add(new MinRityta()); ritprog.addwindowlistener(new WindowAdapter () { ); ritprog.setsize(300, 300); ritprog.setvisible(true); previous next 59 previous next 60

11 Exempel: RitProgram3 (dubbelbuffring) class MinRityta extends JComponent { Image image = null; Graphics img = null; protected int last_x, last_y; public MinRityta() { super(); this.init(); protected Graphics getimgraphics() { if(image == null) { Dimension dim = getsize(); image = createimage(dim.width, dim.height); img = image.getgraphics(); return img; public void paintcomponent(graphics g) { super.paintcomponent(g); if(!(image == null)) g.drawimage(image, 0, 0, this); previous next 61 previous next 62 public void init() { this.addmouselistener(new MouseAdapter() { public void mousepressed(mouseevent e) { last_x = e.getx(); last_y = e.gety(); ); this.addmousemotionlistener(new MouseMotionAdapter() { public void mousedragged(mouseevent e) { Graphics g = getimgraphics(); int x = e.getx(), y = e.gety(); g.drawline(last_x, last_y, x, y); repaint(); last_x = x; last_y = y; ); previous next 63 public class RitProgram3 { public static void main(string args []) { JFrame ritprog = new JFrame("Ritprogram 3"); ritprog.getcontentpane().add(new MinRityta()); ritprog.addwindowlistener(new WindowAdapter () { ); ritprog.setsize(300, 300); ritprog.setvisible(true); previous next 64

Kursens uppläggning. GRIP 2D1640 Föreläsning 1. Sidan borttagen!! Grafik och Interaktionsprogrammering

Kursens uppläggning. GRIP 2D1640 Föreläsning 1. Sidan borttagen!! Grafik och Interaktionsprogrammering GRIP 2D1640 Föreläsning 1 Grafik och Interaktionsprogrammering och översikt Hemsida: http://www.nada.kth.se/kurser/kth/2d1640 Registrering: res checkin grip05 Hemkatalog: /info/grip05 Kursansvarig Björn

Läs mer

Vad är ett Framework? 2203$ ) UHOlVQLQJ. Hollywood. Frameworks (FW) Frameworks. Konstruktion av fönster, gränssnitt och användning av grafik i Java

Vad är ett Framework? 2203$ ) UHOlVQLQJ. Hollywood. Frameworks (FW) Frameworks. Konstruktion av fönster, gränssnitt och användning av grafik i Java 2203$ ) UHOlVQLQJ Frameworks. Konstruktion av fönster, gränssnitt och användning av grafik i Java Innehåll, kort om: Frameworks Grafik med främst AWT Grafiska interaktiva applikationer Händelsehantering

Läs mer

Föreläsnings 11 - GUI, Händelsestyrda program, MVC

Föreläsnings 11 - GUI, Händelsestyrda program, MVC Föreläsnings 11 - GUI, Händelsestyrda program, MVC Josef Svenningsson Tisdag 20/11 Boken Denna föreläsning går igenom följande sektioner i boken: 10.1 och 10.2 11.1 Notera att kapitel 11 inte finns i boken

Läs mer

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 7 Erik Nilsson, Institutionen för Datavetenskap, LiU

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 7 Erik Nilsson, Institutionen för Datavetenskap, LiU TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 7 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Grafiskt användargränssnitt, Swing Layout och komponenter Göra

Läs mer

ITK:P1 Föreläsning 4. Grafiska gränssnitt i Java. AWT-komponenter

ITK:P1 Föreläsning 4. Grafiska gränssnitt i Java. AWT-komponenter ITK:P1 Föreläsning 4 Grafiska gränssnitt och händelsehantering 1 DSV 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

Läs mer

Modelsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545

Modelsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545 Data och Informationsteknik / Computer Science and Engineering Chalmers University of Technology and University of Gothenburg Magnus Myréen Modelsvar för Tentamen för Objektorienterad programvaruutveckling,

Läs mer

Detta dokument är ett exempel, cirka andra hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling

Detta dokument är ett exempel, cirka andra hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling Detta dokument är ett exempel, cirka andra hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling Fulltentamen vitsord: 3=28p, 4=38p, 5= 48p, max 60p. Max 30p i denna halvtentamen Hjälpmedel:

Läs mer

Programmeringsteknik II - HT18. Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt

Programmeringsteknik II - HT18. Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt Programmeringsteknik II - HT18 Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt 18-09-28 1 Förra gången: Arv och klasshierarkier Vi såg hur

Läs mer

Föreläsning 14: Grafik & mera händelsehantering

Föreläsning 14: Grafik & mera händelsehantering TDA 545: Objektorienterad programmering Föreläsning 14: Grafik & mera händelsehantering Magnus Myréen Chalmers, läsperiod 1, 2015-2016 Idag Idag: grafik läs kap 17 Viktigt i denna föreläsning: att rita

Läs mer

Frames, menyer och GUI-program

Frames, menyer och GUI-program 15 Frames, menyer och GUI-program Frames En frame-klass Om konstruktorer - igen Funktionella fönster Menyer Popupmenyer GUI-applikationer Dialogrutor Printerutskrift Kap 15: Sid 2 Frames Redan i kapitel

Läs mer

DOA Konstruktion av gränssnitt 5 april 2004 av Björn Eiderbäck

DOA Konstruktion av gränssnitt 5 april 2004 av Björn Eiderbäck DOA Konstruktion av gränssnitt 5 april 2004 av Björn Eiderbäck Innehåll del 1, oh 1 oh 21 Användargränssnitt Något om tekniker för gränssnittsbyggande Typiskt gränssnitt Verktyg Knappar Vi hoppar en del

Läs mer

Objektorienterad Programkonstruktion. Föreläsning 3 7 nov 2016

Objektorienterad Programkonstruktion. Föreläsning 3 7 nov 2016 Objektorienterad Programkonstruktion Föreläsning 3 7 nov 2016 Klass/instans Med hjälp av nyckelordet static kan vi bestämma att en metod eller ett fält ska tillhöra själva klassen i stället för en specifik

Läs mer

Föreläsning 15 (16) Historik (java.awt) Historik (javax.swing) Introduktion till Swing

Föreläsning 15 (16) Historik (java.awt) Historik (javax.swing) Introduktion till Swing 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 nackdelar: Använder s.k. native code Stödjer endast komponenter

Läs mer

ID1004 Laboration 3, 5-6 November 2012

ID1004 Laboration 3, 5-6 November 2012 18-okt-2012/FK ID1004 Laboration 3, 5-6 November 2012 Labben bör göras individuellt. Beräknad tid ca 2 timmar. Instruktionen antar att labben utförs i datasal, med hjälp av den integrerade utvecklingsmiljön

Läs mer

Objektorienterad Programkonstruktion. Föreläsning 3 9 nov 2015

Objektorienterad Programkonstruktion. Föreläsning 3 9 nov 2015 Objektorienterad Programkonstruktion Föreläsning 3 9 nov 2015 Kursnämnd Namn kommer... UML: Klassdiagram UML: Relationer Ärver från superklass Implementerar gränssnitt Dubbelriktad eller oriktad relation

Läs mer

Transformationer. Translation. Skalning. Homogena koordinater. Rotation. 2D-grafik. x y. Inom datorgrafik är transformationer den. Många. bevaras.

Transformationer. Translation. Skalning. Homogena koordinater. Rotation. 2D-grafik. x y. Inom datorgrafik är transformationer den. Många. bevaras. Transformationer D-grafik Gustav Taén gustavt@nada.kth.se Inom datorgrafik är transformationer den kanske viktigaste formen av operation. De vanligaste transformationerna är linjära och kan skrivas som

Läs mer

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3 TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3 Laboration 3 Visualisering (och implementering) av sortering Exempel på grafik (med Swing-paketet) Frågor 1 Laboration 3 Visualisering

Läs mer

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Föreläsning 5 Innehåll Subklasser och arv Inledning till grafik (JFrame och JPanel).

Läs mer

Laboration 4: Game of Life

Laboration 4: Game of Life Laboration 4: Game of Life Programmerade system I1 Bakgrund: I denna laboration ska vi ägna oss åt Game of Life, vilket är en mycket enkel modell av en population organismer som kan leva, dö och fortplanta

Läs mer

GUI-programmering. Gustav Taxén Martin Berglund DH2640 Grafik och Interaktionsprogrammering VT 2008

GUI-programmering. Gustav Taxén Martin Berglund DH2640 Grafik och Interaktionsprogrammering VT 2008 GUI-programmering Gustav Taxén gustavt@csc.kth.se Martin Berglund mabe02@kth.se DH2640 Grafik och Interaktionsprogrammering VT 2008 WIMP Window Icon Menu Pointing device Modernt Gränssnitt Vad ingår i

Läs mer

Lab5 för prgmedcl04 Grafik

Lab5 för prgmedcl04 Grafik Lab5 för prgmedcl04 Grafik Viktigt läs detta först:den här labblydelsen är ganska lång, detta betyder inte att labben tar lång tid.en hel del av lydelsen är anvisning om hur man går tillväga för att kunna

Läs mer

Laboration 15 Grafiskt användargränssnitt

Laboration 15 Grafiskt användargränssnitt Laboration 15 Grafiskt användargränssnitt Avsikten med denna laboration är att du ska träna på att skriva program som använder grafiskt användargränssnitt, dvs program som använder grafiska komponenter

Läs mer

Lektion Händelsehanterare

Lektion Händelsehanterare Lektion Händelsehanterare Händelsehanterare kallas även lyssnare. En lyssnare har som uppgift att ta hand om olika händelser som kan inträffa. För att lyssnaren skall reagera på händelser måste den registreras

Läs mer

Fönstersystem. Objektorientering och händelsebaserad programmering. Applikation. Interaktionstoolkit. Händelsehanterare och grafiktoolkit

Fönstersystem. Objektorientering och händelsebaserad programmering. Applikation. Interaktionstoolkit. Händelsehanterare och grafiktoolkit Objektorientering och händelsebaserad programmering Gustav Taxén gustavt@nada.kth.se Fönstersystem Applikation Interaktionstoolkit Händelsehanterare och grafiktoolkit Operativsystem Hårdvara 1 Frameworks

Läs mer

Grafiska användargränsnitt i Java. Föreläsning 7 Innehåll. Använda klasspaketet Swing. Klasspaket i Java. Grafiska användargränsnitt i Java

Grafiska användargränsnitt i Java. Föreläsning 7 Innehåll. Använda klasspaketet Swing. Klasspaket i Java. Grafiska användargränsnitt i Java Föreläsning 7 Innehåll Grafiska användargränsnitt i Java Grafiska användargränsnitt i Java Komponenter (fönster, knappar, ) Layout Händelsehantering (Hur man får någonting att hända när användaren t.ex.

Läs mer

Laboration 3 GUI-programmering

Laboration 3 GUI-programmering Laboration 3 GUI-programmering Syfte Erbjuder studenterna en möjlighet att lära sig grunderna i gränssnittsprogrammering i Java. Genomförande Genomförs individuellt eller i grupp om 2 personer. Uppskattad

Läs mer

Föreläsning 2, vecka 6: Tillstånd i objektorienterade program (och mera interface)

Föreläsning 2, vecka 6: Tillstånd i objektorienterade program (och mera interface) TDA 548: Grundläggande Programvaruutveckling Föreläsning 2, vecka 6: Tillstånd i objektorienterade program (och mera interface) Magnus Myréen Chalmers, läsperiod 1, 2016-2017 Terminologi Vad är en klass?

Läs mer

Rita Egna Bilder, Timer

Rita Egna Bilder, Timer Rita Egna Bilder, Timer Josef Svenningsson November 27, 2012 Grafik Varje gång ett fönster behöver ritas om, pga av att det flyttas eller varit övertäckt, anropas automatiskt en metod som har namnet paintcomponent.

Läs mer

2D-grafik. Gustav Taxén

2D-grafik. Gustav Taxén 2D-grafik Gustav Taxén gustavt@csc.kth.se 2D164 Grafik och Interaktionsprogrammering VT 27 Framebuffer Datorminne som lagrar information för pixlarna som ska visas på skärmen Grafikkortet hämtar värdena

Läs mer

Modelsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545

Modelsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545 Data och Informationsteknik / Computer Science and Engineering Chalmers University of Technology and University of Gothenburg Magnus Myréen Modelsvar för Tentamen för Objektorienterad programvaruutveckling,

Läs mer

Modellsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545

Modellsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545 Data och Informationsteknik / Computer Science and Engineering Chalmers University of Technology and University of Gothenburg Magnus Myréen Modellsvar för Tentamen för Objektorienterad programvaruutveckling,

Läs mer

Labbinstruktioner för Java/Swing

Labbinstruktioner för Java/Swing Labbinstruktioner för Java/Swing Grafik- och interaktionsprogrammering 2008 Martin Berglund Allmänt Dessa instruktioner är på intet sett den enda möjliga lösningen på labben, tvärtom finns

Läs mer

2I1049 Föreläsning 8. Grafiska gränssnitt i Java. AWT-komponenter. Grafiska gränssnitt, Java interface och händelsehantering

2I1049 Föreläsning 8. Grafiska gränssnitt i Java. AWT-komponenter. Grafiska gränssnitt, Java interface och händelsehantering 2I1049 Föreläsning 8 Grafiska gränssnitt, Java interface och händelsehantering 1 KTH-MI Peter Mozelius Grafiska gränssnitt i Java Efterfrågan på program med grafiskt gränssnitt har ökat avsevärt de senaste

Läs mer

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3 TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 3 Laboration 3 Visualisering (och implementering) av sortering Exempel på grafik (med Swing-paketet) Frågor 1 Laboration 3 Visualisering

Läs mer

Malmö högskola 2007/2008 Teknik och samhälle

Malmö högskola 2007/2008 Teknik och samhälle Laboration Gui Avsikten med denna laboration är att du ska träna på att bygga grafiska användargränssnitt. Spara dina resultat i paketet laborationgui. Längst bak i laborationen finns fullständiga lösningar

Läs mer

Två designmönster, MVC och Observer/Observable. Objektorienterad programvaruutveckling GU (DIT011)

Två designmönster, MVC och Observer/Observable. Objektorienterad programvaruutveckling GU (DIT011) Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Innehåll Föreläsning 8 Två designmönster, MVC och Observer/Observable. Designrekommendation

Läs mer

Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02

Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02 Frivillig Java-swing-Graphics-lab Programmeringsteknik MN1 vt02 Denna laboration är frivillig och syftar till att låta dig lära mer om grafik i java. Labben är ganska grundlig och går igenom vad du skall

Läs mer

Repetitionsföreläsning 2: Quiz & problemlösning med swing Inget nytt material.

Repetitionsföreläsning 2: Quiz & problemlösning med swing Inget nytt material. TDA 545: Objektorienterad programmering Repetitionsföreläsning 2: Quiz & problemlösning med swing Inget nytt material. Magnus Myréen Chalmers, läsperiod 1, 2015-2016 Idag En quiz! tinyurl.com/tda545quiz

Läs mer

LiTHehack? Här? lithehack se koma Tisdagar och torsdagar

LiTHehack? Här? lithehack se koma Tisdagar och torsdagar 0 Java och Swing LiTHehack? Här? @ kontakt /. lithehack se. lithehack se koma -, 17 19 Tisdagar och torsdagar Idag grafik menyer kortkomandon pop up-menyer submenyer Skansholm Java direkt upplaga 6 eller

Läs mer

Modellsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545

Modellsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545 Data och Informationsteknik / Computer Science and Engineering Chalmers University of Technology and University of Gothenburg Magnus Myréen Modellsvar för Tentamen för Objektorienterad programvaruutveckling,

Läs mer

Objektorienterad programmering med Java Swing: Händelser, lyssnare och applets

Objektorienterad programmering med Java Swing: Händelser, lyssnare och applets GUI (forts) Objektorienterad programmering med Java Swing: Händelser, lyssnare och applets Sven-Olof Nyström Uppsala Universitet 18 mars 2005 Skansholm: Kapitel 6 Användaren kan kommunicera med programmet

Läs mer

Dagens program. Programmeringsteknik och Matlab. Vad är arv? Vi ärver från GregorianCalendar. Kan vi bygga vidare på existerande klasser?

Dagens program. Programmeringsteknik och Matlab. Vad är arv? Vi ärver från GregorianCalendar. Kan vi bygga vidare på existerande klasser? Programmeringsteknik och Matlab Övning 6 Dagens program Övningsgrupp 2 (Sal Q22/E32) Johannes Hjorth hjorth@nada.kth.se Rum 4538 på plan 5 i D-huset 08-790 69 02 Kurshemsida: http://www.nada.kth.se/kurser/kth/2d1312

Läs mer

Exempel på användning av arv: Geometriska figurer

Exempel på användning av arv: Geometriska figurer (9 maj 2014 Klasshierarkier 1 ) Exempel på användning av arv: Geometriska figurer Uppgift: Skriv ett program som kan hantera några olika geometrisk figurer: linjer, cirklar och rektanglar. (9 maj 2014

Läs mer

MVC-mönstret. model-view-control i Swing

MVC-mönstret. model-view-control i Swing MVC-mönstret model-view-control i Swing MVC Tanken bakom MVC (model view control) är att separera uppgifter i ett program från varandra. Model - Den data som behandlas View - Hur användargränssnittet ser

Läs mer

Arv och polymorfi. Lite terminologi; Basklass eller superklass: En klass som fungerar som bas för vårt arv. Vi skapar nya klasser utifrån den.

Arv och polymorfi. Lite terminologi; Basklass eller superklass: En klass som fungerar som bas för vårt arv. Vi skapar nya klasser utifrån den. Arv och polymorfi Arv och polymorfi är två centrala begrepp i objektorientering. Arvsmekanismen innebär att vi kan skapa nya klasser utifrån redan existerande klasser. Man gör detta med hjälp av nyckelordet

Läs mer

Fortsättningskurs i programmering F 5. GUI händelsehantering - undantagshantering Hugo Quisbert 20130205 AWT. Paket för hantering av grafik

Fortsättningskurs i programmering F 5. GUI händelsehantering - undantagshantering Hugo Quisbert 20130205 AWT. Paket för hantering av grafik Fortsättningskurs i programmering F 5 GUI händelsehantering - undantagshantering Hugo Quisbert 20130205 1 Abstract Window Toolkit Paket för hantering av grafik dvs skapa grafisk användargränssnitt java.awt

Läs mer

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010) Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010) Tid: 2:a september 200, klockan 8:30-12:30. Plats: V Ansvarig lärare: Katarina Blom, tel 772 10 0. Läraren besöker tentamen kl 9:30

Läs mer

Java-concept och Swing. Swing low, sweet chariot

Java-concept och Swing. Swing low, sweet chariot Java-concept och Swing Swing low, sweet chariot Javas Swing-API En del av Javas standard-api API - application programming interface Ett klassbibiliotek som följer med Java Är designat med många OO-concept

Läs mer

Swing. MER Java Foundation Classes (JFC) Hur lära sig? Vad är farorna. LayoutManagers. Exempel på några av komponenterna

Swing. MER Java Foundation Classes (JFC) Hur lära sig? Vad är farorna. LayoutManagers. Exempel på några av komponenterna MER Java Foundation Classes (JFC) Swing Swing Många klasser Vettigt att lära sig dem utantill - Tror inte det -... men det kan vara bra att ha en liten överblick över vad som finns - Idag (och med fortsättning

Läs mer

Föreläsning 13: Swing (GUI), händelser, timer

Föreläsning 13: Swing (GUI), händelser, timer TDA 545: Objektorienterad programmering Föreläsning 13: Swing (GUI), händelser, timer GUI = graphical user interface Magnus Myréen Chalmers, läsperiod 1, 2015-2016 Idag Idag: grafiska gränssnitt; läs kap

Läs mer

Föreläsning 3: Händelsestyrda program och användargränssnitt

Föreläsning 3: Händelsestyrda program och användargränssnitt (2 september 2015 F3.1 ) Föreläsning 3: Händelsestyrda program och användargränssnitt Idag Från sekventiella till händelsestyrda program Lyssnare Kontroller Layout för ordning av kontroller (2 september

Läs mer

Swing. MER Java Foundation Classes (JFC) Vad är farorna. Hur lära sig? LayoutManagers. Exempel på några av komponenterna

Swing. MER Java Foundation Classes (JFC) Vad är farorna. Hur lära sig? LayoutManagers. Exempel på några av komponenterna MER Java Foundation Classes (JFC) Swing Swing Många klasser" Vettigt att lära sig dem utantill" - Tror inte det" -... men det kan vara bra att ha en liten överblick över vad som finns" - Idag (och med

Läs mer

Händelsestyrda program

Händelsestyrda program JavaD- 1 Program- eller händelsestyrd exekvering Händelsestyrda program JavaD- 2 Programstyrd exekvering I ett traditionellt program bestämmer programmet när det är dags att läsa indata, programmets exekvering

Läs mer

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes Idag statiska metoder och variabler private/public/protected final, abstrakta klasser, gränssnitt, delegering wrapper classes ett lite större exempel Objectorienterad programmering Sida 1 Vad vi vet om

Läs mer

Modellsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545

Modellsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545 Data och Informationsteknik / Computer Science and Engineering Chalmers University of Technology and University of Gothenburg Magnus Myréen Modellsvar för Tentamen för Objektorienterad programvaruutveckling,

Läs mer

Lösningar för tenta 3 DAT043,

Lösningar för tenta 3 DAT043, Lösningar för tenta 3 DAT043, 2018-08-22. Uppgift 1 class Person{ public String förnamn; public String efternamn; public int ålder; private double längd; private double vikt; public Person(String förnamn,

Läs mer

Föreläsning 12. Föreläsning 12. Rörliga figurer Klassen Timer Undantag Något om applets. Rörliga appletsfigurer Klassen Timer Undantag

Föreläsning 12. Föreläsning 12. Rörliga figurer Klassen Timer Undantag Något om applets. Rörliga appletsfigurer Klassen Timer Undantag Föreläsning 12 Föreläsning 12 Rörliga figurer Klassen Timer Undantag Något om applets Rörliga appletsfigurer Klassen Timer Undantag Något om applets Klassen javax.swing.timer I Swing finns en klass Timer

Läs mer

Objektorienterad Programmering DAT043. Föreläsning 5 29/1-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

Objektorienterad Programmering DAT043. Föreläsning 5 29/1-18 Moa Johansson (delvis baserat på Fredrik Lindblads material) Objektorienterad Programmering DAT043 Föreläsning 5 29/1-18 Moa Johansson (delvis baserat på Fredrik Lindblads material) 1 Repetition: Arv En subklass ärver alla variabler och metoder från sin superklass.

Läs mer

Projekt 2 XL. Observer-mönstret

Projekt 2 XL. Observer-mönstret Projekt 2 XL Objektorienterad modellering och diskreta strukturer Inför nästa projekt Lennart Andersson Reviderad 2011 10 24 2011 OMD 2011 F15-1 Schema designmöten OMD 2011 F15-2 Observer-mönstret 2 och

Läs mer

Mer om grafiska komponenter. Händelsestyrda program

Mer om grafiska komponenter. Händelsestyrda program Layout Managers TDA143 I1 Programmerade system Föreläsning 14 (OH-bilder 10) Mer om grafiska komponenter. Händelsestyrda program Utplaceringen av komponenter i en behållare styrs med en Layout Manager.

Läs mer

Denna vecka. Idag. Grafiskt användarsnitt. Vi kommer att se

Denna vecka. Idag. Grafiskt användarsnitt. Vi kommer att se 1 F18-20-2006 Denna vecka Måndag: Ett komplext problem Tisdag: Lektion. Kväll: Essäfrågan distribueras via webben. Dead-line onsdag 17 maj, kl 12.00. Inlämning elektroniskt och på papper. Onsdag: Grafik

Läs mer

Grafik: Att "rita" egna komponenter

Grafik: Att rita egna komponenter jonas.kvarnstrom@liu.se 2016 Grafik: Att "rita" egna komponenter Intro 1: Rita Allt på skärmen ritas som pixlar Även de vanliga GUI-komponenterna 2 Gradienter, skuggning Matematisk fontkurva görs till

Läs mer

PROG2 Tenta 2014-05-02 Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2

PROG2 Tenta 2014-05-02 Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2 DSV SU/KTH sid 1 (6) PROG2 PROG2 Tenta 2014-05-02 Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2 Tentan består av tre uppgifter. Max poäng är 38. För betyget E (godkänd) krävs minst

Läs mer

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 18

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 18 Grundläggande programmering, STS 1, VT 2007. Sven Sandberg Föreläsning 18 Igår: Genomgång av dugga Rekursion Idag och på måndag: Om essän Lite, lite teori om konstanter Grafiska användargränssnitt Grundläggande

Läs mer

Tentamen i Objektorienterad programmering

Tentamen i Objektorienterad programmering CHALMERS TEKNISKA HÖGSKOLA Datavetenskap TDA547 Tentamen i Objektorienterad programmering Lördagen 12 mars 2011, 8.30 12.30. Jourhavande lärare: Björn von Sydow, tel 0762/981014. Inga hjälpmedel. Lösningar

Läs mer

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer Java: Utvecklingsverktyg, datatyper, kontrollstrukturer Sven-Olof Nyström Uppsala Universitet 13 juni 2005 1 Utvecklingsverktyg för Java Vi rekommenderar Suns utvecklingsverktyg (SDK, tidigare JDK), se

Läs mer

Tentamen Objekt-orienterad programmering med Java, 1DL100 Sommarkurs och distanskurs

Tentamen Objekt-orienterad programmering med Java, 1DL100 Sommarkurs och distanskurs Tentamen 2006-0823 Objekt-orienterad programmering med Java, 1DL100 Sommarkurs och distanskurs Uppsala Universitet Instutitionen för informationsteknologi Avdelningen för datalogi Kursansvarig: Sven-Olof

Läs mer

Grafiskt användargränssnitt (GUI-Graphical User Interface) intro Komponenter

Grafiskt användargränssnitt (GUI-Graphical User Interface) intro Komponenter Grafiskt användargränssnitt (GUI-Graphical User Interface) intro Komponenter De komponenter som vi ska titta lite närmare på den här gången är paneler (JPanel), knappar (JButton), textfält (JTextField).

Läs mer

För att hitta filen gå till mappen NetBeansProjects. Välj undermappen med rätt projekt, och sedan undermapp dist. Där ligger.jar-filen.

För att hitta filen gå till mappen NetBeansProjects. Välj undermappen med rätt projekt, och sedan undermapp dist. Där ligger.jar-filen. Java utan netbeans Du har gjort ett program i netbeans Hur exportera det så att andra kan köra det utan att använda netbeans? Välj projektet som main project Högerklicka på det och välj Clean and Build

Läs mer

Grafik i DrRacket AV TOMMY KARLSSON

Grafik i DrRacket AV TOMMY KARLSSON Grafik i DrRacket AV TOMMY KARLSSON Upplägg Grundläggande grafik i racket Frame% Kodexempel! Generella problemlösarstrategier Grafisk kodstruktur Button% Pane% & Panel% Canvas% Bitmap% Grafisk effektivisering

Läs mer

Omentamen FYTA11 Javaprogrammering

Omentamen FYTA11 Javaprogrammering Lunds universitet FYTA11 Institutionen för Teoretisk Fysik HT 08 Omentamen FYTA11 Javaprogrammering Onsdag 4:e februari 2009, 13:00 17:00 Instruktioner Inga hjälpmedel är tillåtna. Behandla högst en uppgift

Läs mer

Objektorientering i allmänhet

Objektorientering i allmänhet Objektorientering i allmänhet Objektorientering och händelsebaserad programmering Gustav Taxén gustavt@nada.kth.se Ett objekt är en "låda" da" där man samlar Data Metoder som (oftast) manipulerar denna

Läs mer

Kort om klasser och objekt En introduktion till GUI-programmering i Java

Kort om klasser och objekt En introduktion till GUI-programmering i Java Kort om klasser och objekt En introduktion till GUI-programmering i Java Klasser En klass är en mall för hur man ska beskriva på något. Antag att vi har en klass, Bil. Den klassen innehåller en lista på

Läs mer

Lösningar till tentamen i EDAF25

Lösningar till tentamen i EDAF25 Lösningar till tentamen i EDAF25 1 juni 2017 Lösning 1 Se figur 1. Figure 1: Tillståndsdiagram espressomaskin Lösning 2 (a) Kompositmönstret (b) Se figur 2 (c) Se figur 3 : Square : Drawing : Group : Circle

Läs mer

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 5 Jonas Lindgren, Institutionen för Datavetenskap, LiU

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 5 Jonas Lindgren, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 5 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Algoritmanalys, Ordo Sortering, Insertionsort

Läs mer

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. 1 (8) DUGGA: Objektorienterade applikationer Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Skriv ditt namn, personnummer och e-postadress på försättsbladet. Skriv rent dina svar.

Läs mer

Att prova på en enkel Applet och att lära sig olika sätt att hämta data från tangentbordet. Du får även prova på att skapa din första riktiga klass.

Att prova på en enkel Applet och att lära sig olika sätt att hämta data från tangentbordet. Du får även prova på att skapa din första riktiga klass. Datateknik A, Syfte: Att prova på en enkel Applet och att lära sig olika sätt att hämta data från tangentbordet. Du får även prova på att skapa din första riktiga klass. Att läsa: Lektion 2 Uppgifter:

Läs mer

OOP Objekt-orienterad programmering

OOP Objekt-orienterad programmering OOP F16:1 OOP Objekt-orienterad programmering Föreläsning 16 Grafiska användargränssnitt, GUI Ytor Komponenter Layout-managers Lyssnare GUI - Graphical User Interface OOP F16:2 Man skapar en yta (ett fönster)

Läs mer

ITK:P1 Föreläsning 8. Verktyget Javadoc. Kommentarer för Javadoc. Multimedia för spelkonstruktion

ITK:P1 Föreläsning 8. Verktyget Javadoc. Kommentarer för Javadoc. Multimedia för spelkonstruktion ITK:P1 Föreläsning 8 Multimedia för spelkonstruktion 1 DSV Peter Mozelius Verktyget Javadoc De flesta program behöver dokumentation I Java finns ett verktyg som genererar HTML- dokumentation på ett enkelt

Läs mer

Frameworks. GUI till tusen. GUI till tusen. Sampling architectures. Inmatningstyper

Frameworks. GUI till tusen. GUI till tusen. Sampling architectures. Inmatningstyper Frameworks Koda med klassbibliotek Koda med framework GUI-programmering Min kod Framework Cristian Bogdan cristi@kth.se Kod i klassbibliotek Min kod, brukar kallas för callbacks. DH2640 Grafik och Interaktionsprogrammering

Läs mer

GUI /ll tusen. GUI /ll tusen. Java/Swing. Top Level Containers. General Purpose Containers. GrIP-vt2010-GUI-programmering Cristian Bogdan

GUI /ll tusen. GUI /ll tusen. Java/Swing. Top Level Containers. General Purpose Containers. GrIP-vt2010-GUI-programmering Cristian Bogdan GUI programmering Cristian Bogdan cristi@kth.se GUI /ll tusen Win32 API (C) MFC (C++) VCL/CLX (C++/Delphi) wxwidgets (C++) Qt (C++/Java) GTK+ (C).NET Framework (VB/C++/C#) Java AWT/Swing/SWT (Java) osv

Läs mer

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... } En klassdefinition class A extends B {... Arv definierar en klass A som ärver av B. Klassen A ärver alla fält och metoder som är definierade för B. A är en subklass till B. B är en superklass till A. class

Läs mer

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin TENTAMEN I IKB007 INTERNETPROGRAMMERING MED JAVA för SY2 1999-03-17, kl 14.00-18.00 Hjälpmedel: En lärobok i Java programmering Återlämningstillfälle:

Läs mer

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Mer om Interface Generiska klasser Undantag Nästlade klasser 1

Läs mer

DI-institutionen Sid 1 av 5 Hans-Edy Mårtensson Sten Sundin Micael Karlsson

DI-institutionen Sid 1 av 5 Hans-Edy Mårtensson Sten Sundin Micael Karlsson DI-institutionen Sid 1 av 5 Hans-Edy Mårtensson Sten Sundin Micael Karlsson Lösningar till TENTAMEN I IXC003 SYSTEMUTVECKLING MED INTERNET/INTRANET, del 1 (5p) för IT3 och INTERNETPROGRAMMERING MED JAVA

Läs mer

Tentamen FYTA11 Javaprogrammering

Tentamen FYTA11 Javaprogrammering Lunds universitet FYTA11 Institutionen för Teoretisk fysik HT 10 Tentamen FYTA11 Javaprogrammering Måndag 10:e januari 2011, 09:00 13:00 Instruktioner Hjälpmedel: enkla ritverktyg och Javadoc-genererade

Läs mer

Objektorientering och händelsebaserad programmering. Gustav Taxén

Objektorientering och händelsebaserad programmering. Gustav Taxén Objektorientering och händelsebaserad programmering Gustav Taxén gustavt@csc.kth.se 2D1640 Grafik och Interaktionsprogrammering VT 2007 Racingspel Vi skagöraettenkeltracingspel med olika sorters fordon.

Läs mer

PROG2 Tenta 2013-06-07 Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2

PROG2 Tenta 2013-06-07 Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2 DSV SU/KTH sid 1 (6) PROG2 VT13 PROG2 Tenta 2013-06-07 Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2 Tentan består av tre uppgifter. Max poäng är 38. För betyget E (godkänd) krävs minst

Läs mer

Informationsvisualisering

Informationsvisualisering Informationsvisualisering Informationsvisualisering och WIMP-gr gränssnitt Gustav Taxén gustavt@nada.kth.se Presentera abstrakt data så att den kan förstås Beskriva ett fenomen Få översikt Hitta trender

Läs mer

ITK:P1 Lektion 4. Lektion 4. Lektion 4. Att implementera en spelidé i Java. DSV Peter Mozelius

ITK:P1 Lektion 4. Lektion 4. Lektion 4. Att implementera en spelidé i Java. DSV Peter Mozelius ITK:P1 Att implementera en spelidé i Java DSV Peter Mozelius import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Lektion4 extends JFrame implements ActionListener { final int

Läs mer

Properties. Användbara metoder som kan anropas i propertychanged:

Properties. Användbara metoder som kan anropas i propertychanged: Properties Ett objekt kan ha vissa egenskaper (som beskrivs med instansvariabler). En enkel egenskap X avläses och sätts med metoderna getx() och setx(värde). En indexerad egenskap (från t.ex. en array)

Läs mer

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag 2001 - maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag 2001 - maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag 2001 - maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h Antalet uppgifter : 2 (20p + 20p = 40 p) ) Lärare, jourhavande lärare :

Läs mer

SI-pass 4. Johan Brook och Jesper Persson. 25 september 2012. Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner.

SI-pass 4. Johan Brook och Jesper Persson. 25 september 2012. Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner. SI-pass 4 Johan Brook och Jesper Persson 25 september 2012 1. Sant eller falskt? Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner. Interfaces i Java kan innehålla privata

Läs mer

Monday, November 16, Senaste Labben

Monday, November 16, Senaste Labben Senaste Labben Senaste Labben Strålande resultat (mv 4.6)! Senaste Labben Strålande resultat (mv 4.6)! God objektorientering? Senaste Labben Strålande resultat (mv 4.6)! God objektorientering? God kodhygien?

Läs mer

Lösningsförslag tentamen FYTA11 Java

Lösningsförslag tentamen FYTA11 Java Lunds universitet FYTA11 Institutionen för Teoretisk fysik HT 10 Lösningsförslag tentamen FYTA11 Java Måndag 10:e januari 2011, 09:00 13:00 Instruktioner Hjälpmedel: enkla ritverktyg och Javadoc-genererade

Läs mer

Lösningar till tentamen i EDAF25

Lösningar till tentamen i EDAF25 Lösningar till tentamen i EDAF25 21 aug 2017 Lösning 1 Javaklasser (många varianter finns naturligtvis): class Client { private Invoker invoker; public void newcommand(string cmdtext) { Command cmd; if

Läs mer

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p UMEÅ UNIVERSITET Datavetenskap 010530 LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p Betygsgränser 3 21,5-27 4 27,5-33,5 5 34-43 Uppgift 1. (4p) Hitta de fel som finns i nedanstående klass (det

Läs mer

SMD091 Lektion 9. Definition. Inkapsling. Lite repetition. Grafik. Gränssnitt Definition och Implementation. Sammansättning... Implementation.

SMD091 Lektion 9. Definition. Inkapsling. Lite repetition. Grafik. Gränssnitt Definition och Implementation. Sammansättning... Implementation. SMD091 Lektion 9 Inkapsling Lite repetition Grafik 1 2 Gränssnitt Definition och Implementation Sammansättning... Definition...är ofta det bästa sättet att använda funktionalitet i andra klasser. Ratt

Läs mer

5 Användargränssnitt. 5.1 AWT och Swing

5 Användargränssnitt. 5.1 AWT och Swing 5 Användargränssnitt 5.1 AWT och Swing AWT (Abstract Windowing Toolkit) är ett omfattande klassbibliotek för hantering av användargränssnitt i Java. Det är gjort så att applikationerna blir helt plattformsoberoende

Läs mer

2203$( Föreläsning ii - Mer om Java bla this och konstruktorer. Exempel: lampa

2203$( Föreläsning ii - Mer om Java bla this och konstruktorer. Exempel: lampa 2203$( Föreläsning ii - Mer om Java bla this och konstruktorer Av Björn Eiderbäck Email: bjorne@nada.kth.se Adress: Rum 1641, 6tr NADA Osquars Backe 2 Tel: 7906277 previous next Exempel: lampa Light1 #

Läs mer