02.打乱图片

三分钟带你领路Java-JFrame窗体美化 JFrame默认的窗体比较土,可以通过一定的美化,让窗体表现的比较漂亮,具体要根据设计的设计图进行美化; JFrame美化的大致思路:先将JFrame去除默认美化效果,实现JWindow效果,然后再JWindow基础上对窗体的各项内容自定义设置与美化,大多用到插入背景图片、添加各种鼠标事件、弹窗与输入框等圆角等各种美化; 下面是一个登录窗体的美化代码,以后再有对窗体美化的可以参照一下代码进行美化: 1、Login实体类代码: package com; import java.awt.Color; im 阅读详情

一.打乱图片顺序:

0代表空白区域。

二.中间练习:

解法一:遍历一维数组得到每一个元素,把每一个元素依次添加到二维数组当中

package com.itheima.test;
​
import java.util.Random;
​
public class Test {
    public static void main(String[] args) {
        Random r=new Random();
        //需求
        //把一个一维数组中的数据:0-15打乱顺序
        //然后再按照4个一组的方式添加到二维数组当中
​
        //1.定义一个一维数组
        int[] tempArr={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
​
        //2.打乱数组中数据的顺序
        for (int i = 0; i < tempArr.length; i++) {
            //1.随机生成一个索引
            int index=r.nextInt(tempArr.length-1);
            //2.与i索引上的元素交换位置
            int temp=tempArr[i];
            tempArr[i]=tempArr[index];
            tempArr[index]=temp;
        }
​
        //3.创建一个二维数组
        int[][] data=new int[4][4];
​
        //4.给二维数组添加数据
        /*解法一:
           遍历一维数组tempArr得到每一个元素,把每一个元素依次添加到二维数组当中
         */
        for (int i = 0; i < tempArr.length; i++) {
            data[i/4][i%4]=tempArr[i];
        }
​
        //遍历二维数组
        for (int i = 0; i < data.length; i++) {
            for (int j = 0; j < data[i].length; j++) {
                System.out.print(data[i][j]+" ");
            }
            //打印完一行换行
            System.out.println();
        }
        /*运行结果为6 12 7 0 
                  10 13 1 9 
                  2 5 3 14 
                  15 11 8 4 
​
         */
    }
}
​

解法二:遍历二维数组,给里面的每一个数据赋值

package com.itheima.test;
​
import java.util.Random;
​
public class Test2 {
    public static void main(String[] args) {
        Random r=new Random();
        //需求
        //把一个一维数组中的数据:0-15打乱顺序
        //然后再按照4个一组的方式添加到二维数组当中
​
        //1.定义一个一维数组
        int[] tempArr={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
​
        //2.打乱数组中数据的顺序
        for (int i = 0; i < tempArr.length; i++) {
            //1.随机生成一个索引
            int index=r.nextInt(tempArr.length-1);
            //2.与i索引上的元素交换位置
            int temp=tempArr[i];
            tempArr[i]=tempArr[index];
            tempArr[index]=temp;
        }
​
        //3.创建一个二维数组
        int[][] data=new int[4][4];
​
        //4.给二维数组添加数据
        /*解法二:
           遍历二维数组,给里面的每一个数据赋值
         */
        //定义一个变量,记录一维数组的索引
        int index=0;
        for (int i = 0; i < data.length; i++) {
            for (int j = 0; j < data[i].length; j++) {
                data[i][j]=tempArr[index];
                index++;//代表下一次需要下一个索引上的元素
            }
        }
​
​
        //遍历二维数组
        for (int i = 0; i < data.length; i++) {
            for (int j = 0; j < data[i].length; j++) {
                System.out.print(data[i][j]+" ");
            }
            //打印完一行换行
            System.out.println();
        }
        /*运行结果为6 2 7 5 
                  0 11 9 15 
                  3 4 13 8 
                  10 1 12 14 
         */
    }
}

​

三.最终代码:

1.代码:

package com.itheima.ui;
​
import javax.swing.*;
import java.util.Random;
​
public class GameJFrame extends JFrame {
    /* 注意一定要继承JFrame类
      因为此时要创建一个窗体,而JFrame就是一个界面,窗体,
      继承JFrame的子类也表示界面,窗体
    */
    //规定:GameJFrame这个界面表示的就是游戏的主界面
    //以后跟游戏相关的所有逻辑都写在这个类中
​
​
    //创建一个二维数组
    //目的:用来管理数据
    //加载图片的时候,会根据二维数组中的数据进行加载
    int[][] data=new int[4][4];
​
    public GameJFrame(){
        //初始化界面
        initJFrame();
​
        //初始化菜单
        initJMenuBar();
​
        //初始化数据(打乱)
        initData();
​
​
        //初始化图片(根据打乱之后的结果去加载图片)
        initImage();
​
​
​
        //参数为true显示界面,为false隐藏界面-->建议写最后
        this.setVisible(true);//gameJframe.show();也可以显示界面
    }
​
​
    //初始化数据(打乱)的方法
    private void initData() {
        //1.定义一个一维数组
        int[] tempArr={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
        //2.打乱数组中数据的顺序
        Random r=new Random();
        for (int i = 0; i < tempArr.length; i++) {
            //a.随机生成一个索引
            int index=r.nextInt(tempArr.length-1);
            //b.与i索引上的元素交换位置
            int temp=tempArr[i];
            tempArr[i]=tempArr[index];
            tempArr[index]=temp;
        }
        //3.给二维数组添加数据
        /*解法二:
           遍历二维数组,给里面的每一个数据赋值
         */
        //定义一个变量,记录一维数组的索引
        int index=0;
        for (int i = 0; i < data.length; i++) {
            for (int j = 0; j < data[i].length; j++) {
                data[i][j]=tempArr[index];
                index++;//代表下一次需要下一个索引上的元素
            }
        }
    }
​
​
    //初始化图片的方法
     //初始化数据(打乱)后,在添加图片时,就需要根据二维数组中管理的数据进行添加图片
    private void initImage() {
        //外循环控制x,内循环控制y----嵌套循环(先看内循环,再看外循环)
        //外循环 --- 把内循环重复执行了四次
        for (int i = 0; i < 4; i++) {
            //内循环 --- 表示在一行添加4张图片
            for (int j = 0; j < 4; j++) {
                //获取当前要加载的图片的序号
                int number=data[i][j];
                //创建一个图片ImageIcon的对象
                ImageIcon icon=new ImageIcon("D:\\Java\\PuzzleGame\\image\\animal\\animal3\\"+number+".jpg");//注:number是整型,要单独写出来
                //创建一个JLabel的对象(管理容器),本例中没有第16张图片,但也会执行new JLabel,只不过加载了个空白
                JLabel jLabel=new JLabel(icon);//放入icon,代表管理icon
                //指定图片位置(必须是在"把管理容器添加到界面中"前)
                jLabel.setBounds(105*j,105*i,105,105);//第一个参数为横坐标,第二个参数为纵坐标,第三个参数为宽(像素),第四个参数为高(像素)
                //把管理容器添加到界面中
                this.getContentPane().add(jLabel);//getContentPane()用来获取里面隐藏的容器
            }
        }
​
    }
​
​
​
​
​
    //初始化菜单的方法
    private void initJMenuBar() {
        //初始化菜单
        //1.创建整个的菜单对象
        JMenuBar jMenuBar=new JMenuBar();
        //2.创建菜单上面的两个选项的对象(功能  关于我们)
        JMenu functionJMenu=new JMenu("功能");
        JMenu aboutJMenu=new JMenu("关于我们");
        //3.创建选项下面的条目对象
        //功能
        JMenuItem replayItem=new JMenuItem("重新游戏");
        JMenuItem reLoginItem=new JMenuItem("重新登录");
        JMenuItem closeItem=new JMenuItem("关闭游戏");
        //关于我们
        JMenuItem accountItem=new JMenuItem("公众号");
​
​
        //将每一个选项下面的条目添加到选项当中
        //功能
        functionJMenu.add(replayItem);
        functionJMenu.add(reLoginItem);
        functionJMenu.add(closeItem);
        //关于我们
        aboutJMenu.add(accountItem);
​
​
        //将菜单里面的两个选项添加到菜单中
        jMenuBar.add(functionJMenu);
        jMenuBar.add(aboutJMenu);
​
​
        //给整个界面设置菜单
        this.setJMenuBar(jMenuBar);
    }
​
​
​
    //初始化界面的方法
    private void initJFrame() {
        //设置界面的宽高(单位:像素)-->大小根据内容定
        this.setSize(603,680);//第一个参数为宽,第二个参数为高
        //设置界面的标题
        this.setTitle("拼图单机版 v1.0");
        //设置界面置顶
        this.setAlwaysOnTop(true);
        //设置界面居中
        this.setLocationRelativeTo(null);
        //设置关闭模式-->不设置的话最终运行后再关闭界面,但程序不停止
        //this.setDefaultCloseOperation(3);//3代表一种关闭规则,可通过看源码了解
        //还可以this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        //对于关闭模式,必须每个界面都设置一遍才生效。关闭模式2是关了最后一个才结束,关闭模式3是关一个就结束一个
        //本项目这几个界面不会同时出现,因此用关闭模式3即可
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        //取消默认的居中放置,只有取消了才会按照XY轴的形式添加组件
        this.setLayout(null);
    }
}
​

2.测试类:

import com.itheima.ui.GameJFrame;
import com.itheima.ui.LoginJFrame;
import com.itheima.ui.RegisterJFrame;
​
public class App {
    public static void main(String[] args) {
        //表示程序的启动入口
​
        //如果我们想要开启一个界面,就创建谁的对象就可以了
        //new LoginJFrame();//调用了登录界面的空参构造
​
        //new RegisterJFrame();
​
        new GameJFrame();
    }
}

​
​

3.运行结果:


JFrame界面美化IFrame应用。 在JDK1.4以前,我们只有一种方式来去掉窗口的标题栏,那就是直接使用JWindow,用JWindow来代替JFrame使用。但用过JWindow的人一定知道,JWindow在操作系统的任务栏是不可见的,这样我们就无法在几个视窗之间来切换到这个窗口了。 立即下载

相关推荐

java自定义JFrame风格窗体

完全自定义的JFrame窗体,摆脱系统自带窗体的限制

Java Swing窗体JFrame之窗体美化-窗体及组件外观设置

可通过设置Swing的主题使窗体及控件达到部分美化的效果,当然也可以通过自定义控件或者自制UI的方式美化控件及窗体外观。这里只介绍Swing主题设置的几种方式。 一、Java Swing自带主题 Java中的几种LookandFeel(此部分代码在main方法打开GUI界面之前实现) Metal风格(默认) String lookAndFeel ="javax.swing.plaf.metal.MetalLookAndFeel"; UIManager.setLookAndFeel(lookAndF

qq_35980294的博客 8809

JFrame界面精美设计.7z

JFrame界面精美设计,大神必备神器,导入即用,无需更改,无需配置,Java Swing图形界面工具,java必经之路!

java jframe面板美化_java,枯燥中遇见美丽JFrame,窗体(面板,JPanel)

package com.company;import javax.swing.*;import java.awt.*;public class Main extends JFrame {//JPanel面板public Main(){setBounds(100,100,500,300);setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);...

weixin_42314680的博客 572

java jframe画的雪天简图

用java的swing组件里面的JFrame做的窗口程序,里面有一个JPanel,在panel上面用Graphics画了几棵树,云朵,和地面上的雪人。写这个的目的主要是练习画图里面相关方法的使用,这里用到了填充矩形fillRect、画线drawLine、画填充多边形fillOval以及填充圆弧fillArc这些方法。

SWING GUI 美化包及使用说明 JTattoo 各种美化效果告别枯燥

十几处 SWING GUI 美化包 告别枯燥的GUI界面 配使用实例说明

JFrame外观

IFrame 是一种应用程序窗口体系结构,它可以有自定义颜色、自定义边框、自定义形状、自定义组件、甚至透明性。有了 JFrame,就不需要在应用程序中总是使用乏味的、老的 JFram 了。在本文中,IT 专家 Michael Aberethy 介绍了 IFrame 类,并展示了如何用它将标准 JFrame 应用程序窗口立刻转换为先进的 IFrame。 自 Java 1.0 开始,UI 开发人员就...

小帅的博客 1116

VSCode + Clangd 配置避坑实录:从‘红波浪线’到完美代码提示的完整心路

本文详细记录了VSCode与Clangd配置过程中的常见问题及解决方案,从编译数据库生成到参数调优,帮助C++开发者快速解决代码提示失效、头文件找不到等问题,实现完美代码补全体验。重点介绍了Clangd与LLDB的集成配置及性能优化技巧,适用于Linux和跨平台开发环境。

weixin_28829479的博客 490

【Java】打乱图片

我们在初始化数据的时候,做的其实就是打乱图片。打乱完图片后,在初始化图片的时候,此时就可以根据打乱之后的结果去加载图片。因此,在以后,如果题目没有什么特殊的要求的话,我们一般是这么处理的:长度固定的,我们用数组;因此我们会将这个数组中,每四个数字拿出来,单独放到一个一维数组中,此时就会产生四个数组。在刚刚我们已经将游戏用到的小的图片都加载到界面中了,现在我们就来打乱图片的顺序。告诉你,用集合也可以,但是集合嵌套的代码写起来就更复杂了,它不如二维数组简单。的位置,单单是断定它索引的位置,就非常的麻烦!

qq_39921135的博客 1009

TCP Reno/CUBIC 拥塞控制算法对比:从 Tahoe 到 BBR 的 4 种核心策略演进

本文深入解析了TCP拥塞控制算法的演进历程,从经典的Tahoe、Reno到现代的CUBIC和BBR,详细对比了4种核心策略的实现机制与性能差异。通过分析拥塞窗口、流量控制等关键技术,揭示了不同算法在高带宽延迟网络中的优化方向,为网络协议栈优化提供理论依据和实践指导。

weixin_33725239的博客 440

SAR成像处理基本知识2——图像尺寸与回波尺寸的关系

阅读本文前,请先了解上一篇文章(SAR成像处理基本知识1——常用专用名词解释) 1. SAR图像尺寸预估方法 以C波段2m@20km的SAR图像为例,假设天线中心下视角为35° ,说明图像尺寸的估计方法。 1.1 距离向尺寸估计 地距分辨率为2m时,距离向分辨率约为1.15m,则要求信号带宽不小于130MHz,假设信号带宽为150MHz,采样率为180MHz,那么距离向分辨单元为0.833m。 地距幅宽为20km时,距离向幅宽约为20*sind(3...

爱学习的小伟的博客 4954

拼图游戏java(二)打乱图片顺序

便于后续的判断按钮向哪里移,使用图片打乱而按钮不乱的方案 添加按钮时将icon[i]的i的顺序打乱,可实现图片打乱 方案一: 使用规定的打乱顺序 1.建立一个二维数组orders 和一个一维数组order order为orders的其中一个元素 定义一个随机数(范围为0到orders的长度减1),控制order选择不同的行 int[][] orders = { ...

sinat_39302317的博客 2420

TP4054充电电路发热严重?手把手教你调整电阻值降低温度(附实测数据)

本文针对TP4054锂电池充电电路发热严重的问题,提供了详细的排错与解决方案。通过分析发热原理,指出核心在于PROG引脚电阻值设定,并手把手指导如何计算和选择正确的电阻以降低充电电流与温度。文末附有不同电阻下的实测温度与性能数据,为电子爱好者和工程师提供了实用的调试参考。

p4q5r6s7t的博客 406

案例25:随机打乱图片

<!DOCTYPEhtml> <html> <head> <metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/> <title>无标题文档</title> <linkrel="styl...

kino2046的博客 1264

单片机开发者的福音:3步搞定VSCode智能补全(IAR工程+Clangd实战)

本文为单片机开发者提供了一套高效解决方案,通过EIDE插件将IAR工程导入VSCode,并生成关键的compile_commands.json文件,结合Clangd配置,仅需三步即可实现精准的智能代码补全、一键跳转等现代编辑功能,大幅提升嵌入式开发效率。

coffee的博客 523

【PVCodeNet】《Palm Vein Recognition Network Combining Transformer and CNN》

1]吴凯,沈文忠,贾丁丁,等.融合Transformer和CNN的手掌静脉识别网络[J].计算机工程与应用,2023,59(24):98-109.

bryant_meng 1280

Python批量重命名图片并随机打乱顺序的实用方法

通过本文提供的 Python 脚本,我们可以轻松完成图片文件的随机打乱和规范化命名任务。该方法适用范围广、操作简单,适合各类图像处理项目。如果你对本文的内容感兴趣,欢迎留言讨论或分享你的应用场景!本文首发于优快云,转载请注明出处。如有问题或建议,请在评论区留言,我会及时回复!祝您一切顺利,生活愉快!

2301_80809491的博客 1579

用Multisim仿真AD630锁定放大器:从2012年电赛A题实战到避坑指南

本文详细介绍了如何使用Multisim仿真AD630锁定放大器,从2012年电赛A题实战出发,提供完整的电路搭建、参数优化及避坑指南。重点解析AD630的开关调制架构和双相位检测的工程实现,帮助读者在强噪声背景下有效提取微弱信号,提升电子设计竞赛和工程实践中的信号处理能力。

weixin_42549451的博客 203

【python小技巧】 批量打乱文件的顺序

做数据集的时候,因为自己图片的都是从视频里一帧帧截出来的,所以就导致一些连续的图片,觉得很不爽,于是乎就想将这些图片顺序打乱。 技能一:产生指定范围内的不重复的整数 L=random.sample(range(0,Imgnum),Imgnum) 技能二:批量修改文件名,请请参考我的这篇文章 批量修改文件名 好了,下面就是完整的代码了 import random import os ...

倔强的大萝卜的博客 7325

ABAP 平台注册 OAuth 2.0 Client 的完整实践指南(覆盖 Authorization Code、SAML Bearer 与 PKCE)

本文详述了在ABAP平台上注册入站OAuth 2.0 Client的关键技术和操作要点。文章面向SAP技术人员,系统梳理了前置条件(TLS/SSL、技术用户、授权对象)、配置路径(SOAUTH2事务)、授权类型差异(授权码、SAML Bearer、PKCE)等重要内容。特别强调入站与出站配置的区别,并提供了保密客户端和公有客户端的配置指引。文中所有事务码和参数均参考SAP官方文档,包含多个实用案例和权限配置建议,为ABAP系统作为OAuth 2.0授权服务器的实施提供全面指导。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 297

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

阶段项目中的添加图片和打乱图片

JMenuItem reLoginItem=new JMenuItem("重新登录");JMenuItem replayItem=new JMenuItem("重新游戏");JMenuItem closeItem=new JMenuItem("关闭游戏");//遍历数组,得到每一个元素,拿着每一个元素跟随机索引上的数据交换。//添加图片的时候,就需要按照二维数组中的数据添加图片。//加载图片的时候,会根据二维数组中的数据进行加载。//拿着遍历到的每一个数据,跟随机索引上的数据进行交换。

qq_52326978的博客 592

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Java拼图游戏叁之打乱图片

拼图游戏之打乱图片基础和实现

2301_76808061的博客 502

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

np.random.shuffle()+random.seed()设定随机种子,多次打乱,打乱规则固定

在打乱数据集的时候遇到了这样一个问题:我有两组数据集,一组是image,一组是mask(语义分割任务,与本文无关),image和mask里都是图片,且一一对应,即。注意,因为shuffle函数是在原数组上直接操作的,不是生成一个新的打乱的数组,因此一次shuffle(a)之后,a就变成了打乱后的样子。其实,三次shuffle(b)也是按相同的规则打乱的,但该规则不同于shuffle(a)的规则,因此,并不能保留a、b之间的对应关系。)的结论,但基于上面的结果,好像这句话又不完全对,还望大佬指正~

qq_46380784的博客 9185

常用数据打乱方法总结

数据打乱方法1.标注文件说明2.读取标注文件1.排序打乱2.切片打乱3. 当我们拿到一个数据集后,我们需要先从标注文件中读取数据,然后对其进行打乱(shuffle),我们那celeba数据集为例进行说明 1.标注文件说明 202599 image_id x_1 y_1 width height 000001.jpg 95 71 226 313 000002.jpg 72 94 221 306 000003.jpg 216 59 91 126 000004.jpg 622 257

xf1234的博客 2539

php图片加密,PHP实现图片文件伪加密打乱简单思路

PHP实现图片文件伪加密打乱简单思路在PHP开发中偶尔有些特殊情况不希望直接暴露某些图片的真实地址,除了可以给图片存入数据库、图片写入其他格式的文件再读取显示之外,这里写了个简单的将图片字节前后颠倒打乱的方法,classSevStudioImg{functionpr($length,$length0,$length1){echo<<length:{$length}length0:...

weixin_42511702的博客 382

影楼照片图片乱打器|选样照片打乱软件

      影楼照片图片乱打器|选样照片打乱软件是一款照片顺序打乱软件,可以快速打乱任意文件夹中图片的顺序,拥有简洁的界面,操作更为简单,只需选择要打乱图片所在的文件夹即可自动打乱图片顺序,操作简单轻松便捷赶快下载使用吧。 程序截图: 【当前版本】:3.0 【更新内容】:    1.新增设置更名前缀,方便部分影楼批量更名    2.新增自行输入目录地址选择打乱    3.新增再执行...

u013526205的博客 1401
上一篇: 01.项目介绍、界面搭建、界面设置、菜单搭建和添加图片
下一篇: 03.事件
巧克力拌面
博客等级 码龄3年 1153粉丝 282原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值