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

用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(): 获取最佳尺寸。

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

猜你喜欢

转载自blog.csdn.net/m0_49095721/article/details/109231632