用Java写个简单的雪景图吧
【适合用来练手的小项目】

效果如下:

  • 第一步
    我们用idea创建一个名为Demo_snow的项目吧:

    在src下创建一个包:

给包取好名:

在包里面创建两个java文件:


  • 2.第二步
    我们把需要用到的资源准备好吧:
    把图片准备好放在创建好的img文件夹中吧,直接复制粘贴就可以了

  • 3.第三步
    我们来分析一下如何用java代码来实现这个雪景图:

Myframe.java代码如下:

package cn.edu.demo;
import javax.swing.*;/*** @Description:* 步骤:* 1.GUI 提供用户图形化界面的  Jframe:窗体类* 2.在窗体中加入背景  Jpanel:画板类* 3.实现雪花的下落*/
public class Myframe extends JFrame {//使用构造方法,给对象赋初始值public Myframe(){//给窗体设置标题this.setTitle("雪景图");//给窗体设置宽和高this.setSize(1920,1080);//居中显示this.setLocationRelativeTo(null);//默认关闭this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//将画板添加到窗体中this.add(new Mypanel());//显示this.setVisible(true);}public static void main(String[] args) {new Myframe();//创建窗体对象}
}

Mypanel.java代码如下:

package cn.edu.demo;import javax.swing.*;
import java.awt.*;/*** @Description:画板类* 1.画入背景图片* 2.画入雪花* 3.让雪花下落*/
public class Mypanel extends JPanel implements Runnable {int[] x = new int[400];int[] y = new int[400];public Mypanel(){for(int i = 0; i<x.length; i++){x[i] = (int)(Math.random()*1920);y[i] = (int)(Math.random()*1080);}new Thread(this).start();}/*** 绘制的方法* @param g 画笔工具*/@Overrideprotected void paintComponent(Graphics g) {super.paintComponent(g);//1.画入背景图片new ImageIcon("img/s2.png").paintIcon(this,g,0,0);//2.画入雪花g.setColor(Color.white);for(int i = 0; i<x.length; i++){g.drawString("*",x[i],y[i]);}}@Overridepublic void run() {while (true){for(int i = 0; i<x.length; i++){y[i]++;if(y[i] >= 1080){y[i] = 0;}}repaint();try {Thread.sleep(30);} catch (InterruptedException e) {e.printStackTrace();//在命令行打印异常信息在程序中出错的位置及原因}}}
}
  • 4.第四步
    运行我们的项目就可以看到效果啦

    要是不喜欢这样的风格只需要在这里,改变你想要的的背景就可以了
 new ImageIcon("img/s2.png").paintIcon(this,g,0,0);


5.第五步

虽然这是一个很简单的java小项目,但也涉及了一些知识点,我们来学习一下吧

在代码中已经描述了每一个java文件的作用,那我们就了解一下用到的知识点b并扩展一下吧:

1.JFrame 窗体类

JFrame()可以创建一个无标题的窗口。
JFrame(String a)可以创建标题为a的窗口。

public voidsetBounds(int a,int b,int width,int height)

  • 设置窗口的初始位置是(a,b),即距屏幕左面a个像素,距屏幕上方b个像素,窗口的宽是width,高是height。

public void setSize(int width,int height)

  • 设置窗口的大小。

public void setLocation(int x,int y)

  • 设置窗口的位置,默认位置是(0,0)。

    public void setVisible(boolean b)设置窗口是否可见,窗口默认是不可见的。


public voidsetResizable(boolean b)

  • 设置窗口是否可调整大小,默认可调整大小。

public voiddispose()

  • 撤销当前窗口,并释放当前窗口所使用的资源。

publicvoid setExtendedState(int state)

  • 设置窗口的扩展状态,其中参数state取JFrame类中的下列类常量:

MAXIMIZED_HORIZ (水平方向最大化),
MAXIMIZED_VERT (垂直方向最大化),
MAXIMIZED_BOTH (水平、垂直方向都最大化)。


publicvoid setDefaultCloseOperation(int operation)

