repainting picture on a canvas
hey,
Now I have the canvasses ready on my applet I would like to make it able to change the pictures when a button gets pressed.
For a start I kept it really simple, but when I call the method which repaints the canvas it just won't work.
This is what I have:
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Graphics;
import java.awt.SystemColor;
import java.awt.Toolkit;
import java.awt.font.FontRenderContext;
import java.awt.font.TextLayout;
publicclass ImageCanvasextends Canvas{
protectedint width = 25;
protectedint height = 69;
Toolkit toolkit = Toolkit.getDefaultToolkit();
Image img = toolkit.getImage("red3.gif");
Image imgGreen;
privatedouble currentAngle;
private Dimension size;
public ImageCanvas(){
setSize(width, height);
}
publicvoid paint(Graphics g)
{
g.drawImage(img, 0, 0, width, height,this);
}
publicvoid setGreen()
{
//Toolkit toolkit = Toolkit.getDefaultToolkit();
img = toolkit.getImage("green3.gif");
repaint();
}
publicvoid setAmber()
{
//Toolkit toolkit = Toolkit.getDefaultToolkit();
img = toolkit.getImage("amber3.gif");
repaint();
}
public Image getImage()
{
return img;
}
}
Now the class from which the applet is run:
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import java.util.*;
import java.net.*;
import java.awt.Graphics;
publicclass TLCSextends Applet{
Image image;
ImageCanvas canvas1;
Button button1;
ImageCanvas canvas2;
Button button2;
ImageCanvas canvas3;
ImageCanvas canvas4;
ImageCanvas canvas5;
ImageCanvas canvas6;
ImageCanvas canvas7;
ImageCanvas canvas8;
ImageCanvas canvas9;
ImageCanvas canvas10;
ImageCanvas canvas11;
ImageCanvas canvas12;
Graphics g;
Thread mythread;
publicvoid init()
{
setSize(774,536);
Toolkit toolkit = Toolkit.getDefaultToolkit();
image = toolkit.getImage("Crossing.gif");
canvas1 =new ImageCanvas();
canvas2 =new ImageCanvas();
canvas3 =new ImageCanvas();
canvas4 =new ImageCanvas();
canvas5 =new ImageCanvas();
canvas6 =new ImageCanvas();
canvas7 =new ImageCanvas();
canvas8 =new ImageCanvas();
canvas9 =new ImageCanvas();
canvas10 =new ImageCanvas();
canvas11 =new ImageCanvas();
canvas12 =new ImageCanvas();
//canvas1.paint(g);
setLayout(null);
//canvas1.setBounds(50, 80, canvas1.getWidth(), canvas1.getHeight());
canvas1.setLocation(360, 430);
button1 =new Button("1");
button1.setBounds(360, 500, 20, 20);
add(button1);
canvas2.setLocation(400, 430);
button1 =new Button("Light 2");
canvas3.setLocation(440, 430);
canvas4.setLocation(550, 260);
canvas5.setLocation(590, 220);
canvas6.setLocation(550, 180);
//Graphics2D g2 = createGraphics2D(39, 99);
//canvas4.drawDemo(39, 99, g2);
canvas7.setLocation(320, 90);
canvas8.setLocation(280, 90);
canvas9.setLocation(240, 90);
canvas10.setLocation(200, 300);
canvas11.setLocation(170, 340);
canvas12.setLocation(200, 380);
add(canvas1);
add(canvas2);
add(canvas3);
//add(canvas4);
canvas3.setGreen();
add(canvas4);
add(canvas5);
add(canvas6);
add(canvas7);
canvas7.setAmber();
add(canvas8);
add(canvas9);
add(canvas10);
add(canvas11);
add(canvas12);
//canvas1.setGreen();
ActionListener al =new ActionListener(){
publicvoid actionPerformed(ActionEvent e){
//Object s = e.getSource();
//if (s == button1)
canvas1.setGreen();
}
};
button1.addActionListener(al);
}
publicvoid paint(Graphics g)
{
g.drawImage(image, 0, 0,this);
}
}
I know I should use arrays but this is just in the beginning stages of the project.
Now, in the init() method of TLCS class the canvas3.setGreen();
call works, cuz when I start the applet the right picture is shown.
Now I'm wondering why it won't work on a button press.
What did I do wrong?
Thank you,
Andre

