Recall Paint Method

Hi

I have made a game there the paint method paints the character.

So i need to recall the paint method? How would i do?

I want something like this:

paint(); // but it doesnt work

repaint();

Please reply.

[247 byte] By [javaguy387a] at [2007-11-27 11:41:33]
# 1

> I have made a game there the paint method paints the

> character.

And if it's a Swing UI it should have been paintComponent()...

> So i need to recall the paint method? How would i do?

Huh? You just should see to it that the datamodel is consistant when paint() visualizes it. You usually don't repaint yourself unless you have some changes you want to display.

CeciNEstPasUnProgrammeura at 2007-7-29 17:38:48 > top of Java-index,Java Essentials,New To Java...
# 2

Look at my code:

import java.awt.event.KeyEvent;

import java.awt.event.KeyListener;

import javax.swing.JApplet;

import java.awt.Graphics;

import java.applet.*;

import java.awt.*;

import java.awt.event.*;

public class Main extends JApplet{

Image gubbe;

Image grs;

Image platta;

Image blomma;

Image flugsvamp;

Main hm=new Main();

int y=0;

int x=0;

public void init() {

gubbe=getImage(getCodeBase(),"bin/snubbe.GIF");

grs=getImage(getCodeBase(),"bin/grs.GIF");

platta=getImage(getCodeBase(),"bin/platta.GIF");

blomma=getImage(getCodeBase(),"bin/blomma.GIF");

flugsvamp=getImage(getCodeBase(),"bin/flugsvamp.GIF");

}

public void paint(Graphics g) {

setLayout(null);

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

g.drawImage(grs, 44, 0, this);

g.drawImage(blomma,88,0,this);

g.drawImage(platta,132,0,this);

g.drawImage(platta,176,0,this);

g.drawImage(platta,0,44,this);

g.drawImage(platta,44,44,this);

g.drawImage(platta,88,44,this);

g.drawImage(grs,132,44,this);

g.drawImage(platta,176,44,this);

g.drawImage(grs,0,88,this);

g.drawImage(grs,44,88,this);

g.drawImage(flugsvamp,88,88,this);

g.drawImage(grs,132,88,this);

g.drawImage(platta,176,88,this);

g.drawImage(grs,0,132,this);

g.drawImage(grs,44,132,this);

g.drawImage(grs,88,132,this);

g.drawImage(grs,132,132,this);

g.drawImage(platta,176,132,this);

g.drawImage(blomma,0,176,this);

g.drawImage(grs,44,176,this);

g.drawImage(grs,88,176,this);

g.drawImage(blomma,132,176,this);

g.drawImage(platta,176,176,this);

g.drawImage(gubbe,x,y,this);

}

public void keyPressed(KeyEvent e) {

/*

*/

if (e.getKeyCode() == KeyEvent.VK_LEFT) {

x-=44;

repaint();

}

if (e.getKeyCode() == KeyEvent.VK_RIGHT) {

x+=44;

repaint();

}

if (e.getKeyCode() == KeyEvent.VK_DOWN) {

y+=44;

repaint();

}

if (e.getKeyCode() == KeyEvent.VK_UP) {

y-=44;

repaint();

}

}

}

How should i do to re paint the characters movement?

javaguy387a at 2007-7-29 17:38:48 > top of Java-index,Java Essentials,New To Java...
# 3

> How should i do to re paint the characters movement?

Hi! Your problem is not the painting - but the action listenening. The method keyPressed is never called, because the method is not inside a listener. Do like this:

1. First you have to make a keyboard listener containing the keyPressed method

You can choose between this:

A) Add the code implements KeyListener in your class-definition. In other words instead of this:

public class Main extends JApplet{

write this: public class Main extends JApplet implements KeyListener{

you also have to add these two methods (apart from keyPressed ) : keyReleased and keyTyped.

B) Create an inner class, extending the KeyAdapter your program should look like this:

import //as before

public class Main extends JApplet{

//as before

public void init() {

////as before

}

public void paint(Graphics g) {

////as before

}

public class MyKeyListener extends KeyAdapter { //NEW

public void keyPressed(KeyEvent e)

////as before

} //NEW

}

2. Then you have to make the applet register your listener just call the addKeyListener method. Like this

A) (If you implemented the KeyListener)

this.addKeyListener(this);

B) (If you have an inner KeyAdopter-class)

this.addKeyListener(new MyKeyListener());

One more thing. This is a bug: Main hm=new Main();

Just delete it!

