Image Movement Application
<< Keyboard Listener Application | Applications | Move a Monster Application >>
Download and place these image files in the same folder of your project.


import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.image.*;
import java.net.URL;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import javax.imageio.ImageIO;
public class MovePictureApplication extends JPanel implements KeyListener
{
public static int WIDTH=400;
public static int HEIGHT=300;
private int keyCode;
private char c;
private int x, y;
private Font font;
private BufferedImage background, butterfly;
/**
* imgBuffer is the "off screen" graphics area
* gBuffer is imgBuffer's graphics object
* which we need to draw stuff on the image
*/
private BufferedImage imgBuffer;
private Graphics gBuffer;
public MovePictureApplication()
{
//initialize variables here...
keyCode=0;
c='-';
background=loadImage("background.jpg");
butterfly=loadImage("butterfly.gif");
x = WIDTH/2;
y = HEIGHT/2;
font = new Font("Helvetica", Font.BOLD, 18);
}
public BufferedImage loadImage(String imageFileName)
{
URL url = getClass().getResource(imageFileName);
if (url == null)
throw new RuntimeException("cannot find file: " + imageFileName);
try
{
return ImageIO.read(url);
}
catch(IOException e)
{
throw new RuntimeException("unable to read from file: " + imageFileName);
}
}
public static void main(String[] args) {
MovePictureApplication app= new MovePictureApplication();
JFrame window = new JFrame("Type a Key to See Its Code");
window.setSize(WIDTH, HEIGHT);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.getContentPane().add(app);
window.addKeyListener(app);
//window.pack();
window.setVisible(true);
}
public void paintComponent(Graphics g){
super.paintComponent(g);
g.setColor(Color.WHITE);
g.setFont(font);
g.drawString("Type a Key", 20, 20);
//g.setColor(Color.BLACK);
//g.drawString("Version 1.0", 20, 40);
//g.drawString("the key char "+c+" has code "+keyCode, 20, 60);
//g.setFont(new Font("Arial", Font.PLAIN, 48));
//g.setColor(Color.red);
//g.drawString("\""+c+"\"",80, 120);
if (background!=null){
g.drawImage(background, 0, 0, WIDTH, HEIGHT, null);
} else {
g.setColor(Color.WHITE);
g.fillRect(0, 0, WIDTH, HEIGHT);
g.setColor(Color.RED);
g.drawString("background image not found", 20, 60);
}
if (butterfly!=null){
g.drawImage(butterfly, x, y, null);
} else {
g.setColor(Color.CYAN);
g.fillOval(x, y, 50, 50);
g.setColor(Color.RED);
g.drawString("butterfly image not found", 20, 80);
}
g.setColor(Color.CYAN);
g.setFont(font);
g.drawString("X = "+x, 20, 40);
}
// update is a workaround to cure Windows screen flicker problem
public void update(Graphics g){
paint(g);
}
// These 3 methods need to be declares to implement the KeyListener Interface
@Override
public void keyTyped(KeyEvent e) {}
@Override
public void keyPressed(KeyEvent e)
{
keyCode=e.getKeyCode();
c=e.getKeyChar();
int dx = (int)(Math.random()*4)-2;
int dy = (int)(Math.random()*4)-2;
x+=dx;
y+=dy;
repaint();
}
@Override
public void keyReleased(KeyEvent e) {}
}
