Day1——Java拼图游戏

一,项目介绍和界面搭建

1.主界面分析

理解:JFrame相当于创建了一个窗体,JMenuBar就是一个菜单栏,JLabel就相当于一个容器,因为JLabel是管理文字和图片的容器,就比如说你想在JFrame里面放图片或者文字,先创建一个JLabel这样的一个篮子作为载体,把图片或者文字放到篮子里面,一个图片只能放到一个篮子里面,同理,文字也是一样,然后再把JLabel放到JFrame里面。

练习:

1.创建一个游戏主界面(宽603像素,高680像素)

2.创建一个登入界面(宽488像素,高430像素)

3.创建一个注册界面(宽488像素,高500像素)

 

分别创建三个类和一个app.java类来实现各自的功能

extends JFrame:说明他是一个类,继承了JFrame

步骤:1.extends类

2.创建空参构造函数

3.添加对应方法

注意点:

1.属性,对象尽量写在方法外,这样在其他的方法里面也可以调用这个属性

2.用this

2.创建主界面

public class GameJFrame extends JFrame{
    public GameJFrame(){
        this.setTitle("界面title");//标题
        this.setSize(603,680);//大小,宽高
        this.setAlwaysOnTop(true);//界面置顶
        this.setLocationRelativeTo(null);//界面位置居中
        this.setDefaultCloseOperation(2);//关闭方式

        this.setVisible(true);//显示
    }

步骤:

1.extends JFrame:继承JFrame,继承里面的可以继承的方法

2.创建空参构造方法

3.标题,大小,置顶 ,居中,关闭,显示

注意点:

1.居中方式有两种方式:1.setLocationRelativeTo(),居于界面中。2.setLocation(x,y),位置自己定义

2.setAlwaysOnTop(),有0,1,2,3。

  • 0是啥都不做
  • 1是默认关闭方式,默认为1
  • 2是如果开启多个界面,只有关闭最后一个界面,jvm才会停止。
  • 3是关闭任何一个界面,jvm都会停止

1.先创建JMenuBar

2.再创建JMenu

3.最后创建JMenuItem

将JMenuItem放入JMenu,再将JMenu放入JMenuBar里面,add(放入)

二,JMenu——

    public void setJFrame(){
        //1.界面弄好
        this.setTitle("拼图小游戏");//标题
        this.setSize(603,680);//大小,宽高
        this.setAlwaysOnTop(true);//界面置顶
        this.setLocationRelativeTo(null);//界面位置居中
        this.setDefaultCloseOperation(2);//关闭方式

        //2.添加菜单按钮,因为在界面里面显示,直接写在这里
        JMenuBar menuBar = new JMenuBar();

        JMenu menu1 = new JMenu("功能");
        JMenu menu2 = new JMenu("关于我们");

        JMenuItem item11 = new JMenuItem("更换图片");
        JMenuItem item12 = new JMenuItem("重新游戏");
        JMenuItem item13 = new JMenuItem("重新登录");
        JMenuItem item14 = new JMenuItem("关闭游戏");
        JMenuItem item21 = new JMenuItem("公众号");

        menu1.add(item11);
        menu1.add(item12);
        menu1.add(item13);
        menu1.add(item14);

        menu2.add(item21);

        menuBar.add(menu1);
        menuBar.add(menu2);

     
        this.setJMenuBar(menuBar);
    
    }

1.创建了一个新的类setJFrame类,为了设置界面,这样子在主方法里面就可以直接setJFrame()

2.设置菜单或者按钮,必须要先有一个JFrame界面吧,所以JMenuBar或者JButton代码放在界面后面

3.JMenuItem添加(add)进JMenu,将JMenu放入JMenuBar(add)

4.要将JMenuBar添加到JFrame里面去,用的方法不是getContentPane()也不是add(),而是this.setJMenuBar()。

三,图片

图片是由ImageIcon类创建的对象

1.添加图片

    public void initImage(){
        //图片是ImageIcon的对象
        ImageIcon image= new ImageIcon("Puzzlegame\\src\\Image\\image\\girl\\girl1\\1.jpg");
        //创建Jlabel对象(管理图片的容器)
        JLabel jlabel = new JLabel(image);
        //把JLabel放入JFrame
        this.add(jlabel);
    }
  1.  由ImageIcon创建图片对象
  2. 直接将path传入到括号里面,相对路径和绝对路径都可以,/和\\都可以
  3. 再创建JLabel,直接将JLabel里面括号添加文字和图片,试过add方法,不求行
  4. this指的是JFrame界面
  5. this.add(jLabel);

1.1 添加多张图片

1)坐标原点

