用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(): 获取最佳尺寸。
这个小项目就结束了,我们下个项目见,关注我,我会在分类栏中做个项目集合,我们一起学习吧