java 图片移动代码_Java写的一个简单的图片移动小程序

前两天,有一个小姑娘让帮忙给其写一个小玩意,就是在Panel上绘制一个图片,然后通过键盘的方向键进行控制移动。虽然比较简单,这里还是希望和大家分享一下,里面有两点特别需要注意的知识点,这里一并加以说明。

/*

* To change this template, choose Tools | Templates

* and open the template in the editor.

*/

package com.wst;

/**

*

* @author Administrator

*/

import java.awt.*;

import java.awt.event.KeyEvent;

import java.awt.event.KeyListener;

import java.awt.image.BufferedImage;

import javax.swing.*;

public class ImageMove extends JFrame {

private Container content;

private JPanel firstPicturePane;

private JPanel secondPicturePane;

private final static int WIDTH = 600;

private final static int HEIGHT = 600;

protected Image bfImage;

protected Graphics g;

protected int ImageX = 0;

protected int ImageY = 0;

protected int ImageW = 200;

protected int ImageH = 300;

private JPanel mainPane;

public void setImageX(int ImageX) {

this.ImageX = ImageX;

}

public int getImageX() {

return ImageX;

}

public void setImageY(int ImageY) {

this.ImageY = ImageY;

}

public int getImageY() {

return ImageY;

}

public Graphics getGra() {

return g;

}

public ImageMove() throws Exception {

super();

this.setTitle("键盘操作图片移动演示");

content = this.getContentPane();

firstPicturePane = new JPanel();

secondPicturePane = new JPanel();

content.setLayout(new BorderLayout());

content.add(firstPicturePane, BorderLayout.CENTER);

Toolkit kit = Toolkit.getDefaultToolkit();

Dimension screenSize = kit.getScreenSize();

int h = screenSize.height;

int w = screenSize.width;

int x = (w - WIDTH) / 2;

int y = (h - HEIGHT) / 2;

this.setLocation(x, y);

this.setSize(WIDTH, HEIGHT);

bfImage = Toolkit.getDefaultToolkit().getImage("http_imgloadCACVTPTR.jpg");

this.setVisible(true);

g = firstPicturePane.getGraphics();

if (g == null) {

System.out.println("gg is null");

} else {

System.out.println(bfImage.toString());

MediaTracker t = new MediaTracker(this);

t.addImage(bfImage, 0);

t.waitForAll();

g.drawImage(bfImage, ImageX, ImageY, ImageW, ImageH, this);

}

addKeyListener(new MyKeyListener());

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

class MyKeyListener implements KeyListener {

public void keyReleased(KeyEvent e) {

}

public void keyPressed(KeyEvent e) {

g.drawImage(bfImage, ImageX, ImageY, ImageW, ImageH, null);

g.clearRect(ImageX, ImageY, ImageW, ImageH);

// repaint(ImageX, ImageY, ImageW, ImageH);

if (e.getKeyCode() == KeyEvent.VK_LEFT) {

ImageX -= ((ImageX - 15) >= 0 ? 15 : ImageX);

} else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {

ImageX += ((ImageX + ImageW + 15) <= WIDTH ? 15 : (WIDTH - ImageX - ImageW));

} else if (e.getKeyCode() == KeyEvent.VK_UP) {

ImageY -= ((ImageY - 15) >= 0 ? 15 : ImageY);

} else if (e.getKeyCode() == KeyEvent.VK_DOWN) {

ImageY += ((ImageY + ImageH + 15) <= HEIGHT ? 15 : (HEIGHT - ImageY - ImageH));

}

g.drawImage(bfImage, ImageX, ImageY, ImageW, ImageH, null);

}

public void keyTyped(KeyEvent e) {

char c = e.getKeyChar();

System.out.println(c);

}

}

public static void main(String[] args) throws Exception {

new ImageMove();

}

}

这里有两点需要特别强调:

1、对于键盘事件进行监听时,对于键盘上的字母键和数字键,可以通过getChar获得,但对于一些功能键和方向键,则必须在pressed和releasd里进行通过getHasCode进行监听和操作,这里可以简单地理解为前者执行高层操作,后者执行较底层操作。

2、在面板上绘制图片的时候,可能会出现代码没问题但图片不能显示的问题,那是因为图片可能未加载完成,这里可以通过如下代码加以控制:

MediaTracker t = new MediaTracker(this);             t.addImage(bfImage, 0);             t.waitForAll();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值