Nada

Föreläsning 22 - Mer grafik i Java

Rita bilder

Den här raden av lampor ritas av följande program.
import java.applet.*                                        ;
import java.awt.*                                           ;
                                                             
class Lampa extends Canvas                                  {
  Color färg                                                ;
  Lampa(Color c)                                            {
    setBackground(Color.black)                              ;
    färg=c                                                  ;}
  public void tänd()                                        {
    setForeground(färg); repaint()                          ;}
  public void släck()                                       {
    setForeground(Color.black); repaint()                   ;}
  public void paint(Graphics g)                             {
    g.fillOval(0,0,60,60)                                   ;}}
                                                             
public class Lamprad extends Applet                         { 
  Lampa[] lampor = new Lampa[4]                             ;
  Button[] on = new Button[4]                               ;
  Button[] off= new Button[4]                               ;
  
  public void init()                                        {
    setLayout(new GridLayout(3,4))                          ;
    lampor[0] = new Lampa(Color.green)                      ;
    lampor[1] = new Lampa(Color.red)                        ; 
    lampor[2] = new Lampa(Color.yellow)                     ;
    lampor[3] = new Lampa(Color.blue)                       ;
    for (int i=0; i<4; i++)                                 {
      on[i] = new Button("ON")                              ;
      off[i]= new Button("OFF")                             ;}
    for (int i=0; i<4; i++) add(on[i])                      ;
    for (int i=0; i<4; i++) add(lampor[i])                  ;
    for (int i=0; i<4; i++) add(off[i])                     ;}
  public boolean action(Event e, Object arg)                {
    for(int i=0;i<4;i++)                                    {
      if(e.target==on[i])  lampor[i].tänd()                 ;
      if(e.target==off[i]) lampor[i].släck()                ;}
    return true                                             ;}}

Visa bilder

Bilder i GIF-format eller JPG-format kan man rita i paint-metoden med anropet g.drawImage(bild,x,y,bredd,höjd,this), där bild är av typen Image och knyts till ett filnamn som följande exempel visar. Den sista parametern talar om vilket objekt som ska övervaka bilden och this betyder appleten själv.
import java.applet.*                                        ;
import java.awt.*                                           ;
                                                             
public class Bilder extends Applet                          { 
  Button knapp  = new Button("Nästa bild")                  ;
  Image[] bild = new Image[3]                               ;
  int nr=0                                                  ;
  
  public void init()                                        {
    setBackground(Color.yellow)                             ;
    bild[0] = getImage(getCodeBase(),"forelasn.gif")        ;
    bild[1] = getImage(getCodeBase(),"venus.gif")           ;
    bild[2] = getImage(getCodeBase(),"viggo.gif")           ;
    add(knapp)                                              ;}

  public void paint(Graphics g)                             {
    g.drawImage(bild[nr],50,50,212,282,this)                ;}

  public boolean action(Event e, Object arg)                {
    nr=++nr%3                                               ;
    repaint()                                               ;
    return true                                             ;}}
En rörlig bild på webbsidan är oftast inte en applet utan en gifbild som växlar mellan två eller flera utseenden. T-banetåg

Rörliga appletar

Det här trafikljuset ritas av följande program.
import java.applet.*                                        ;
import java.awt.*                                           ;
                                                             
class Lampa    - - - som ovan - - -
                                                             
public class Ljus extends Applet implements Runnable        { 
  int rödtid=3000, rödgultid=2000, gröntid=3000, gultid=1000;
  Lampa röd  = new Lampa(Color.red)                         ; 
  Lampa gul  = new Lampa(Color.yellow)                      ;
  Lampa grön = new Lampa(Color.green)                       ;
  Thread tid = new Thread(this)                             ;
  public void init()                                        {
    setLayout(new GridLayout(3,1))                          ;
    add(röd); add(gul); add(grön)                           ;
    tid.start()                                             ;}                                               
  public void run()                                         {
    while (true)                                            {
      try                                                   {
	röd.tänd()                                          ;
	tid.sleep(rödtid)                                   ;
	gul.tänd()                                          ;
        tid.sleep(rödgultid)                                ;
	gul.släck()                                         ;
	röd.släck()                                         ;
	grön.tänd()                                         ;
        tid.sleep(gröntid)                                  ;
	grön.släck()                                        ;
	gul.tänd()                                          ;
	tid.sleep(gultid)                                   ;
        gul.släck()                                         ;}
      catch (InterruptedException e)                        {
        break                                               ;}}}}


Sidansvarig: <henrik@nada.kth.se>
Senast ändrad 14 september 1999
Tekniskt stöd: <webmaster@nada.kth.se>