Ja bym to zrobił tak:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Main extends JFrame{
private Pixel pix;
public Main() {
super("Pixel");
this.setSize(300,300);
this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.getContentPane().setLayout(new BorderLayout());
pix = new Pixel();
this.addKeyListener(pix.getControl());
this.getContentPane().add(BorderLayout.CENTER, pix);
this.setVisible(true);
}
public static void main(String[] args) {
try {
new Main();
}catch(Exception e) {
e.printStackTrace();
System.exit(-1);
}
}
}
class Pixel extends JPanel {
private int pixel_size = 10;
private Point p;
private KeyListener listener;
public Pixel() {
super();
p = new Point(0, 0);
setOpaque(false);
listener = new KeyboardControl();
}
public KeyListener getControl() {
return listener;
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.WHITE);
g.fillRect(0, 0, getSize().width, getSize().height);
paintPixel(g);
}
private void paintPixel(Graphics g) {
g.setColor(new Color(0x800000));
g.fillRect(p.x, p.y, pixel_size, pixel_size);
}
private class KeyboardControl implements KeyListener {
int x,y;
public void keyPressed(KeyEvent e) {
switch(e.getKeyCode()) {
case KeyEvent.VK_LEFT:
x = p.x;
x-= pixel_size;
if(x<0) x = 0;
p = new Point(x, p.y);
repaint(p.x-pixel_size, p.y - pixel_size, pixel_size*3, pixel_size*3);
break;
case KeyEvent.VK_RIGHT:
x = p.x;
x+= pixel_size;
if(x > getSize().width-pixel_size) x=getSize().width-pixel_size;
p = new Point(x, p.y);
repaint(p.x-pixel_size, p.y - pixel_size, pixel_size*3, pixel_size*3);
break;
case KeyEvent.VK_UP:
y= p.y;
y-= pixel_size;
if(y<0) y = 0;
p = new Point(p.x, y);
repaint(p.x-pixel_size, p.y - pixel_size, pixel_size*3, pixel_size*3);
break;
case KeyEvent.VK_DOWN:
y= p.y;
y+= pixel_size;
if(y>getSize().height-pixel_size) y = getSize().height-pixel_size;
p = new Point(p.x, y);
repaint(p.x-pixel_size, p.y - pixel_size, pixel_size*3, pixel_size*3);
break;
}
}
public void keyReleased(KeyEvent e) {}
public void keyTyped(KeyEvent e) {}
}
}