JAVA题目笔记(十二) 拼图游戏

一、创建界面:

创建一个603×680像素大小的游戏主界面。

创建一个488×430像素的登录界面

创建一个488×500像素的注册界面

方法代码示例:

        JFrame gameJFrame=new JFrame();  //创建界面对象
        gameJFrame.setSize(603,680);  //设置界面大小   界面默认隐藏
        gameJFrame.setVisible(true);   //显示/隐藏界面    方法参数为boolean变量,true则显示界面,false隐藏。

二、编辑界面

设置界面标题及各种内容。

相关方法示例:

        JFrame jframe=new JFrame();  //创建界面对象 
        jframe.setTitle("游戏标题");  //设置界面标题
        jframe.setAlwaysOnTop(true); //界面置顶
        jframe.setLocationRelativeTo(null);  //设置界面初始位置居中
        jframe.setDefaultCloseOperation(3);  //设置关闭模式  参数为int 
        //0:点关闭啥也不做   1:默认关闭
        //2:若有多个界面则只有在关闭最后一个界面时虚拟机才会终止,前提:每个界面关闭模式都为2
        //3:只要关闭其中一个界面,虚拟机直接停止

三、编辑界面菜单

设置界面中菜单和菜单中的不同功能以及对应的各种条目

相关方法示例:



        JFrame jframe=new JFrame();  //创建界面对象

        //创建 菜单 对象
        JMenuBar jmenuBar=new JMenuBar();

        //创建 菜单选项1 和 菜单选项2 对象
        JMenu functionJMenu=new JMenu("功能");
        JMenu aboutJMenu=new JMenu("关于我们");

        //创建 条目 对象
        JMenuItem relodGame=new JMenuItem("重新开始");
        JMenuItem relogIn=new JMenuItem("重新登录");
        JMenuItem closeGame=new JMenuItem("关闭游戏");

        //创建 条目 对象
        JMenuItem officialAccount=new JMenuItem("公众号");

        //调用方法将条目对象添加到菜单选项1中
        functionJMenu.add(relogIn);
        functionJMenu.add(relodGame);
        functionJMenu.add(closeGame);

        //调用方法将条目对象添加到菜单选项2中
        aboutJMenu.add(officialAccount);

        //将选项添加到菜单中
        jmenuBar.add(functionJMenu);
        jmenuBar.add(aboutJMenu);

        //将菜单添加到界面中
        jframe.setJMenuBar(jmenuBar);


四、添加图片、调整图片位置

添加图片相关方法示例代码:

//创建图片ImageIcon对象 
ImageIcon icon=new ImageIcon("C:\\Users\\DDDic\\IdeaProjects\\PuzzleGame\\image\\animal\\animal3\\3.jpg");
//构造方法参数为图片文件地址

//创建管理容器对象   JLabel 将图片对象icon放入
JLabel jLabel=new Jlabel(icon);

//将容器添加进界面对象jmenuBar中
jmenuBar.add(jLabel);

//指定图片位置




创建图片和管理容器对象代码合并:
JLabel jLabel=new Jlabel(new ImageIcon("C:\\Users\\DDDic\\IdeaProjects\\PuzzleGame\\image\\animal\\animal3\\3.jpg"));

调整图片位置相关代码:

//设置图片位置
//方法参数为:(x坐标,y坐标,图片宽度,图片长度)
jLabel.setBounds(105*j,105*i,105,105); 

//将图片添加入界面中
GameJFrame.getContentPane().add(jLabel);

//getContentPane 方法就是调用下图中红色框表示的容器,将图片加入该容器

调整位置需要在界面初始化代码中增加以下代码:

        this.setAlwaysOnTop(true);  //true 置顶窗口
        this.setLocationRelativeTo(null);  //设置界面初始位置居中


        //取消界面默认的居中放置,将其设置为null,按照x,y轴坐标放置图片
        GameJFrame.setLayout(null);  

原因:图中红色框内是创建界面时自动生成的一个容器,默认状态会将接受的图片或者其他类进行居中放置,因此需要调用方法取消默认的居中放置。

五、添加事件

事件源:按钮/图片/窗体

事件:某些操作  如:鼠标单击  鼠标划入....

监听绑定:当事件源上发生了某个事件,则执行某段代码。

键盘监听:KeyListener      鼠标监听:MouseListener   动作监听:ActionListener

给按钮添加动作事件:

示例代码:

package com.java.ui;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class MyActionListener implements ActionListener {
    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("按钮按下了");
    }

}



package com.java.ui;

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

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


        JFrame jframe=new JFrame();  //创建界面对象
        jframe.setSize(500,500);

        jframe.setLayout(null);

        //创建一个按钮对象
        JButton jtb=new JButton("点击按钮");
        //设置坐标位置
        jtb.setBounds(0,0,100,50);
        //给按钮添加动作监听  方法参数为ActionListener 接口类型,因此需要使用这个接口的实现类 表示触发后执行的代码
        jtb.addActionListener(new MyActionListener());
        //将按钮加入界面中
        jframe.getContentPane().add(jtb);


        jframe.setVisible(true);


    }
}

由于实际情况中,每个按钮功能不一样,且动作监听接口的实现类只会在触发时被调用一次,因此可以采用 匿名内部类的形式进行简化代码:

