📄 walkingman.java
字号:
package swing;
import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
/**
* Title: WalkingMan类<br>
* Description: 行走的圣诞老人<br>
* Copyright:(c)2007 www.luzhou.net<br>
* Company: 泸州职业技术学院电信系
* @author 华卫
* @version 1.00
*/
/*
* 图像绘制在框架里的面板里的画布上。
*/
public class WalkingMan extends JFrame implements Runnable{
JPanel panel1=new JPanel();
JPanel panel2=new JPanel();
MyCanvas mc=new MyCanvas();
JButton btnStart=new JButton("开始");
JButton btnStop=new JButton("停止");
JLabel lblSpeed=new JLabel("设置行走速度:");
JComboBox cobSpeed=new JComboBox();
Thread thread;
Image[] imgMan=new Image[7];
boolean m_bRunning;
int imgIndex=0;
int sleepTime=400; //定义睡眠时间
int StepLength=20; //定义移动步长
int x=200, y=100; //定义图像左上角坐标
//主方法
public static void main(String[] args) {
new WalkingMan();
}
//构造方法
public WalkingMan() {
super("行走的圣诞老人——单击开始按钮后,按方向键可移动圣诞老人");
for(int i=0;i<imgMan.length;i++){
imgMan[i]=this.getToolkit().getImage("swing/man"+(i+1)+".jpg");
}
this.setSize(500,450);
this.setLocationRelativeTo(null); //让窗口在屏幕居中
this.setResizable(false);
//添加组件到内容面板里
this.getContentPane().setLayout(new BorderLayout());
this.getContentPane().add(panel1,"Center");
this.getContentPane().add(panel2,"South");
mc.setSize(500,350);
mc.setBackground(Color.WHITE);
panel1.add(mc);
panel2.setLayout(new FlowLayout());
panel2.add(btnStart);
panel2.add(btnStop);
panel2.add(lblSpeed);
panel2.add(cobSpeed);
cobSpeed.addItem("快速");
cobSpeed.addItem("中速");
cobSpeed.addItem("慢速");
this.setVisible(true);
this.pack();
mc.addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e) {
if(m_bRunning==false){
return;
}
switch(e.getKeyCode()){
case 37: //按左方向键
x=x-StepLength;
break;
case 38: //按上方向键
y=y-StepLength;
break;
case 39://按右方向键
x=x+StepLength;
break;
case 40://按下方向键
y=y+StepLength;
break;
}
if(x<0){ //碰左壁
x=0;
}
if(x>=mc.getWidth()-imgMan[0].getWidth(mc)){ //碰右壁
x=mc.getWidth()-imgMan[0].getWidth(mc);
}
if(y<0){ //碰上壁
y=0;
}
if(y>=mc.getHeight()-imgMan[0].getHeight(mc)){ //碰下壁
y=mc.getHeight()-imgMan[0].getHeight(mc);
}
mc.repaint(); //重绘画布
}
});
btnStart.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
start();
mc.requestFocus();
}
});
btnStop.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
stop();
mc.requestFocus();
}
});
cobSpeed.addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent e) {
switch (cobSpeed.getSelectedIndex()){
case 0: sleepTime=200;
case 1: sleepTime=600;
case 2: sleepTime=1000;
}
mc.requestFocus();
}
});
}
public void start(){
m_bRunning=true;
thread=new Thread(this);
thread.start();
}
public void stop(){
m_bRunning=false;
}
public void run() {
while(m_bRunning){
try {
Thread.sleep(sleepTime);
} catch (InterruptedException e) {
e.printStackTrace();
}
imgIndex++;
imgIndex=imgIndex%7;
mc.repaint(); //重绘画布
}
}
//自定义画布类
class MyCanvas extends Canvas{
public void paint(Graphics g){
g.drawImage(imgMan[imgIndex],x,y,145,153,this);
}
// public void update(Graphics g){
// paint(g); //避免闪烁
// }
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -