user3180075
user3180075

Reputation: 1

Trying to repaint a jpanel

Please note that I am quite new to all this programming. Right now i have a frame which adds a panel to it. I have use the paintcomponent method on the panel I believe, but now when i am trying to use keylisteners i need to move the image that i have drawn on the panel. I currently do not know how to repaint it.

 import java.awt.*;
 import java.io.*;
 import java.awt.event.*;

 import javax.swing.*;

 @SuppressWarnings

 ("serial")

 public class Game extends JPanel implements KeyListener
 {
 Car fo = new Car();
 draw a=new draw();
public Game()

{
    JFrame frame2=new JFrame("JASA1 Racing");
    frame2.add(new draw());
    frame2.setSize(500,600);//set frame size
    frame2.setVisible(true);//made frame visible
    frame2.setResizable(false);
    frame2.addKeyListener(this);
    frame2.setFocusable(true);
}

public class draw extends JPanel 
{

    private static final long serialVersionUID = 1L;

        public void redraw()
        {
            repaint();
        }

        public void paintComponent(Graphics g)
        {
            super.paintComponent(g);
            ImageIcon ic2=new ImageIcon("C:\\Users\\Shawn\\track.jpg");
            Image img=ic2.getImage();
            g.drawImage(img, 0, 0,null);
            g.drawImage(fo.getcar(),fo.getX(),fo.getY(),null);
            System.out.println(fo.getX() + "    " + fo.getY());

        }

}

public void keyPressed(KeyEvent e)
{
    int key = e.getKeyCode();
    if(key == KeyEvent.VK_LEFT)
    {
        fo.move(-50, 0);
        System.out.print(fo.getX());
        a.repaint();
    }

    else if(key == KeyEvent.VK_RIGHT)

    {
        fo.move(50, 0);
        System.out.print(fo.getX());
             a.redraw();
    }

}
    public void keyReleased(KeyEvent e)
    {   
    }
    public void keyTyped(KeyEvent e)
    {
    }

}

Upvotes: 0

Views: 75

Answers (1)

MadProgrammer
MadProgrammer

Reputation: 347194

draw a=new draw(); isn't what you've added to the frame, you've used frame2.add(new draw()); instead.

Try using frame2.add(a);

I'd also consider using Key Bindings as it will allow you to overcome the focus issues related to KeyListener

Upvotes: 2

Related Questions