【Java项目介绍和界面搭建】拼图小游戏——美化界面

news2024/12/23 4:53:46
🍬 博主介绍

👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~
✨主攻领域:【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】
🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝文末有彩蛋
🙏作者水平有限,欢迎各位大佬指点,相互学习进步!


目录

拼图小游戏

练习

1、创建主界面1

代码

2、创建主界面2

菜单制作

3、在游戏界面中添加菜单

代码

4、添加图片

游戏主界面添加组件

代码

5、打乱图片顺序

练习

6、事件

1、动作监听

2、鼠标监听机制

3、键盘监听

7、美化界面


拼图小游戏

练习

1、创建主界面1

  • 到idea中创建一个宽603像素,高680像素的游戏主界面
  • 到idea中创建一个宽488像素,高430像素的登录界面
  • 到idea中创建一个宽488像素,高500像素的注册界面

代码

测试类:test ,在这个测试类中,我们直接把三个Java用户图形化界面生成了,但是这样三个功能界面全部都写在同一个main函数里面,对于我们以后的代码修改很不方便。

所以我们这里进行修改下,分别写成单独的类中。

package ui;

import javax.swing.*;

public class test {
    public static void main(String[] args) {
        //JFrame是JavaBean类描述界面的
        //属性 (宽 高)  行为

        //1.创建一个游戏的主界面
        JFrame gameJFrame = new JFrame();
        gameJFrame.setSize(603,680);//单位是像素
        gameJFrame.setVisible(true);

        //2.创建一个登陆界面
        JFrame loginJFrame = new JFrame();
        loginJFrame.setSize(488,430);
        loginJFrame.setVisible(true);

        //3.创建一个注册界面
        JFrame registerJFrame = new JFrame();
        registerJFrame.setSize(488,500);
        registerJFrame.setVisible(true);


    }
}

注册界面:RegisterJFrame

package ui;

import javax.swing.*;

public class RegisterJFrame extends JFrame {
    //跟相关注册界面的代码,都写里面
    public RegisterJFrame(){
        this.setSize(488,500);
        this.setVisible(true);
    }

}

登录界面:loginJFrame

package ui;

import javax.swing.*;

public class loginJFrame extends JFrame {
    //loginJFrame 表示登录界面
    //以后所以跟登录相关的代码,都写里面
    public loginJFrame(){
        this.setSize(488,430);
        this.setVisible(true);
    }

}

游戏界面:GameJFrame

package ui;

import javax.swing.*;

public class GameJFrame extends JFrame {
    //JFrame 界面,窗体
    //子类呢?也表示界面,窗体
    //规定:GameJFrame这个界面表示的就是游戏的主界面
    //以后跟游戏相关的所有逻辑都写在这个类中
    public GameJFrame(){
        this.setSize(603,680);//单位是像素
        this.setVisible(true);
    }

}

程序的启动入口:App

我们可以把test这个类删掉了,我们可以直接俄利用App这个程序的启动入口,我们需要启动哪个界面,我们直接创建谁就可以了。

import ui.GameJFrame;
import ui.RegisterJFrame;
import ui.loginJFrame;

public class App {
    public static void main(String[] args) {
        //表示程序的启动入口
        //如果我们想要开启一个界面,就创建谁的对象就好了
        new RegisterJFrame();
        new GameJFrame();
        new loginJFrame();
    }
}

2、创建主界面2

