import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class SquareDragger extends JComponent {
    private int x, y;
    private Color squareColor;
    
    private final static int width = 200;
    private final static int height = 200;
    private final static int squareSize = 20;
    private final static int keySpeed = 5;
    
    public SquareDragger() {
        x = width / 2;
        y = height / 2;
        addMouseMotionListener(new Mouser());
        addKeyListener(new Arrower());
    }
    
    public Dimension getPreferredSize() {
        return new Dimension(width, height);
    }
    
    public void setSquareColor(Color c) {
        squareColor = c;
    }
    
    protected void paintComponent(Graphics g) {
        g.setColor(Color.white);
        g.fillRect(0, 0, getWidth(), getHeight());
        g.setColor(squareColor);
        g.fillRect(x - squareSize/2, y - squareSize/2, squareSize, squareSize);
        requestFocus();
    }
    
    private class Mouser extends MouseMotionAdapter {
        public void mouseDragged(MouseEvent me) {
            x = me.getX();
            y = me.getY();
            repaint();
        }
    }

    private class Arrower extends KeyAdapter {
        public void keyPressed(KeyEvent ke) {
            switch (ke.getKeyCode()) {
            case KeyEvent.VK_KP_DOWN: case KeyEvent.VK_DOWN:
                y += 1;
                break;
            case KeyEvent.VK_KP_UP: case KeyEvent.VK_UP:
                y -= 1;
                break;
            case KeyEvent.VK_KP_LEFT: case KeyEvent.VK_LEFT:
                x -= 1;
                break;
            case KeyEvent.VK_KP_RIGHT: case KeyEvent.VK_RIGHT:
                x += 1;
                break;
            }
            repaint();
        }
    }
}