  • 用来设置单击窗体右上角的关闭图标后,程序会做出怎样的处理,其中的参数operation取JFrame类中的下列int型static常量,程序根据参数operation取值做出不同的处理:

DO_NOTHING_ON_CLOSE(什么也不做),
HIDE_ON_CLOSE (隐藏当前窗口),
DISPOSE_ON_CLOSE (隐藏当前窗口,并释放窗体占有的其他资源), EXIT_ON_CLOSE (结束窗口所在的应用程序)。


2.JPanel 画板类
JPanel组件定义面板实际上是一种容器组件,用来容纳各种其他轻量级组件。
当然用户还可以用这种面板容器绘制图形。

JPanel的构造方法如下:

JPanel():创建具有双缓冲和流布局(FlowLayout)的面板。
JPanel(LayoutManager layout):创建具有制定布局管理器的面板。

JPanel的 常用方法:

void add(Component): 添加组件。
void add(Component,int): 添加组件至索引指定位置。
void add(Component,Object): 按照指定布局限制添加组件。
void add(Component,Object,int): 按照指定布局管理器限制添加组件到指定位置。
void remove(Component): 移除组件。
void remove(int): 移除指定位置的组件。
void removeAll(): 移除所有组件。
void paintComponent(Graphics): 绘制组件。``
void repaint(): 重新绘制。
void setPreferredSize(Dimension): 设置组件尺寸。
Dimension getPreferredSize(): 获取最佳尺寸。

这个小项目就结束了,我们下个项目见,关注我,我会在分类栏中做个项目集合,我们一起学习吧

Java实现雪景图-Java项目实践学习-涉及Jframe/Jpanel等相关推荐

  1. java 随机生成图,Java中的快速实值随机生成器

    java.util.Random.nextDouble() is slow for me and I need something really fast. I did some google sea ...

  2. java复习系列[4] - Java IO

    文章目录 Java IO IO传输 IO读写流程 IO类型 IO的访问方式 缓存IO(标准IO.传统IO) 直接IO 内存映射 总结 Java中IO与NIO的区别 Java NIO 流与缓冲 管道 为 ...

  3. java堆栈_Java堆栈– Java堆栈

    java堆栈 Java Stack is a legacy Collection class. It extends Vector class with five operations to supp ...

  4. java –cp_Java设置–用Java设置

    java –cp Java Set is a collection of elements (Or objects) that contains no duplicate elements. Java ...

  5. java思维导图源代码_如何使用思维导图解读java开源项目

    思维导图与java 思维导图是个很神奇的工具,它具有结构化.可视化.更接近人类大脑认知的特点. 我们在阅读项目的时候往往是无头无脑的随便看源码,其实这是种错误的学习的方法.学习得多注重积累,有输入就要 ...

  6. 视频教程-用Java从零开始开发一个物联网项目-物联网技术

    用Java从零开始开发一个物联网项目 多年的产品设计和开发经验,带领团队完成多个知名产品.历任多家大型公司的Java架构师,对知名框架的源码均有深入研究.拥有IT一线开发.教学10多年的实战经验,能充 ...

  7. [附源码]Java计算机毕业设计SSM大学生项目众筹系统

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  8. [附源码]JAVA+ssm计算机毕业设计大学生项目众筹系统(程序+Lw)

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  9. [附源码]java毕业设计高校创新创业项目管理系统

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

最新文章

  1. java图形用户界面添加背景颜色不成功的解决方案
  2. MyEclipse2014安装svn插件
  3. 图解Oracle RMAN备份入门
  4. atsl android auto吗,二十万就能开上凯迪拉克ATS-L,还有人在纠结买ATS还是GS?
  5. 显卡能力在cod7上的排名
  6. css图片滑动切换图_html图片轮播原理
  7. 高保密单位数据安全怎么办?用这款知识管理系统
  8. android:ems 属性详细分析
  9. html完整语句,html语句
  10. 阿里云疯狂促销 公有云之战刚鸣枪
  11. ​微信公众号素材图片去哪找?
  12. Interop type 'Microsoft.Office.Interop.Word.ApplicationClass' cannot be embedded. Use the applicable
  13. 综合布线系统施工规范
  14. 【yoyo】类,对象,方法,属性,事件的定义
  15. 安排软件保护服务在 2022-07-26T23:00:43Z 时重新启动成功。原因: RulesEngine
  16. 游戏分类&&游戏开发常用术语
  17. 平面四连杆运动方程分析with matlab
  18. 机器视觉光源概述(选型参考)
  19. c语言给结构体指针申请空间,结构体中的指针变量申请空间问题
  20. python bs4 find_all_网络爬虫(三)BS4提取之find_all

热门文章

  1. 从零到一搭建大数据分析引擎HIVE
  2. 美图秀秀——在一张图片上加入其它图片
  3. 2023财年Q4业绩继续下滑,ChatGPT能驱动英伟达重回巅峰吗?
  4. JAVA语言发展介绍【尚学堂java300集视频学习笔记】
  5. python编写网络防火墙_dnxfirewall:一款纯Python实现的下一代防火墙系统
  6. JavaFx之使用指定字体样式(二十九)
  7. 【bug解决】由于找不到vcruntime140_1.dll,无法继续执行代码。重新安装程序可能会解决此问题。
  8. PCB设计:Altium Designer如何单独生成PCB坐标文件
  9. 【verilog】 Vivado-Simple Dual-Port RAM IP的使用(Xilinx FPGA,双口RAM,IP使用)
  10. WiFi、蓝牙以及双WiFi流程