左x下y

2)怎么按照原点
    public void initImage(){
        //图片是ImageIcon的对象
        ImageIcon image= new ImageIcon("Puzzlegame\\src\\Image\\image\\girl\\girl1\\1.jpg");
        //创建Jlabel对象(管理图片的容器)
        JLabel jlabel = new JLabel(image);
        jlabel.setBounds(0,0,105,105);//指定容器位置,即图片位置
        //把JLabel放入JFrame
        //this.add(jlabel);
        this.getContentPane().add(jlabel);
    }
  1. 容器setBounds(int x ,int y ,int width ,int height)方法;
  2. 原本默认显示正中央
  3. JFrame只是一个大的架子,有一个隐藏容器来显示所有组件
  4. 是JFrame里面的东西,只要创建了JFrame,这个容器就出现了
  5. 通过setLayout(null),取消默认的居中放置,在JFrame里面添加这个方法
  6. 需要在初始化界面的时候就把默认居中取消
 3)最终代码
public void initImage(){
        int number = 1;
        for(int i = 0;i<data.length;i++){
            for(int j = 0;j<data[i].length;j++){
                //图片是ImageIcon的对象
                ImageIcon image= new ImageIcon("Puzzlegame\\src\\Image\\image\\girl\\girl1\\"+number+".jpg");
                number++;//number是可以取到16,如果没有16,则默认加载JLabel加载了一个空白
                //创建Jlabel对象(管理图片的容器)
                JLabel jlabel = new JLabel(image);
                jlabel.setBounds(105*i,105*j,105,105);//指定容器位置,即图片位置
                //把JLabel放入JFrame
                //this.add(jlabel);
                this.getContentPane().add(jlabel);
            }
        
        }
  • 我自己定义了一个data,是二维数组int[4][4],也可以不用定义,一共有1-15张照片,还有一个all.jpg,每一个图片的命名都和数字一一对应,所以可以映射到数字上面,用number来接受这个数字,初始值定义为1,如果没有16,JFrame也会默认加载一个JLabel,去存储一个空白图片

2.打乱图片

public void initImage(){
        for(int i = 0;i<data.length;i++){
            for(int j = 0;j<data[i].length;j++){
                int number = data[i][j];
                //图片是ImageIcon的对象
                ImageIcon image= new ImageIcon("Puzzlegame\\src\\Image\\image\\girl\\girl2\\"+number+".jpg");
                JLabel jlabel = new JLabel(image);
                jlabel.setBounds(105*i,105*j,105,105);//指定容器位置,即图片位置
                //把JLabel放入JFrame
                //this.add(jlabel);
                this.getContentPane().add(jlabel);
            }
        
        }

    }
    //图片数据
    public void initDate(){
        int[] arr = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0};
        Random r = new Random();
        int index = r.nextInt(16);
        for(int i = 0;i<16;i++){
            int temp = arr[i];
            arr[i] = arr[index];
            arr[index] = temp;
        }
        int count = 0;
        for(int i = 0;i<4;i++){
            for(int j = 0;j<4;j++){
                data[i][j]= arr[count];
                count++;
            }
        }
    }

四,事件

  1. 事件源:按钮,图片,窗体...
  2. 事件:某些操作,比如:鼠标单击,鼠标划入...
  3. 绑定事件,当事件源发生了某个事件,则执行某段代码

KeyListener:键盘监听,用键盘进行操作

MouseListener:鼠标监听,用鼠标进行操作

ActionListener :动作监听,简化版,键盘tab和鼠标左键单击

4.1JButton

public class Test {
    public static void main(String[] args) {
        JFrame jFrame = new JFrame();

        jFrame.setTitle("界面title");
        jFrame.setSize(600,500);
        jFrame.setAlwaysOnTop(true);
        jFrame.setLocationRelativeTo(null);
        jFrame.setDefaultCloseOperation(2);
        jFrame.setLayout(null);//xy

        //创建按钮
        JButton jbt = new JButton("按钮名字");
        jbt.setBounds(0,0,100,50);

        //要给添加事件了
        jbt.addActionListener(new MyActionListener());

        jFrame.getContentPane().add(jbt);
        
        jFrame.setVisible(true);
    }
}
  1. 先创建一个JFrame,在JFrame里面添加JButton,直接给JButton添加名字
  2. setBounds(x,y,width,heigth) 

 设置大小位置上面两部就相当于JButton搞完

  1.  再给按钮添加事件JButton.addActionListener()、JButton.addMouseListener()、JButton.addKeyListener()
  2. 添加事件后,就重写接口里面的方法,三个事件都是接口interface

  • 29
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值