/**
*
*/
package com.github.cbpos1989.gui_tutorials;
import java.awt.Color;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
/**
* Listener class for KeyboardAndFocusApp.
*
* @author Colm O'Sullivan
*
*/
public class KeyboardAndFocusHandler implements FocusListener, KeyListener, MouseListener {
private KeyboardAndFocusPanel kfPanel;
public KeyboardAndFocusHandler(KeyboardAndFocusPanel kfPanel){
this.kfPanel = kfPanel;
}
/* (non-Javadoc)
* Lets the user control the movement of the square by using the arrow keys.
*/
@Override
public void keyPressed(KeyEvent evt) {
int key = evt.getKeyCode();
switch(key) {
case KeyEvent.VK_LEFT:
kfPanel.setSquareLeft(kfPanel.getSquareLeft() - 8);
if (kfPanel.getSquareLeft() < 3) {
kfPanel.setSquareLeft(3);
}
kfPanel.repaint();
break;
case KeyEvent.VK_RIGHT:
kfPanel.setSquareLeft(kfPanel.getSquareLeft() + 8);
if (kfPanel.getSquareLeft() > kfPanel.getWidth() - 3 - KeyboardAndFocusPanel.SQUARE_SIZE) {
kfPanel.setSquareLeft(kfPanel.getWidth() - 3 - KeyboardAndFocusPanel.SQUARE_SIZE);
}
kfPanel.repaint();
break;
case KeyEvent.VK_UP:
kfPanel.setSquareTop(kfPanel.getSquareTop() - 8);
if (kfPanel.getSquareTop() < 3) {
kfPanel.setSquareTop(3);
}
kfPanel.repaint();
break;
case KeyEvent.VK_DOWN:
kfPanel.setSquareTop(kfPanel.getSquareTop() + 8);
if (kfPanel.getSquareTop() > kfPanel.getHeight() - 3 - KeyboardAndFocusPanel.SQUARE_SIZE) {
kfPanel.setSquareTop(kfPanel.getHeight() - 3 - KeyboardAndFocusPanel.SQUARE_SIZE);
}
kfPanel.repaint();
break;
default:
break;
}
}
/* (non-Javadoc)
* @see java.awt.event.KeyListener#keyReleased(java.awt.event.KeyEvent)
*/
@Override
public void keyReleased(KeyEvent evt) {}
/* (non-Javadoc)
* Changes the colour of the square if the R, G, B or K keys are pressed.
*/
@Override
public void keyTyped(KeyEvent evt) {
char ch = evt.getKeyChar();
if(ch > 96) {
ch -= 31;
}
switch(ch){
case 'R':
kfPanel.setSquareColor(Color.RED);
kfPanel.repaint();
break;
case 'G':
kfPanel.setSquareColor(Color.GREEN);
kfPanel.repaint();
break;
case 'B':
kfPanel.setSquareColor(Color.BLUE);
kfPanel.repaint();
break;
case 'K':
kfPanel.setSquareColor(Color.BLACK);
kfPanel.repaint();
break;
}
}
/* (non-Javadoc)
* Repaint with Cyan Border
*/
@Override
public void focusGained(FocusEvent evt) {
kfPanel.repaint();
}
/* (non-Javadoc)
* Repaint without Cyan Border
*/
@Override
public void focusLost(FocusEvent evt) {
kfPanel.repaint();
}
/* (non-Javadoc)
* Called when the user clicks on the panel with the mouse.
* Will request that input focus is given to the panel.
*/
@Override
public void mousePressed(MouseEvent evt) {
kfPanel.requestFocus();
}
/* (non-Javadoc)
* @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
*/
@Override
public void mouseClicked(MouseEvent evt) {}
/* (non-Javadoc)
* @see java.awt.event.MouseListener#mouseEntered(java.awt.event.MouseEvent)
*/
@Override
public void mouseEntered(MouseEvent evt) {}
/* (non-Javadoc)
* @see java.awt.event.MouseListener#mouseExited(java.awt.event.MouseEvent)
*/
@Override
public void mouseExited(MouseEvent evt) {}
/* (non-Javadoc)
* @see java.awt.event.MouseListener#mouseReleased(java.awt.event.MouseEvent)
*/
@Override
public void mouseReleased(MouseEvent evt) {}
}