Currently showing ../spaceinvaders103/org/newdawn/spaceinvaders/util/Keyboard.java Line Numbers: [show|hide]

package org.newdawn.spaceinvaders.util;

import java.awt.AWTEvent;
import java.awt.Component;
import java.awt.Toolkit;
import java.awt.event.AWTEventListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

/**
 * A pollable keyboard system, place holder until something generic
 * comes along
 *
 * @author Kevin Glass
 */
public class Keyboard {
	/** The status of the keys on the keyboard */
    private static boolean[] keys = new boolean[1024];
    
    /**
     * Initialise the central keyboard handler
     */
    public static void init() {
        Toolkit.getDefaultToolkit().addAWTEventListener(new KeyHandler(),AWTEvent.KEY_EVENT_MASK);         
    }
    
    /**
     * Initialise the central keyboard handler
     * 
     * @param c The component that we will listen to
     */
    public static void init(Component c) {
    	c.addKeyListener(new KeyHandler());         
    }
    
    /**
     * Check if a specified key is pressed
     * 
     * @param key The code of the key to check (defined in KeyEvent)
     * @return True if the key is pressed
     */
    public static boolean isPressed(int key) {
        return keys[key];
    }
    
    /**
     * Set the status of the key
     * 
     * @param key The code of the key to set
     * @param pressed The new status of the key
     */
    public static void setPressed(int key,boolean pressed) {
        keys[key] = pressed;
    }
    
    /**
     * A class to respond to key presses on a global scale.
     * 
     * @author Kevin Glass
     */
    private static class KeyHandler extends KeyAdapter implements AWTEventListener {
        /**
         * Notification of a key press
         * 
         * @param e The event details
         */
        public void keyPressed(KeyEvent e) {
        	if (e.isConsumed()) {
        		return;
        	}
            keys[e.getKeyCode()] = true;
        }
        
        /**
         * Notification of a key release
         * 
         * @param e The event details
         */
        public void keyReleased(KeyEvent e) {
        	if (e.isConsumed()) {
        		return;
        	}
        	
        	KeyEvent nextPress = (KeyEvent) Toolkit.getDefaultToolkit().getSystemEventQueue().peekEvent(KeyEvent.KEY_PRESSED);
        	
        	if ((nextPress == null) || (nextPress.getWhen() != e.getWhen())) {
        		keys[e.getKeyCode()] = false;
        	}
        	
        }
        
        /**
         * Notification that an event has occured in the AWT event
         * system
         * 
         * @param e The event details
         */
        public void eventDispatched(AWTEvent e) {
            if (e.getID() == KeyEvent.KEY_PRESSED) {
                keyPressed((KeyEvent) e);
            }
            if (e.getID() == KeyEvent.KEY_RELEASED) {
                keyReleased((KeyEvent) e);
            }
        }
        
    }
}

Total 109 Lines of Code.
Source code formatted using showsrc by William Denniss