简单初始化界面

    public RegisterJFrame(){
        this.setSize(488,500);

        //设置界面的标题
        this.setTitle("拼图 注册");

        //设置界面置顶
        this.setAlwaysOnTop(true);

        //设置界面居中
        this.setLocationRelativeTo(null);

        //设置关闭模式
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        //让界面显示出来
        this.setVisible(true);
菜单制作

3、在游戏界面中添加菜单

代码

游戏界面:GameJFrame

package ui;

import javax.swing.*;

public class GameJFrame extends JFrame {
    //JFrame 界面,窗体
    //子类呢?也表示界面,窗体
    //规定:GameJFrame这个界面表示的就是游戏的主界面
    //以后跟游戏相关的所有逻辑都写在这个类中
    public GameJFrame(){
        //初始化界面
        initJFrame();

        //初始化菜单
        initJMenuBar();


        //让界面显示出来,最后写
        this.setVisible(true);
    }








    private void initJMenuBar() {
        //初始化菜单
        //创建整个的菜单对象
        JMenuBar jMenuBar = new JMenuBar();
        //创建菜单上面的两个选项的对象  (功能  关于我们)
        JMenu fuctionJMenu = new JMenu("功能");
        JMenu aboutJMenu = new JMenu("关于我们");
        //创建选项下面的条目对象
        JMenuItem replayItem = new JMenuItem("重新游戏");
        JMenuItem reloginItem = new JMenuItem("重新登录");
        JMenuItem closeItem = new JMenuItem("关闭游戏");

        JMenuItem accountItem = new JMenuItem("公众号");
        //将每一个选项下的条目添加到对应的选项中
        fuctionJMenu.add(replayItem);
        fuctionJMenu.add(reloginItem);
        fuctionJMenu.add(closeItem);

        aboutJMenu.add(accountItem);
        //将菜单里面的两个选项添加到菜单中
        jMenuBar.add(fuctionJMenu);
        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(WindowConstants.EXIT_ON_CLOSE);
    }

}

测试类:App

import ui.GameJFrame;
import ui.RegisterJFrame;
import ui.loginJFrame;

public class App {
    public static void main(String[] args) {
        //表示程序的启动入口
        //如果我们想要开启一个界面,就创建谁的对象就好了
        new GameJFrame();
//        new RegisterJFrame();
//        new loginJFrame();
    }
}

4、添加图片

  • 默认添加图片显示在正中央

多写一个初始化图片

package ui;

import javax.swing.*;

public class GameJFrame extends JFrame {
    //JFrame 界面,窗体
    //子类呢?也表示界面,窗体
    //规定:GameJFrame这个界面表示的就是游戏的主界面
    //以后跟游戏相关的所有逻辑都写在这个类中
    public GameJFrame(){
        //初始化界面
        initJFrame();

        //初始化菜单
        initJMenuBar();

        //初始化图片
        initimage();


        //让界面显示出来,最后写m
        this.setVisible(true);
    }

//---------------------------------- ---------------------
    //初始化图片
    private void initimage() {
    //1.创建一个图片imageicon的对象
        ImageIcon icon = new ImageIcon("E:\\tool\\IDEA-java\\java代码\\routing\\image\\animal\\animal3\\3.jpg");
    //2.创建一个Jlabel的对象(管理容器)
        JLabel JLabel = new JLabel(icon);
    //3.把管理容器添加到界面中
    this.add(JLabel);

    }


    private void initJMenuBar() {
        //初始化菜单
        //创建整个的菜单对象
        JMenuBar jMenuBar = new JMenuBar();
        //创建菜单上面的两个选项的对象  (功能  关于我们)
        JMenu fuctionJMenu = new JMenu("功能");
        JMenu aboutJMenu = new JMenu("关于我们");
        //创建选项下面的条目对象
        JMenuItem replayItem = new JMenuItem("重新游戏");
        JMenuItem reloginItem = new JMenuItem("重新登录");
        JMenuItem closeItem = new JMenuItem("关闭游戏");

        JMenuItem accountItem = new JMenuItem("公众号");
        //将每一个选项下的条目添加到对应的选项中
        fuctionJMenu.add(replayItem);
        fuctionJMenu.add(reloginItem);
        fuctionJMenu.add(closeItem);

        aboutJMenu.add(accountItem);
        //将菜单里面的两个选项添加到菜单中
        jMenuBar.add(fuctionJMenu);
        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(WindowConstants.EXIT_ON_CLOSE);
    }

}

app运行:

import ui.GameJFrame;
import ui.RegisterJFrame;
import ui.loginJFrame;

public class App {
    public static void main(String[] args) {
        //表示程序的启动入口
        //如果我们想要开启一个界面,就创建谁的对象就好了
        new GameJFrame();
//        new RegisterJFrame();
//        new loginJFrame();
    }
}

游戏主界面添加组件

代码
    //初始化图片
    private void initimage() {
        //外循环  --把内循环重复执行了4次
        int number = 1;
        for (int i = 0; i < 4; i++) {
            //内循环  --表示在一行添加4张图片
            for (int j = 0; j < 4; j++) {
                //1.创建一个Jlabel的对象(管理容器)
                JLabel JLabel = new JLabel(new ImageIcon("E:\\\\tool\\\\IDEA-java\\\\java代码\\\\routing\\\\image\\\\animal\\\\animal3\\\\" + number +".jpg"));
                //2.指定图片的位置
                JLabel.setBounds(105 * i,105 * j,105,105);
                //3.把管理容器添加到界面中
                this.getContentPane().add(JLabel);
                number++;
            }
        }

App 运行

import ui.GameJFrame;
import ui.RegisterJFrame;
import ui.loginJFrame;

public class App {
    public static void main(String[] args) {
        //表示程序的启动入口
        //如果我们想要开启一个界面,就创建谁的对象就好了
        new GameJFrame();
//        new RegisterJFrame();
//        new loginJFrame();
    }
}

5、打乱图片顺序

练习

打乱一维数组中的数据

int[] tempArr={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

要求:打乱一维数组中的数据,并按照4个一组的方式添加到二维数组中。

解法一:

package test;

import java.util.Random;

public class test1 {
    public static void main(String[] args) {
        //1.定义一个一维数组
        int[] temArr = {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 < temArr.length; i++) {
            //获取到随机索引
            int index = r.nextInt(temArr.length);
            //拿着每一个元素跟随机索引上的数据进行交换
            int temp = temArr[i];
            temArr[i] = temArr[index];
            temArr[index] = temp;
        }
        //3.遍历数组
        for (int i = 0; i < temArr.length; i++) {
            System.out.print(temArr[i] + " ");
        }
        System.out.println();

        //4.创建一个二维数组
        int[][] data = new int[4][4];

        //5.给二维数组添加数据
        //解法一:
        //遍历一维数组tempArr得到每一个元素,把每一个元素依次添加到数组当中
        for (int i = 0; i < temArr.length; i++) {
            data[i / 4][i % 4] = temArr[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();
        }
    }
}

解法二:

package test;

import java.util.Random;

public class test2 {
    public static void main(String[] args) {
        //1.定义一个一维数组
        int[] temArr = {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 < temArr.length; i++) {
            //获取到随机索引
            int index = r.nextInt(temArr.length);
            //拿着每一个元素跟随机索引上的数据进行交换
            int temp = temArr[i];
            temArr[i] = temArr[index];
            temArr[index] = temp;
        }
        //3.遍历数组
        for (int i = 0; i < temArr.length; i++) {
            System.out.print(temArr[i] + " ");
        }
        System.out.println();

        //4.创建一个二维数组
        int[][] data = new int[4][4];

        //5.给二维数组添加数据
        //解法二:
        //遍历二维数组,给里面的每一个数据赋值
        int index = 0;
        for (int i = 0; i < data.length; i++) {
            for (int j = 0; j < data[i].length; j++) {
                data[i][j] = temArr[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();
        }
    }
}


在GameJFrame编写

package ui;

import javax.swing.*;
import java.util.Random;

public class GameJFrame extends JFrame {
    //JFrame 界面,窗体
    //子类呢?也表示界面,窗体
    //规定:GameJFrame这个界面表示的就是游戏的主界面
    //以后跟游戏相关的所有逻辑都写在这个类中

    //创建一个二维数组
    //目的:加载图片
    int[][] data = new int[4][4];
    public GameJFrame(){
        //初始化界面
        initJFrame();

        //初始化菜单
        initJMenuBar();

        //初始化数据(打乱)
        initdata();


        //初始化图片(根据打乱之后的数据结果加载图片)
        initimage();


        //让界面显示出来,最后写m
        this.setVisible(true);
    }


    //---------------------------------- ---------------------
    private void initdata() {
        //1.定义一个一维数组
        int[] temArr = {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 < temArr.length; i++) {
            //获取到随机索引
            int index = r.nextInt(temArr.length);
            //拿着每一个元素跟随机索引上的数据进行交换
            int temp = temArr[i];
            temArr[i] = temArr[index];
            temArr[index] = temp;
        }

        //3.给二维数组添加数据
        //遍历一维数组tempArr得到每一个元素,把每一个元素依次添加到数组当中
        for (int i = 0; i < temArr.length; i++) {
            data[i / 4][i % 4] = temArr[i];
        }

    }




    //初始化图片
    private void initimage() {
        //外循环  --把内循环重复执行了4次
        for (int i = 0; i < 4; i++) {
            //内循环  --表示在一行添加4张图片
            for (int j = 0; j < 4; j++) {
                //获取当前要加载图片的序号
                int num = data[i][j];
                //创建一个Jlabel的对象(管理容器)
                JLabel JLabel = new JLabel(new ImageIcon("E:\\\\tool\\\\IDEA-java\\\\java代码\\\\routing\\\\image\\\\animal\\\\animal3\\\\" + num +".jpg"));
                //指定图片的位置
                JLabel.setBounds(105 * i,105 * j,105,105);
                //把管理容器添加到界面中
                this.getContentPane().add(JLabel);
            }
        }

//------------------------------------------------------

    }


    private void initJMenuBar() {
        //初始化菜单
        //创建整个的菜单对象
        JMenuBar jMenuBar = new JMenuBar();
        //创建菜单上面的两个选项的对象  (功能  关于我们)
        JMenu fuctionJMenu = new JMenu("功能");
        JMenu aboutJMenu = new JMenu("关于我们");
        //创建选项下面的条目对象
        JMenuItem replayItem = new JMenuItem("重新游戏");
        JMenuItem reloginItem = new JMenuItem("重新登录");
        JMenuItem closeItem = new JMenuItem("关闭游戏");

        JMenuItem accountItem = new JMenuItem("公众号");
        //将每一个选项下的条目添加到对应的选项中
        fuctionJMenu.add(replayItem);
        fuctionJMenu.add(reloginItem);
        fuctionJMenu.add(closeItem);

        aboutJMenu.add(accountItem);
        //将菜单里面的两个选项添加到菜单中
        jMenuBar.add(fuctionJMenu);
        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(WindowConstants.EXIT_ON_CLOSE);

        //取消默认的居中位置,只有取消了才会按照XY轴的形式添加组件
        this.setLayout(null);


    }

}

App 测试

import ui.GameJFrame;
import ui.RegisterJFrame;
import ui.loginJFrame;

public class App {
    public static void main(String[] args) {
        //表示程序的启动入口
        //如果我们想要开启一个界面,就创建谁的对象就好了
        new GameJFrame();
//        new RegisterJFrame();
//        new loginJFrame();
    }
}

现在就每次运行的结果都不一样了

6、事件

1、动作监听

创建myjFrame 界面

package test;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

public class myjFrame extends JFrame implements ActionListener {
    //创建第一个按钮对象
    JButton jbt1 = new JButton("点我啊");

    //创建第二个按钮对象
    JButton jbt2 = new JButton("再点我啊");


    public myjFrame() {
        JFrame jFrame = new JFrame();
        //设置界面的宽高
        jFrame.setSize(603,680);

        //设置界面的标题
        jFrame.setTitle("事件演示");

        //设置界面置顶
        jFrame.setAlwaysOnTop(true);

        //设置界面居中
        jFrame.setLocationRelativeTo(null);

        //设置关闭模式
        jFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        //取消默认居中模式,只有取消了,才可以按照xy轴的形式添加组件
        jFrame.setLayout(null);


        //设置位置和宽高
        jbt1.setBounds(0,0,100,50);
        jbt1.addActionListener(this);


        //设置位置和宽高
        jbt2.setBounds(0,0,100,50);
        jbt2.addActionListener(this);

        //把按钮添加到界面
        this.getContentPane().add(jbt1);
        this.getContentPane().add(jbt2);


        this.setVisible(true);


    }

    @Override
    public void actionPerformed(ActionEvent e) {
        //对当前的按钮进行判断

        //获取当前被操作的哪个按钮对象
        Object source = e.getSource();
        if (source == jbt1) {
            jbt1.setSize(200,200);
        }else if (source == jbt2) {
            Random r = new Random();
            jbt2.setLocation(r.nextInt(500),r.nextInt(500));
        }
    }
}

测试类:test4

package test;

public class test4 {
    public static void main(String[] args) {
        new myjFrame();
    }
}

2、鼠标监听机制

创建myjFrame2 界面

package test;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Random;

public class myjFrame2 extends JFrame implements MouseListener {

    //创建一个按钮对象
    JButton jtb1 = new JButton("点我啊");

    public myjFrame2(){
        //设置界面的宽高
        this.setSize(603, 680);
        //设置界面的标题
        this.setTitle("拼图单机版 v1.0");
        //设置界面置顶
        this.setAlwaysOnTop(true);
        //设置界面居中
        this.setLocationRelativeTo(null);
        //设置关闭模式
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        //取消默认的居中放置,只有取消了才会按照XY轴的形式添加组件
        this.setLayout(null);

        //给按钮设置位置和宽高
        jtb1.setBounds(0,0,100,50);
        //给按钮绑定鼠标事件
        jtb1.addMouseListener(this);



        //那按钮添加到整个界面当中
        this.getContentPane().add(jtb1);

        //让整个界面显示出来
        this.setVisible(true);
    }


    @Override
    public void mouseClicked(MouseEvent e) {
        System.out.println("单击");
    }

    @Override
    public void mousePressed(MouseEvent e) {
        System.out.println("按下不松");
    }

    @Override
    public void mouseReleased(MouseEvent e) {
        System.out.println("松开");
    }

    @Override
    public void mouseEntered(MouseEvent e) {
        System.out.println("划入");
    }

    @Override
    public void mouseExited(MouseEvent e) {
        System.out.println("划出");
    }
}

测试:test4

package test;

public class test4 {
    public static void main(String[] args) {
        new myjFrame2();
    }
}

3、键盘监听

创建界面myjFrame3

package test;

import javax.swing.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class myjFrame3 extends JFrame implements KeyListener {
    public myjFrame3(){
        //设置界面的宽高
        this.setSize(603, 680);
        //设置界面的标题
        this.setTitle("拼图单机版 v1.0");
        //设置界面置顶
        this.setAlwaysOnTop(true);
        //设置界面居中
        this.setLocationRelativeTo(null);
        //设置关闭模式
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        //取消默认的居中放置,只有取消了才会按照XY轴的形式添加组件
        this.setLayout(null);

        //给整个窗体添加键盘监听
        this.addKeyListener(this);


        //让界面显示出来
        this.setVisible(true);



    }

    @Override
    public void keyTyped(KeyEvent e) {

    }

    @Override
    public void keyPressed(KeyEvent e) {
        System.out.println("按下不松");
    }

    @Override
    public void keyReleased(KeyEvent e) {
        System.out.println("松开按键");

        //获取键盘上每一个按键的编号
        int code = e.getKeyCode();
        System.out.println(code);
    }
}

测试:test4

package test;

public class test4 {
    public static void main(String[] args) {

        new myjFrame3();
    }
}

7、美化界面

  • 1.将15张小图片移动到界面的中央偏下方

  • 2.添加背景图片

    细节:代码中后添加的,塞在下方

  • 3.添加图片的边框

    jLabel.setBorder(new BevelBorder(1));

  • 4.优化路径

    从盘符开始的:绝对路径

    非盘符开始的:相对路径

修改游戏界面:GameJFrame

package ui;

import javax.swing.*;
import javax.swing.border.BevelBorder;
import java.util.Random;

public class GameJFrame extends JFrame {
    //JFrame 界面,窗体
    //子类呢?也表示界面,窗体
    //规定:GameJFrame这个界面表示的就是游戏的主界面
    //以后跟游戏相关的所有逻辑都写在这个类中

    //创建一个二维数组
    //目的:加载图片
    int[][] data = new int[4][4];
    public GameJFrame(){
        //初始化界面
        initJFrame();

        //初始化菜单
        initJMenuBar();

        //初始化数据(打乱)
        initdata();


        //初始化图片(根据打乱之后的数据结果加载图片)
        initimage();


        //让界面显示出来,最后写m
        this.setVisible(true);
    }


    //---------------------------------- ---------------------
    private void initdata() {
        //1.定义一个一维数组
        int[] temArr = {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 < temArr.length; i++) {
            //获取到随机索引
            int index = r.nextInt(temArr.length);
            //拿着每一个元素跟随机索引上的数据进行交换
            int temp = temArr[i];
            temArr[i] = temArr[index];
            temArr[index] = temp;
        }

        //3.给二维数组添加数据
        //遍历一维数组tempArr得到每一个元素,把每一个元素依次添加到数组当中
        for (int i = 0; i < temArr.length; i++) {
            data[i / 4][i % 4] = temArr[i];
        }

    }




    //初始化图片
    private void initimage() {

        //外循环  --把内循环重复执行了4次
        for (int i = 0; i < 4; i++) {
            //内循环  --表示在一行添加4张图片
            for (int j = 0; j < 4; j++) {
                //获取当前要加载图片的序号
                int num = data[i][j];
                //创建一个Jlabel的对象(管理容器)
                JLabel JLabel = new JLabel(new ImageIcon("E:\\\\tool\\\\IDEA-java\\\\java代码\\\\routing\\\\image\\\\animal\\\\animal3\\\\" + num +".jpg"));
                //指定图片的位置
                JLabel.setBounds(105 * i + 83,105 * j + 134,105,105);
                //给图片添加边款
                JLabel.setBorder(new BevelBorder(1));

                //把管理容器添加到界面中
                this.getContentPane().add(JLabel);
            }
        }

        //添加背景图片
        JLabel backgroup = new JLabel(new ImageIcon("E:\\tool\\IDEA-java\\java代码\\routing\\image\\background.png"));
        backgroup.setBounds(40,40,508,560);
        //把背景图片添加到界面当中
        this.getContentPane().add(backgroup);

//------------------------------------------------------

    }


    private void initJMenuBar() {
        //初始化菜单
        //创建整个的菜单对象
        JMenuBar jMenuBar = new JMenuBar();
        //创建菜单上面的两个选项的对象  (功能  关于我们)
        JMenu fuctionJMenu = new JMenu("功能");
        JMenu aboutJMenu = new JMenu("关于我们");
        //创建选项下面的条目对象
        JMenuItem replayItem = new JMenuItem("重新游戏");
        JMenuItem reloginItem = new JMenuItem("重新登录");
        JMenuItem closeItem = new JMenuItem("关闭游戏");

        JMenuItem accountItem = new JMenuItem("公众号");
        //将每一个选项下的条目添加到对应的选项中
        fuctionJMenu.add(replayItem);
        fuctionJMenu.add(reloginItem);
        fuctionJMenu.add(closeItem);

        aboutJMenu.add(accountItem);
        //将菜单里面的两个选项添加到菜单中
        jMenuBar.add(fuctionJMenu);
        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(WindowConstants.EXIT_ON_CLOSE);

        //取消默认的居中位置,只有取消了才会按照XY轴的形式添加组件
        this.setLayout(null);


    }

}

App 运行

import ui.GameJFrame;
import ui.RegisterJFrame;
import ui.loginJFrame;

public class App {
    public static void main(String[] args) {
        //表示程序的启动入口
        //如果我们想要开启一个界面,就创建谁的对象就好了
        new GameJFrame();
//        new RegisterJFrame();
//        new loginJFrame();
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1487366.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI企业发力智慧物流 HEGERLS四向车开启新一代托盘柔性物流解决方案

不论自动仓储、智能仓储&#xff0c;解决方案都需要更加平民化&#xff0c;普惠更多企业。柔性灵活、易于部署和扩展、初期投入成本低的方案一定是其中的重点。要实现这些特点&#xff0c;最重要的是硬件要做到标准化、软件要模块化&#xff0c;让仓储设备可以即插即用。凭借柔…

三维可视化技术在设备管理系统中的应用

随着科技的进步&#xff0c;传统的设备管理方法已经不能满足现代企业的需求。为了更高效地管理资产&#xff0c;设备管理系统开始采用三维可视化动态技术。这种技术不仅能够帮助用户快速找到相应的设备&#xff0c;还能够展示设备的现场位置、所处环境、关联设备以及设备参数等…

密钥加密机的工作原理

密钥加密机是信息安全领域中不可或缺的核心设备&#xff0c;它承担着保护通信内容、确保数据完整性以及验证信息发送方身份等重要任务。随着信息技术的迅猛发展&#xff0c;密钥加密机的作用愈发凸显&#xff0c;其安全性和可靠性直接关系到国家安全、商业机密和个人隐私等多个…

Ubuntu20安装zabbix-agent2,对接zabbix 6.4

在Ubuntu 20.04 LTS上安装Zabbix Agent 2并与Zabbix Server 6.4对接&#xff0c;请按照以下步骤操作&#xff1a; 更新系统&#xff1a; sudo apt update sudo apt upgrade 添加Zabbix官方仓库&#xff1a; 首先&#xff0c;需要将Zabbix的官方存储库添加到你的系统中以获取Za…

U盘无法读取?轻松掌握正确解决方法!

“为什么我的u盘插入电脑后会显示无法读取呢&#xff1f;想查看一些比较重要的文件&#xff0c;但就是无法读取U盘&#xff0c;想问问大家&#xff0c;我应该怎么操作呢&#xff1f;” U盘作为一种便捷的数据存储设备&#xff0c;广泛应用于我们的日常生活和工作中。然而&#…

探索前景:机器学习中常见优化算法的比较分析

目录 一、介绍 二、技术背景 三、相关代码 四、结论 一、介绍 优化算法在机器学习和深度学习中至关重要&#xff0c;可以最小化损失函数&#xff0c;从而改善模型的预测。每个优化器都有其独特的方法来导航损失函数的复杂环境以找到最小值。本文探讨了一些最常见的优化算法&…

程序员如何选择职业赛道?

程序员选择职业赛道就像是在一个充满挑战和机遇的迷宫中探索。不同的职业赛道代表着不同的路径&#xff0c;每条路径都有其独特的风景和挑战。我愿意为大家提供一些关于如何选择职业赛道的建议。本文将分为几个部分&#xff0c;包括了解自己、了解行业、职业规划、技能提升和持…

阿里云服务器4核8G配置多少钱?来看看,不看白不看!

阿里云服务器4核8g配置多少钱一年&#xff1f;1个月费用多少&#xff1f;云服务器u1实例3折优惠价955.58元一年&#xff0c;计算型c7云服务器4核8G价格2944.79元一年。4核8G服务器按月购买比较贵&#xff0c;经济型e实例4核8G配置1个月216元&#xff0c;通用算力型u1服务器336.…

自动化构建平台(四)Linux搭建私有CI/CD工具之Jenkins的安装

文章目录 前言一、Jenkins本地安装1、使用war文件安装2、使用yum或者app-get安装 二、docker安装Jenkins三、Jenkins登录、配置操作总结 前言 在CD领域&#xff0c;Jenkins应该是元老级别的存在&#xff0c;很多现代的devs平台多少都能看到Jenkins的影子&#xff0c;但是Jenki…

Nucleic Acids Research | scATAC-seq+CUTTag探究关键转录因子对视网膜细胞分化的调控作用

在中枢神经系统发育过程中&#xff0c;多能神经祖细胞如何产生不同的神经细胞类型仍然知之甚少。最近的scRNA-seq研究已经描绘了包括神经视网膜在内的许多神经系统中单个神经细胞类型的发育轨迹。进一步了解神经细胞多样性的形成需要了解表观遗传景观如何沿着个体细胞谱系变化以…

Java中继承的作用及解析

在 Java 中&#xff0c;继承是一种非常重要的面向对象编程特性。它的主要作用包括以下几个方面&#xff1a; 代码复用&#xff1a;通过继承&#xff0c;子类可以复用父类的代码&#xff0c;包括属性和方法。这样可以避免重复编写相同的代码&#xff0c;提高代码的复用性和可维护…

Qt/C++音视频开发67-保存裸流加入sps/pps信息/支持264/265裸流/转码保存/拉流推流

一、前言 音视频组件除了支持保存MP4文件外&#xff0c;同时还支持保存裸流即264/265文件&#xff0c;以及解码后最原始的yuv文件。在实际使用过程中&#xff0c;会发现部分视频文件保存的裸流文件&#xff0c;并不能直接用播放器播放&#xff0c;查阅资料得知原来是缺少sps/p…

开源问答平台网站源码系统 带完整的搭建教程

互联网的快速发展&#xff0c;用户对于信息的需求日益增长。问答平台以其独特的形式&#xff0c;让用户能够快速地找到答案、分享经验和交流想法。然而&#xff0c;市场上的问答平台大多数都是封闭的&#xff0c;不仅限制了用户的自由度和参与度&#xff0c;也增加了开发者和运…

C 嵌入式系统设计模式 19:保护调用模式

本书的原著为&#xff1a;《Design Patterns for Embedded Systems in C ——An Embedded Software Engineering Toolkit 》&#xff0c;讲解的是嵌入式系统设计模式&#xff0c;是一本不可多得的好书。 本系列描述我对书中内容的理解。本文章描述嵌入式并发和资源管理模式之五…

Linux服务器搭建超简易跳板机连接阿里云服务器

简介 想要规范内部连接阿里云云服务器的方式&#xff0c;但是最近懒病犯了&#xff0c;先搞一个简易式的跳板机过渡一下&#xff0c;顺便在出一个教程&#xff0c;其他以后再说&#xff01; 配置方法 创建密钥 登录阿里云&#xff0c;找到云服务器ECS控制台&#xff0c;点击…

Unity 脚本-生命周期常用函数

在Unity中&#xff0c;万物皆是由组件构成的。 右键创建C&#xff03;脚本&#xff0c;拖动脚本到某物体的组件列表。 生命周期相关函数 using System.Collections; using System.Collections.Generic; using UnityEngine;// 必须要继承 MonoBehaviour 才是一个组件 // 类名…

分付在哪些商户可以使用消费,微信分付怎么提取出来到余额上面来?

分付是一款信用支付产品&#xff0c;用户可以使用分付进行线上线下的消费支付。下面是使用分付的一些方法&#xff1a; - 开通分付&#xff1a;在微信中搜索并开通分付服务&#xff0c;按照提示完成实名认证和绑定银行卡等操作。 - 线上支付&#xff1a;在支持分付的线上商户…

《手把手教你》系列技巧篇(十五)-java+ selenium自动化测试-元素定位大法之By xpath中卷(详细教程)

1.简介 按宏哥计划&#xff0c;本文继续介绍WebDriver关于元素定位大法&#xff0c;这篇介绍定位倒数二个方法&#xff1a;By xpath。xpath 的定位方法&#xff0c; 非常强大。 使用这种方法几乎可以定位到页面上的任意元素。 2.什么是xpath&#xff1f; xpath 是XML Path的…

六、矩阵问题

73、矩阵置零&#xff08;中等&#xff09; 题目描述 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&#xff1a…

OpenAI工作环境曝光:高薪背后的996;Quora的转变:由知识宝库至信息垃圾场

&#x1f989; AI新闻 &#x1f680; OpenAI工作环境曝光&#xff1a;高薪背后的996 摘要&#xff1a;近日&#xff0c;多位OpenAI匿名员工在求职网站Glassdoor上披露了公司的工作环境和公司文化&#xff0c;包括高薪水和优厚的福利待遇&#xff0c;但同时伴随着996的加班文化…