package com.java.ui;

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

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


        JFrame jframe=new JFrame();  //创建界面对象
        jframe.setSize(500,500);

        jframe.setLayout(null);

        //创建一个按钮对象
        JButton jtb=new JButton("点击按钮");
        //设置坐标位置
        jtb.setBounds(0,0,100,50);
        //给按钮添加动作监听  方法参数为ActionListener 接口类型,
        //因此需要使用这个接口的实现类 表示触发后执行的代码
        jtb.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.out.println("按钮被按咯");
            }
        });
        //将按钮加入界面中
        jframe.getContentPane().add(jtb);


        jframe.setDefaultCloseOperation(3);
        
        jframe.setVisible(true);


    }
}

除此以外还有另一种方式:

package com.java.ui;

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 jtb=new JButton("点击按钮1");
    //创建另一个按钮对象
    JButton jtb2=new JButton("点击按钮2");
    public MyJFrame(){
        this.setSize(500,500);

        this.setLayout(null);

        //设置坐标位置
        jtb.setBounds(0,0,100,50);
        jtb2.setBounds(100,0,100,50);
        //给按钮添加动作监听  方法参数为ActionListener 接口类型,因此需要使用这个接口的实现类 来执行实现类中设定的触发后的执行代码
        //而本类已经是ActionListener接口的实现类,因此this记录的就是本类地址,直接进入本类中对应重写执行代码部分,执行触发代码。
        jtb.addActionListener(this);
        jtb2.addActionListener(this);

        //将按钮加入界面中
        this.getContentPane().add(jtb);
        this.getContentPane().add(jtb2);

        this.setDefaultCloseOperation(3);

        this.setVisible(true);
    }




    @Override
    public void actionPerformed(ActionEvent e) {
        //对当前按钮进行判断
        Random r=new Random();
        Object source=e.getSource();//getSource()方法:获取当前被操作的按钮对象
        if(source==jtb)
            jtb.setSize(200,200);//设置按钮大小
        else if(source==jtb2)
            jtb2.setBounds(r.nextInt(500),r.nextInt(500),100,50);
    }
}
package com.java.ui;

public class Test {
    public static void main(String[] args){
        new MyJFrame();

    }
}

给按钮添加鼠标事件:

package com.java.ui;

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 MyJFrame extends JFrame implements MouseListener {



    public MyJFrame(){

        this.setSize(500,500);

       //创建一个按钮对象
        JButton jtb=new JButton("点击按钮1");

        this.setLayout(null);

        //设置按钮坐标位置
        jtb.setBounds(0,0,100,50);

        //给按钮绑定鼠标监听  本类就是MouseListener接口的实现类,因此直接用this代表实现类
        jtb.addMouseListener(this);

        this.getContentPane().add(jtb);



        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("划出");
    }
}


package com.java.ui;


public class Test {
    public static void main(String[] args){
        new MyJFrame();

    }
}

给窗体添加键盘事件:

package com.java.ui;

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

public class MyJFrame extends JFrame implements KeyListener {



    public MyJFrame(){
        this.setSize(500,500);

        this.setLayout(null);

       //给窗口增加键盘监听
        this.addKeyListener(this);


        this.setVisible(true);
    }


    @Override
    public void keyTyped(KeyEvent e) {

    }

    //若按下不松,则会重复调用KeyPressed方法
    @Override
    public void keyPressed(KeyEvent e) {
        System.out.println("按下");
    }

    //区分键盘按下的按键是哪一个 使用  getKeyCode方法
    //返回的是每个按键的编号
    @Override
    public void keyReleased(KeyEvent e) {
        System.out.println("松开");
        int code=e.getKeyCode();
        System.out.println((char)code);
    }
}

六、为拼图添加背景图片、为图片添加边框

Tips:

在窗口中添加图片,先添加的图片在上方,后添加的图片在下方,因此背景图片需要放在最后添加进窗口。

添加边框代码:

        //先加载的图片在上方,后加载的图片在下面,背景图片放最后。
        ImageIcon icon=new ImageIcon("C:\\Users\\DDDic\\IdeaProjects\\PuzzleGame\\image\\background.png");
        JLabel jbar=new JLabel(icon);
        //添加边框是对容器类JLabel 的对象调用setBorder()方法
        //BevelBorder()是边框类  参数0表示凸起   1表示凹陷
        // 0也可以用 BevelBorder.RAISED 表示   
        // 1也可以用BevelBorder.LOWERED表示
        jbar.setBorder(new BevelBorder(0));  
        jbar.setBounds(40,40,508,560);
        this.getContentPane().add(jbar);

七、代码路径调整

路径种类:

①绝对路径:从盘符开始 :C:\     D:\

②相对路径:不是从盘符开始 : aaa\bbb     在当前项目下去找aaa文件夹,里面去找bbb文件夹

路径转换:

//绝对路径
JLabel jLabel=new JLabel(new ImageIcon("C:\\Users\\DDDic\\IdeaProjects\\PuzzleGame\\image\\animal\\animal3\\"+number+".jpg"));

//相对路径  从模块名字开始image开始(大家都在一个项目里,没有相对的意义,删去项目名)

JLabel jLabel=new JLabel(new ImageIcon("image\\animal\\animal3\\"+number+".jpg"));

八、拼图移动

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值