Java实现雪景图-Java的Jframe/Jpanel

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

相关文章
|
8月前
|
Java API 图形学
Java代码可以做出动图
Java代码可以做出动图
106 1
|
8月前
|
Java C语言
用Java(C语言也可以看)实现冒泡排序和折半查找(详细过程图)+逆序数组
用Java(C语言也可以看)实现冒泡排序和折半查找(详细过程图)+逆序数组
80 0
|
7月前
|
存储 算法 Java
Java中,树与图的算法涉及二叉树的前序、中序、后序遍历以及DFS和BFS搜索。
【6月更文挑战第21天】Java中,树与图的算法涉及二叉树的前序、中序、后序遍历以及DFS和BFS搜索。二叉树遍历通过访问根、左、右子节点实现。DFS采用递归遍历图的节点,而BFS利用队列按层次访问。以下是简化的代码片段:[Java代码略]
56 4
|
7月前
|
存储 算法 Java
【经典算法】LeetCode133克隆图(Java/C/Python3实现含注释说明,中等)
【经典算法】LeetCode133克隆图(Java/C/Python3实现含注释说明,中等)
47 2
|
7月前
|
Java
图深度优先、广度优先遍历(java)
图深度优先、广度优先遍历(java)
|
8月前
|
设计模式 Java 容器
Java一分钟之-Swing基础:JFrame, JPanel, JButton
Java Swing教程介绍了构建桌面应用的关键组件:JFrame(顶级容器,显示主窗口)、JPanel(组合其他组件的容器)和JButton(交互元素)。文中通过示例代码展示了这些组件的使用,并列出常见问题及解决方法,如确保设置JFrame的可见性和关闭操作,正确添加组件至JPanel,以及为JButton添加事件监听器。理解这些基础将有助于开发功能完善的GUI应用。
288 0
|
8月前
|
算法 Java
Java必刷入门递归题×5(内附详细递归解析图)
Java必刷入门递归题×5(内附详细递归解析图)
105 1
|
8月前
|
NoSQL Java 关系型数据库
基于java Swing 和 mysql实现的飞机订票系统(源码+数据库+ppt+ER图+流程图+架构说明+论文+运行视频指导)
基于java Swing 和 mysql实现的飞机订票系统(源码+数据库+ppt+ER图+流程图+架构说明+论文+运行视频指导)
865 0
|
8月前
|
NoSQL Java 关系型数据库
基于java swing和mysql实现的学生选课成绩信息管理系统(源码+数据库+ER图文档+运行指导视频)
基于java swing和mysql实现的学生选课成绩信息管理系统(源码+数据库+ER图文档+运行指导视频)
308 0
|
8月前
|
Java 图形学 计算机视觉
【Java数字图像处理之Swing基础篇】自定义JPanel背景
【Java数字图像处理之Swing基础篇】自定义JPanel背景