用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 画笔工具 */ @Override protected 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]); } } @Override public 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(): 获取最佳尺寸。