Link to home
Start Free TrialLog in
Avatar of popnfresh86
popnfresh86

asked on

Help with KeyListener and Threading

Hi there! I need some major help. I am in this programming course in high school and we are the guinea pigs this year because they have started teaching Java this year. Our teacher basically knows nothing about java and its obvious because when you ask him a question he has to research it first before he can help you. Anyways, I have an assignment due in 4 hours and im screwed. I need to make the game snake. I need to use a keylistener to get the arrow keys + other keys for other features and I need to be able to thread the keylistener and my graphics so that there is no delay in between. I am completely lost and nobody in my class knows how to thread (including my teacher).

import java.awt.*;
import java.awt.event.*;
import java.lang.Math;
import javax.swing.*;
import java.awt.Graphics;

public class KeyDemo2 extends JComponent implements KeyListener, Runnable
{

    int key = 0;
    int x = 0;
    public KeyDemo2 ()
    {
        addKeyListener (this);
        Thread t = new Thread (this);
        t.start ();
    }


    public void keyPressed (KeyEvent event)
    {
        key = event.getKeyCode ();
        System.out.println(key);
    }


    // handle release of any key
    public void keyReleased (KeyEvent event)
    {

    }


    // handle press of an action key
    public void keyTyped (KeyEvent event)
    {

    }


    public void run ()
    {
        try
        {
            while (true)
            {
                x++;
                repaint ();  // Show the change.
                Thread.sleep (100);
            }
        }
        catch (InterruptedException ie)
        {
        }
    }


    public void paint (Graphics g)
    {
        g.setColor (Color.white);
        g.fillRect (0, 0, size ().width, size ().height);
        g.setColor (Color.black);
        g.drawString (key + "", 50, 50);
        x++;
        g.drawRect (x, x, 1, 1);
    }



    public static void main (String [] args)
    {
        JFrame f = new JFrame ("HelloJava4");
        // Make the application exit when the window is closed.
        f.addWindowListener (new WindowAdapter ()
        {
            public void windowClosing (WindowEvent we)
            {
                System.exit (0);
            }
        }
        );
        f.setSize (300, 300);
        f.getContentPane ().add (new KeyDemo2 ());
        f.setVisible (true);
    }
}


This code runs but it only draws the dot moving from the top left corner to the bottom rite. It does not pick up key input. I have no idea what half of this code does. I am simply learning by example now cuz with four hours...i really have no choice. If you have any idea how i can get keyinput and output something (anything just to test) while drawing something else in the background. It would be very helpful. As you can see, i have set this to 500 points cuz i need help NOW!!!! Regards, pop.
SOLUTION
Avatar of Mick Barry
Mick Barry
Flag of Australia image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
ASKER CERTIFIED SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
You're not actually trying to alter the progress of the point in your code. How do you want to do this?
SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of popnfresh86
popnfresh86

ASKER

Well its not focus cuz if that was the case...the program shud work if i click on the executed window and then try entering keys.
Im actually trying to make a snake game if that helps. Ignore the code i entered above. If you guys can gimme some code that allows a point to move up and down and left and right based on the arrow keys that are entered...that would be a great help cuz thats my main obstacle now.
> if i click on the executed window and then try entering keys.

not necessarily, the frame may have focus and not the component.
> If you guys can gimme some code that allows a point to move up and down and left
> and right based on the arrow keys that are entered

That'd be doing your assignment for you :)
SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
SOLUTION
Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
ok thanks guys but i happened to solve my own problem. I found a bunch of sites on threading with graphics and user input. I also found some other snake examples ... the one listed above isn't very helpful cuz the guy who made it doesn't know what commenting is and his variables aren't very clear. I have decided to split my points thruout all you guys who submitted a response (that was at least trying to be helpful).