You should not try to create an Applet object - the browser/appletviewer is doing it to you. Were you really able to run this code?

This is it - now it should work. If you are new to Java you may need more assistance - just ask! I also see from your code that you speak sweedish - so do I - It's my favorite language (and Java too). Jag r ingen expert d, men jag ger dig grna hur mycket hjlp som helst om jag kan! (translation for others: I'm no expert, but I want to help as much as I can)

Ja_Lava_Javaa at 2007-7-29 17:38:48 > top of Java-index,Java Essentials,New To Java...
# 4

Ja_Lava_Java I have done as you said but i get an error:

Main.java:9: Main is not abstract and does not override abstract method

keyRealeased(java.awt.event.KeyEvent) in java.awt.event.KeyListener

Public class Main extends JApplet implements KeyListener {

With an ^ under the class ( the c) in the last line

Here is my code after i did what you said. Plz tell me what i did wrong.

import java.awt.event.KeyEvent;

import java.awt.event.KeyListener;

import javax.swing.JApplet;

import java.awt.Graphics;

import java.applet.*;

import java.awt.*;

import java.awt.event.*;

public class Main extends JApplet implements KeyListener{

Image gubbe;

Image grs;

Image platta;

Image blomma;

Image flugsvamp;

int y=0;

int x=0;

public void init() {

this.addKeyListener(new MyKeyListener());

gubbe=getImage(getCodeBase(),"bin/snubbe.GIF");

grs=getImage(getCodeBase(),"bin/grs.GIF");

platta=getImage(getCodeBase(),"bin/platta.GIF");

blomma=getImage(getCodeBase(),"bin/blomma.GIF");

flugsvamp=getImage(getCodeBase(),"bin/flugsvamp.GIF");

}

public void paint(Graphics g) {

setLayout(null);

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

g.drawImage(grs, 44, 0, this);

g.drawImage(blomma,88,0,this);

g.drawImage(platta,132,0,this);

g.drawImage(platta,176,0,this);

g.drawImage(platta,0,44,this);

g.drawImage(platta,44,44,this);

g.drawImage(platta,88,44,this);

g.drawImage(grs,132,44,this);

g.drawImage(platta,176,44,this);

g.drawImage(grs,0,88,this);

g.drawImage(grs,44,88,this);

g.drawImage(flugsvamp,88,88,this);

g.drawImage(grs,132,88,this);

g.drawImage(platta,176,88,this);

g.drawImage(grs,0,132,this);

g.drawImage(grs,44,132,this);

g.drawImage(grs,88,132,this);

g.drawImage(grs,132,132,this);

g.drawImage(platta,176,132,this);

g.drawImage(blomma,0,176,this);

g.drawImage(grs,44,176,this);

g.drawImage(grs,88,176,this);

g.drawImage(blomma,132,176,this);

g.drawImage(platta,176,176,this);

g.drawImage(gubbe,x,y,this);

}

public class MyKeyListener extends KeyAdapter {

public void keyPressed(KeyEvent e) {

/*

*/

if (e.getKeyCode() == KeyEvent.VK_LEFT) {

x-=44;

repaint();

}

if (e.getKeyCode() == KeyEvent.VK_RIGHT) {

x+=44;

repaint();

}

if (e.getKeyCode() == KeyEvent.VK_DOWN) {

y+=44;

repaint();

}

if (e.getKeyCode() == KeyEvent.VK_UP) {

y-=44;

repaint();

}

}

public void keyRealeased(KeyEvent e) {

}

public void keyTyped(KeyEvent e) {

}

}

}

javaguy387a at 2007-7-29 17:38:48 > top of Java-index,Java Essentials,New To Java...
# 5

> Ja_Lava_Java I have done as you said but i get an

> error:

> ...

> Here is my code after i did what you said. Plz tell

> me what i did wrong.

You are making both A and B, but missing something in A. I meant you shold do A OR B. (My instruction was not very clear)

Follow these steps:

1. delete the line:

public class MyKeyListener extends KeyAdapter {

2. and delete the } it closes (Den nst sista)

3. Change this.addKeyListener(new MyKeyListener());

to this.addKeyListener(this);

4. keyRealeased is misspelled change to

keyReleased

Good luck

Ja_Lava_Javaa at 2007-7-29 17:38:48 > top of Java-index,Java Essentials,New To Java...
# 6

Tack s jtte mycket ! :)

javaguy387a at 2007-7-29 17:38:48 > top of Java-index,Java Essentials,New To Java...