Bild per Tastatur bewegen

Hi, ich will ein Bild(ImageIcon/Image) mit hilfe der testertur bewegen. Ich fange erst an mit Java und habe bis jetzt nur Applets ohne Mainclass(nur mit ActionListener + init und ein paar Applicationen wie z.B: Taschenrechner, Sortieralgoritmen.. geschrieben, deshalb kenn ich mich noch nicht so gut damit aus.)

Ich habe hier im Forum eine Thema darüber gefunden bei dem ich aber nicht alles verstanden habe. Da das Thema noch von 2004 ist und mir keiner geandwortet hat dachte ich ich mache ein neues Thema.

Also kann mir jemand die follgenden unterstrichenen Zeiler erklären oder eine andere möglichst leicht verständliche Art erklären eine ein Bild mit der Tastertur zu bewegen. (Und warum startet (wenn ich das richtig verstanden habe) er aus der main Methode eine andere und die dann Thread?)

Code:
package de.tutorials;

import java.awt.Graphics2D;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JFrame;

public class MoveImage extends JFrame {

	private BufferStrategy strategy;

	private BufferedImage img;

	private int x = 0, y = 0;

	private int w, h;

	private boolean leftDown, rightDown, upDown, downDown, running = true;

	private Thread runner = new Thread() {
		{
			setPriority(MIN_PRIORITY);
		}

		public void run() {
			try {
				while (running) {
					Graphics2D g = (Graphics2D) strategy.getDrawGraphics();
					g.clearRect(0, 0, 400, 300);

					if (rightDown) {
						x += 2;
					} else if (leftDown) {
						x -= 2;
					} else if (upDown) {
						y -= 2;
					} else if (downDown) {
						y += 2;
					}

					if (img != null)
						g.drawImage(img, x, y, MoveImage.this);
					g.dispose();
					strategy.show();
					sleep(50L);
				}
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	};

	public MoveImage() {
		super("MoveImage");
		setDefaultCloseOperation(EXIT_ON_CLOSE);

		try {
			img = ImageIO.read(new File("c:/Beispiel_small.jpg"));
			w = img.getWidth();
			h = img.getHeight();
		} catch (IOException e) {
			e.printStackTrace();
		}

		addKeyListener(new KeyAdapter() {
			public void keyPressed(KeyEvent evt) {
				int code = evt.getKeyCode();
				switch (code) {
				case KeyEvent.VK_LEFT:
					leftDown = true;
					break;
				case KeyEvent.VK_RIGHT:
					rightDown = true;
					break;
				case KeyEvent.VK_UP:
					upDown = true;
					break;
				case KeyEvent.VK_DOWN:
					downDown = true;
					break;
				default:
					;
				}
			}

			public void keyReleased(KeyEvent evt) {
				int code = evt.getKeyCode();
				switch (code) {
				case KeyEvent.VK_LEFT:
					leftDown = false;
					break;
				case KeyEvent.VK_RIGHT:
					rightDown = false;
					break;
				case KeyEvent.VK_UP:
					upDown = false;
					break;
				case KeyEvent.VK_DOWN:
					downDown = false;
					break;
				default:
					;
				}
			}

			public void keyTyped(KeyEvent evt) {
				int code = evt.getKeyChar();
				switch (code) {
				case KeyEvent.VK_ESCAPE:
					running = false;
					System.exit(0);
				}
			}
		});

		setSize(400, 300);
		setResizable(false);
		setIgnoreRepaint(true);
		setVisible(true);
		createBufferStrategy(2);
		strategy = getBufferStrategy();
	}

	public static void main(String[] args) {
		new MoveImage().start();
	}

	/**
	 *  
	 */
	private void start() {
		runner.start();
	}
}

Mfg Death Overlord
 
Zurück