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

[7893 byte] By [deoshermesa] at [2007-11-27 6:53:10]
# 1

// <applet code="TLCSAgain" width="100" height="100"></applet>

import java.awt.*;

import java.applet.*;

import java.awt.event.*;

import java.awt.image.*;

public class TLCSAgain extends Applet {

Image image;

Button button1;

Button button2;

ImageCanvas2 canvas1;

ImageCanvas2 canvas2;

ImageCanvas2 canvas3;

ImageCanvas2 canvas4;

ImageCanvas2 canvas5;

ImageCanvas2 canvas6;

ImageCanvas2 canvas7;

ImageCanvas2 canvas8;

ImageCanvas2 canvas9;

ImageCanvas2 canvas10;

ImageCanvas2 canvas11;

ImageCanvas2 canvas12;

public void init() {

setSize(774,536);

Toolkit toolkit = Toolkit.getDefaultToolkit();

image = toolkit.getImage("images/Bird.gif");

canvas1 = new ImageCanvas2();

canvas2 = new ImageCanvas2();

canvas3 = new ImageCanvas2();

canvas4 = new ImageCanvas2();

canvas5 = new ImageCanvas2();

canvas6 = new ImageCanvas2();

canvas7 = new ImageCanvas2();

canvas8 = new ImageCanvas2();

canvas9 = new ImageCanvas2();

canvas10 = new ImageCanvas2();

canvas11 = new ImageCanvas2();

canvas12 = new ImageCanvas2();

setLayout(null);

button1 = new Button("1");

button1.setBounds(360, 500, 20, 20);

add(button1);

//button1 = new Button("Light 2");

canvas1.setLocation(360, 430);

canvas2.setLocation(400, 430);

canvas3.setLocation(440, 430);

canvas4.setLocation(550, 260);

canvas5.setLocation(590, 220);

canvas6.setLocation(550, 180);

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);

add(canvas5);

add(canvas6);

add(canvas7);

add(canvas8);

add(canvas9);

add(canvas10);

add(canvas11);

add(canvas12);

ActionListener al = new ActionListener() {

public void actionPerformed(ActionEvent e) {

Object s = e.getSource();

if (s == button1)

canvas1.setGreen();

}

};

button1.addActionListener(al);

}

public void paint(Graphics g)

{

g.drawImage(image, 0, 0, this);

}

}

class ImageCanvas2 extends Canvas {

protected int width = 25;

protected int height = 69;

Image red;

Image green;

Image amber;

Image img;

private double currentAngle;

private Dimension size;

public ImageCanvas2() {

setSize(width, height);

makeImages();

img = red;

}

public void paint(Graphics g) {

g.drawImage(img, 0, 0, this);

}

public void setGreen() {

img = green;

repaint();

}

public void setAmber() {

img = amber;

repaint();

}

public Image getImage(){

return img;

}

private void makeImages() {

red = makeImage(Color.red);

green = makeImage(Color.green.darker());

amber = makeImage(Color.orange);

}

private BufferedImage makeImage(Color color) {

int type = BufferedImage.TYPE_INT_RGB;

BufferedImage image = new BufferedImage(width, height, type);

Graphics2D g2 = image.createGraphics();

g2.setPaint(color);

g2.fillRect(0,0,width,height);

g2.dispose();

return image;

}

}

crwooda at 2007-7-12 18:27:53 > top of Java-index,Desktop,Core GUI APIs...
# 2

Hey thanks a lot man!!

I think I'm gonna just do it without the images and using just the colors like in your example. I have pictures which I can use to present the colors, but your way is just great as well.

Now, I'm gonna make an engine which can get the color on a button press and knows what color next to put in.

I'm almost sure more questions wiill come.

Thanks again,

Andre

deoshermesa at 2007-7-12 18:27:53 > top of Java-index,Desktop,Core GUI APIs...