0


Java案例:行走的圣诞老人

文章目录

一、运行效果

  • 单击【开始】按钮后,通过按键移动圣诞老人,单击【停止】,圣诞老人就停止不动在这里插入图片描述

二、涉及知识点

  1. 基本控制结构
  2. 数组
  3. 图形用户界面
  4. 多线程

三、实现步骤

(一)创建Java项目

  • 创建Java项目 - WalkingSantaClaus在这里插入图片描述

(二)准备图片素材

  • 在项目根目录创建images目录,将七张图片拷贝进去在这里插入图片描述

(三)创建包、创建类

1、创建包

  • 创建net.huawei.gui在这里插入图片描述

2、创建类

  • net.huawei.gui包里创建WalkingSantaClaus在这里插入图片描述
  1. packagenet.huawei.gui;importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;/**
  2. * 功能:行走的圣诞老人
  3. * 作者:华卫
  4. * 日期:2022年04月14日
  5. */publicclassWalkingSantaClausextendsJFrame{privateJPanel panel1 =newJPanel();privateJPanel panel2 =newJPanel();privateMyCanvas mc =newMyCanvas();privateJButton btnStart =newJButton("开始");privateJButton btnStop =newJButton("停止");privateJLabel lblSpeed =newJLabel("设置行走速度:");privateJComboBox cobSpeed =newJComboBox();privateThread thread;boolean isRunning;privateImage[] imgMan =newImage[7];int imgIndex =0;int sleepTime =400;// 定义睡眠时间int stepLength =20;// 定义移动步长int x =200, y =100;// 定义图像左上角坐标/**
  6. * 主方法
  7. *
  8. * @param args
  9. */publicstaticvoidmain(String[] args){newWalkingSantaClaus();}/**
  10. * 无参构造方法
  11. */publicWalkingSantaClaus(){super("行走的圣诞老人——单击开始按钮后,按方向键可移动圣诞老人");initGUI();// 初始化图形用户界面eventsHandling();// 进行事件处理}/**
  12. * 初始化用户界面
  13. */privatevoidinitGUI(){for(int i =0; i < imgMan.length; i++){
  14. imgMan[i]=this.getToolkit().getImage("images/man"+(i +1)+".jpg");}// 添加组件到内容面板里this.getContentPane().setLayout(newBorderLayout());this.getContentPane().add(panel1,"Center");this.getContentPane().add(panel2,"South");
  15. mc.setSize(500,350);
  16. mc.setBackground(Color.WHITE);
  17. panel1.add(mc);
  18. panel2.setLayout(newFlowLayout());
  19. panel2.add(btnStart);
  20. panel2.add(btnStop);
  21. panel2.add(lblSpeed);
  22. panel2.add(cobSpeed);
  23. cobSpeed.addItem("快速");
  24. cobSpeed.addItem("中速");
  25. cobSpeed.addItem("慢速");// 设置窗口属性this.setSize(500,450);this.setLocationRelativeTo(null);this.setResizable(false);this.setVisible(true);this.pack();this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}/**
  26. * 事件处理
  27. */privatevoideventsHandling(){
  28. mc.addKeyListener(newKeyAdapter(){publicvoidkeyPressed(KeyEvent e){if(isRunning ==false){return;}switch(e.getKeyCode()){case37:// 按左方向键
  29. x = x - stepLength;break;case38:// 按上方向键
  30. y = y - stepLength;break;case39:// 按右方向键
  31. x = x + stepLength;break;case40:// 按下方向键
  32. y = y + stepLength;break;}if(x <0){// 碰左壁
  33. x =0;}if(x >= mc.getWidth()- imgMan[0].getWidth(mc)){// 碰右壁
  34. x = mc.getWidth()- imgMan[0].getWidth(mc);}if(y <0){// 碰上壁
  35. y =0;}if(y >= mc.getHeight()- imgMan[0].getHeight(mc)){// 碰下壁
  36. y = mc.getHeight()- imgMan[0].getHeight(mc);}
  37. mc.repaint();// 重绘画布}});// 开始按钮单击事件处理
  38. btnStart.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvent arg0){start();
  39. mc.requestFocus();}});// 停止按钮事件处理
  40. btnStop.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvent arg0){stop();
  41. mc.requestFocus();}});// 速度组合框事件处理
  42. cobSpeed.addItemListener(newItemListener(){publicvoiditemStateChanged(ItemEvent e){switch(cobSpeed.getSelectedIndex()){case0:
  43. sleepTime =200;case1:
  44. sleepTime =600;case2:
  45. sleepTime =1000;}
  46. mc.requestFocus();}});}/**
  47. * 自定义画布类
  48. */classMyCanvasextendsCanvas{publicvoidpaint(Graphics g){
  49. g.drawImage(imgMan[imgIndex], x, y,145,153,this);}publicvoidupdate(Graphics g){paint(g);// 避免闪烁}}/**
  50. * 开始方法 - 启动线程
  51. */publicvoidstart(){
  52. isRunning =true;
  53. thread =newThread(newRunnable(){@Overridepublicvoidrun(){while(isRunning){try{Thread.sleep(sleepTime);}catch(InterruptedException e){
  54. e.printStackTrace();}
  55. imgIndex++;
  56. imgIndex = imgIndex %7;
  57. mc.repaint();// 重绘画布}}});
  58. thread.start();}/**
  59. * 停止方法 - 销毁线程
  60. */publicvoidstop(){
  61. isRunning =false;
  62. thread =null;}}

(四)运行程序,查看结果

  • 单击工具栏上运行按钮在这里插入图片描述
  • 单击【开始】按钮后,通过按键移动圣诞老人,单击【停止】,圣诞老人就停止不动在这里插入图片描述

本文转载自: https://blog.csdn.net/howard2005/article/details/124162467
版权归原作者 howard2005 所有, 如有侵权,请联系我们删除。

“Java案例:行走的圣诞老人”的评论:

还没有评论