首页 > 其他分享 >第六周

第六周

时间:2024-08-10 17:28:22浏览次数:4  
标签:java 界面 第六周 import new login public

完成内部类学习并进行了简单的项目练习;
学会了容器的部分用法,做简单的小游戏

点击查看代码
package ui;
import javax.swing.*;
import javax.swing.border.BevelBorder;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;
//游戏界面搭建
public class GameJFrame extends JFrame implements KeyListener ,ActionListener {
    //创建二维数组,因为要多次使用做成员变量
    int[][] date = new int[4][4];
    //x,y为二维数组的位置
    int x = 0;
    int y = 0;
    //win为正确图片排列位置
    int[][] win = new int[][]{
            {0, 1, 2, 3},
            {4, 5, 6, 7},
            {8, 9, 10, 11},
            {12, 13, 14, 15}
    };
    //用于记录步数
    int count = 0;
    //创建功能选项的条目
    JMenuItem replayItem = new JMenuItem("重新开始");
    JMenuItem reLoginItem = new JMenuItem("重新登录");
    JMenuItem closeItem = new JMenuItem("关闭游戏");
    JMenuItem accountItem = new JMenuItem("公众号");

    //空参构造
    public GameJFrame() {
        //初始化主界面
        initJFrame();
        //初始化菜单
        initJMenuBar();
        //初始化数据(打乱图片)
        initDate();
        //初始化图片
        initImage();



        //设置主界面显现
        this.setVisible(true);
    }
    //初始化数据(打乱图片)
    private void initDate() {
        int[] tempArray = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
        //将一维数组打乱
        Random r = new Random();
        for (int i = 0; i < tempArray.length; i++) {
            int index = r.nextInt(tempArray.length);
            int temp = tempArray[i];
            tempArray[i] = tempArray[index];
            tempArray[index] = temp;
        }
        //将打乱的一维数组放入二维数组中
        for (int i = 0; i < tempArray.length; i++) {
            //空白图片的位置
            if (tempArray[i] == 15) {
                x = i / 4;
                y = i % 4;
            }
            date[i / 4][i % 4] = tempArray[i];
        }
    }

    //初始化图片
    private void initImage() {
        //清空以前图片
        this.getContentPane().removeAll();


        //判断是否胜利
        if (victory()){
            //创建容器管理图片
            JLabel panel = new JLabel(new ImageIcon("D:\\java\\案例\\formal\\puzzlegame\\src\\photo1\\th.jpg"));
            panel.setBounds(203,283,197,73);
            this.getContentPane().add(panel);
        }


        //创建容器管理文字
        JLabel stepCount = new JLabel("步数: "+ count);
        stepCount.setBounds(50,20,100,20);
        this.getContentPane().add(stepCount);


        //通过循环添加图片
        //循环列
        for(int i=0;i<4;i++){
            //添加行的图片
            for(int j=0;j<4;j++){
                //选用第num个图片
                int num = date[i][j];
                //创建一个图片Image对象
                ImageIcon icon = new ImageIcon("D:\\java\\案例\\formal\\puzzlegame\\src\\photo1\\"+num+".png");
                //创建一个Jabel对象
                JLabel label = new JLabel(icon);
                //指定图片的位置,xy看左上角的坐标
                label.setBounds(105*j + 83, 105*i + 134, 105,105);
                //添加边框
                //1是让图片凹进去
                //0是让图片凸出来
                label.setBorder(new BevelBorder(1));
                //把管理容器添加到主界面中
                this.getContentPane().add(label);
            }
        }


        //添加背景图片,在最后放,如果先设置因为图片较大覆盖打乱的图片
        ImageIcon icon1 = new ImageIcon("D:\\java\\案例\\formal\\puzzlegame\\src\\photo1\\112.jpg");
        JLabel label1 = new JLabel(icon1);
        label1.setBounds(40,40,508,560);
        this.getContentPane().add(label1);
        //刷新界面
        this.getContentPane().repaint();
    }


    //初始化界面方法
    private void initJFrame() {
        //设置主界面的宽高
        this.setSize(603, 680);
        //设置主界面标题
        this.setTitle("拼图单机版 v1.0");
        //设置主界面置顶
        this.setAlwaysOnTop(true);
        //设置主界面居中
        this.setLocationRelativeTo(null);
        //设置主界面关闭
        this.setDefaultCloseOperation(3);
        //取消默认的居中方式,只有取消才能按照xy轴方式添加组件
        this.setLayout(null);
        //在界面添加键盘接听事件
        this.addKeyListener(this);
    }






    //初始化菜单方法
    private void initJMenuBar() {
        //设置菜单
        //创建菜单对象
        JMenuBar menuBar = new JMenuBar();
        //创建菜单上的选项对象(功能,关于我们)
        JMenu functionJMenu = new JMenu("功能");
        JMenu aboutJMenu = new JMenu("关于我们");





        //将条目添加到选项中
        functionJMenu.add(replayItem);
        functionJMenu.add(reLoginItem);
        functionJMenu.add(closeItem);

        aboutJMenu.add(accountItem);


        //给条目绑定事件
        replayItem.addActionListener(this);
        reLoginItem.addActionListener(this);
        closeItem.addActionListener(this);
        accountItem.addActionListener(this);


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


        //将菜单添加到主界面中
        this.setJMenuBar(menuBar);
    }

    @Override
    public void keyTyped(KeyEvent e) {
    }
//按下按键不送调用这个方法
    @Override
    public void keyPressed(KeyEvent e) {
        int code = e.getKeyCode();
        if (code == 65) {
            //把界面所有图片删除
            this.getContentPane().removeAll();
            //加载完整图片
            JLabel all = new JLabel(new ImageIcon("D:\\java\\案例\\formal\\puzzlegame\\src\\photo1\\all.jpg"));
            all.setBounds(83,134,420,420);
            this.getContentPane().add(all);
            //加载背景图片
            ImageIcon icon1 = new ImageIcon("D:\\java\\案例\\formal\\puzzlegame\\src\\photo1\\112.jpg");
            JLabel label1 = new JLabel(icon1);
            label1.setBounds(40,40,508,560);
            this.getContentPane().add(label1);
            this.getContentPane().repaint();
        }
    }
    //松开按键
    @Override
    public void keyReleased(KeyEvent e) {
        //胜利之后不能再移动
        if(victory()){
            initImage();
            return;
        }

        int code = e.getKeyCode();
        //左移
        if (code == 37) {
            //为最左方
            if(y==0){
                return;
            }
            //交换位置
            date[x][y] = date[x][y-1] ;
            date[x][y-1] = 15;
            //交换后空白图片x+1,y不变
            y--;
            count++;
            //加载图片
            initImage();
        }
        //上移
        else if (code == 38) {
            //为最下方
            if(x==0){
                return;
            }
            //交换位置
            date[x][y] = date[x-1][y] ;
            date[x-1][y] = 15;
            //交换后空白图片x+1,y不变
            x--;
            count++;
            //加载图片
            initImage();
        }
        //右移
        else if (code == 39) {
            //为最右方
            if(y==3){
                return;
            }
            //交换位置
            date[x][y] = date[x][y+1] ;
            date[x][y+1] = 15;
            //交换后空白图片x+1,y不变
            y++;
            count++;

            //加载图片
            initImage();
        }
        //下移
        else if (code == 40) {
            //为最下方
            if(x==3){
                return;
            }
            //交换位置
            date[x][y] = date[x+1][y] ;
            date[x+1][y] = 15;
            //交换后空白图片x+1,y不变
            x++;
            count++;

            //加载图片
            initImage();
        }
        else if (code == 65) {
            initImage();
        }
        else if (code == 87) {
            date = new int[][]{
                    {0,1,2,3},
                    {4,5,6,7},
                    {8,9,10,11},
                    {12,13,14,15}
            } ;
            initImage();
        }
    }

    //判断date数组是否和win相同及胜利判断
    public boolean victory(){
        for(int i=0;i<date.length;i++){
            for(int j=0;j<date[i].length;j++){
                if(date[i][j] != win[i][j]){
                    return false;
                }
            }
        }
        //因为胜利之x=3,y=3,防止出现bug
        x = 3;
        y = 3;
        return true;
    }

    //事件触发
    @Override
    public void actionPerformed(ActionEvent e) {
        //获取当前被点击的条目对象
        Object obj  = e.getSource();
        //判断
        if(obj == replayItem){
            System.out.println("重新开始");
            //打乱二维数据中数组
            initDate();
            //计数器清零,因为计数器在加载图片中显示所以要先清零在加载图片
            count = 0;
            //加载图片
            initImage();

        }
        else if(obj == reLoginItem){
            System.out.println("重新登陆");
            //关闭当前界面
            this.setVisible(false);
            //打开登陆界面
            new LoginJFrame();

        }else if(obj == closeItem){
            System.out.println("关闭游戏");
            //关闭虚拟机
            System.exit(0);
        }
        else if(obj == accountItem){
            System.out.println("公众号");
            //创建一个弹窗对象
            JDialog jd = new JDialog();
            //创建一个管理图片的容器
            JLabel jLabel = new JLabel(new ImageIcon("D:\\java\\案例\\formal\\puzzlegame\\src\\photo1\\vx.jpg"));
            jLabel.setBounds(0,0,623,619);
            jd.getContentPane().add(jLabel);
            //设置弹窗大小
            jd.setSize(623,619);
            //设置弹窗置顶
            jd.setAlwaysOnTop(true);
            //设置弹窗居中
            jd.setLocationRelativeTo(null);
            //弹窗不关闭无法操作其他界面
            jd.setModal(true);
            //显示弹窗
            jd.setVisible(true);


        }
    }
}
点击查看代码
package ui;
import javax.swing.*;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import java.util.Objects;
//登录界面搭建
public class LoginJFrame extends JFrame implements MouseListener {
    //创建集合添加用户名与对应的密码
    static ArrayList<User> allUers = new ArrayList<User>();

    static {
        allUers.add(new User("张三", "123"));
        allUers.add(new User("李四", "1234"));
    }

    //创建输入的验证码容器,因为其他方法要用所以作为成员变量
    JLabel ringtCode = new JLabel();
    //创建登录,注册按钮,同上
    JButton login = new JButton();
    JButton register = new JButton();
    //创建用户名输入框
    JTextField username = new JTextField();
    //密码输入框
    JPasswordField password = new JPasswordField();
    //验证码输入框
    JTextField code = new JTextField();

    //登陆界面无参构造
    public LoginJFrame() {
        //初始化界面
        initJframe ();
        //在登陆界面添加内容
        initView();


        //设置登陆界面显现
        this.setVisible(true);
    }

    private void initJFrame() {
    }

    //在登陆界面添加内容
    private void initView() {
        //添加用户名文字图片

        //创建容器管理图片
        JLabel usernameText = new JLabel(new ImageIcon("D:\\java\\案例\\formal\\puzzlegame\\src\\login\\用户名.png"));
        //设置大小位置
        usernameText.setBounds(116, 135, 47, 17);
        //添加到登陆界面
        this.getContentPane().add(usernameText);

        //添加用户名的输入框


        //设置大小位置
        username.setBounds(195, 134, 200, 30);
        //添加到登陆界面
        this.getContentPane().add(username);

        //添加密码文字图片

        //创建容器管理图片
        JLabel passwordText = new JLabel(new ImageIcon("D:\\java\\案例\\formal\\puzzlegame\\src\\login\\密码.png"));
        //设置大小位置
        passwordText.setBounds(130, 195, 32, 16);
        //添加到登录界面
        this.getContentPane().add(passwordText);

        //添加密码输入框

        //创建输入框
        //设置大小位置
        password.setBounds(195, 195, 200, 30);
        //添加到登陆界面
        this.getContentPane().add(password);

        //验证码提示
        JLabel codeText = new JLabel(new ImageIcon("D:\\java\\案例\\formal\\puzzlegame\\src\\login\\验证码.png"));
        codeText.setBounds(133, 256, 50, 30);
        this.getContentPane().add(codeText);

        //验证码输入框
        code.setBounds(195, 256, 100, 30);
        this.getContentPane().add(code);

        //生成随机验证码
        String codestr = CodeUtil.getCode();
        //将验证码显示在界面上
        ringtCode.setText(codestr);
        //绑定鼠标事件
        ringtCode.addMouseListener(this);
        //设置验证码的大小位置
        ringtCode.setBounds(300, 256, 50, 30);
        //添加到登陆界面上
        this.getContentPane().add(ringtCode);

        //添加登录按钮
        login.setBounds(123, 310, 128, 47);
        login.setIcon(new ImageIcon("D:\\java\\案例\\formal\\puzzlegame\\src\\login\\登录按钮.png"));
        //去除按钮边框
        login.setBorderPainted(false);
        //去除按钮背景
        login.setContentAreaFilled(false);
        //绑定鼠标事件
        login.addMouseListener(this);
        //添加到界面中
        this.getContentPane().add(login);

        //添加注册按钮
        register.setBounds(256, 310, 128, 47);
        register.setIcon(new ImageIcon("D:\\java\\案例\\formal\\puzzlegame\\src\\login\\注册按钮.png"));
        register.setBorderPainted(false);
        register.setContentAreaFilled(false);
        register.addMouseListener(this);
        this.getContentPane().add(register);

        //添加背景图片
        JLabel background = new JLabel(new ImageIcon("D:\\java\\案例\\formal\\puzzlegame\\src\\login\\background.png"));
        background.setBounds(0, 0, 470, 390);
        this.getContentPane().add(background);





    }


    //初始化界面
    public void initJframe(){
        //设置登陆界面宽高
        this.setSize(488, 430);
        //设置登陆界面标题
        this.setTitle("登录");
        //设置登陆界面置顶
        this.setAlwaysOnTop(true);
        //设置登陆界面居中
        this.setLocationRelativeTo(null);
        //设置登陆界面关闭
        this.setDefaultCloseOperation(3);
    }

    //点击
    @Override
    public void mouseClicked(MouseEvent e) {
        //点击登录
        if(e.getSource() == login) {
            //获取用户名与密码输入框中内容
            String usernameInput = username.getText();
            String passwordInput = password.getText();
            //验证码
            String codeInput = code.getText();
            //创建一个User对象
            User user = new User(usernameInput, passwordInput);
            if(codeInput.length() == 0) {
                //创建一个弹窗,输出文字
                showJDialog("验证码不能为空");
            } else if (usernameInput.length()==0||passwordInput.length()==0) {
                showJDialog("用户名或者密码为空");
            } else if (!codeInput.equalsIgnoreCase(ringtCode.getText())) {
                showJDialog("验证码输入错误");
                //判断用户名密码是否正确
            } else if (contains(user)) {
                //关闭当前登陆界面
                this.setVisible(false);
                //打开游戏界面
                new GameJFrame();
            }
            else {
                showJDialog("用户名或密码错误");
            }
            //点击注册
        } else if (e.getSource()==register) {
            showJDialog("当前功能未开放");
            //点击验证码
        } else if (e.getSource()==ringtCode) {
            String code = CodeUtil.getCode();
            ringtCode.setText(code);
        }
    }

    private void showJDialog(String content) {
        //创建弹窗对象
        JDialog jDialog = new JDialog();
        //给弹框设置大小
        jDialog.setSize(200, 150);
        //让弹框置顶
        jDialog.setAlwaysOnTop(true);
        //让弹框居中
        jDialog.setLocationRelativeTo(null);
        //弹框不关闭永远无法操作下面的界面
        jDialog.setModal(true);

        //创建Jlabel对象管理文字并添加到弹框当中
        JLabel warning = new JLabel(content);
        warning.setBounds(0, 0, 200, 150);
        jDialog.getContentPane().add(warning);

        //让弹框展示出来
        jDialog.setVisible(true);
    }

    //按下不送
    @Override
    public void mousePressed(MouseEvent e) {
        if(e.getSource() == login) {
            login.setIcon(new ImageIcon("D:\\java\\案例\\formal\\puzzlegame\\src\\login\\登录按下.png"));

        }else if (e.getSource() == register) {
            register.setIcon(new ImageIcon("D:\\java\\案例\\formal\\puzzlegame\\src\\login\\注册按下.png"));
        }
    }

    //松开按钮
    @Override
    public void mouseReleased(MouseEvent e) {
        if(e.getSource() == login) {
            login.setIcon(new ImageIcon("D:\\java\\案例\\formal\\puzzlegame\\src\\login\\登录按钮.png"));

        }else if (e.getSource() == register) {
            register.setIcon(new ImageIcon("D:\\java\\案例\\formal\\puzzlegame\\src\\login\\注册按钮.png"));
        }
    }

    //鼠标划入
    @Override
    public void mouseEntered(MouseEvent e) {

    }

    //鼠标划出
    @Override
    public void mouseExited(MouseEvent e) {

    }

    //判断用户在集合中是否存在
    public boolean contains (User user) {
        for (int i = 0; i < allUers.size(); i++) {
            User u = allUers.get(i);
            if(user.getName().equals(u.getName()) && user.getPassword().equals(u.getPassword())) {
                return true;
            }
        }
        return false;
    }
}
点击查看代码
package ui;

import java.util.ArrayList;
import java.util.Random;
//登陆界面中生成随机验证工具类
public class CodeUtil {
    public static String getCode(){
        //创建一个集合
        ArrayList<Character> list = new ArrayList<>();
        //将A-Z与a-z放入集合中
        //共52个字符,循环一次添加2个字符
        for (int i = 0; i < 26; i++) {
            list.add((char)('a' + i));
            list.add((char)('A' + i));
        }

        //随机生成四个字母
        String result = "";
        Random r = new Random();
        for(int i = 0; i < 4; i++){
            //从集合中随机抽取4个字母
            result += list.get(r.nextInt(list.size()));
        }

        //随机生成一个数字
        int number = r.nextInt(10);
        //将数字拼接到字母后面
        result = result + number;
        //将字符串变成一个字符数组
        char[] arr = result.toCharArray();
        //生成随机索引
        int index = r.nextInt(arr.length);
        //将数字放到随机索引处
        char ch = arr[4];
        arr[4] = arr[index];
        arr[index] = ch;
        //将字符数组转化为字符串
        String code = new String(arr);
        return code;
    }
}
点击查看代码
package ui;
//登陆界面用户对象
public class User {
    private String name;
    private String password;

    public User() {
    }

    public User(String name, String password) {
        this.name = name;
        this.password = password;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}
点击查看代码
import ui.RegisterJFrame;
import ui.GameJFrame;
import ui.LoginJFrame;
//程序入口
public class App {
    public static void main(String[] args) {
        //new GameJFrame();
        //new RegisterJFrame();
        new LoginJFrame();
    }
}
下周对小学期测试进行准备 并完成pta实验报告

标签:java,界面,第六周,import,new,login,public
From: https://www.cnblogs.com/sbc11/p/18352548

相关文章

  • 2024暑假第六周总结
    Java字符串Java中的String类是处理字符数据的基础类创建字符串字面量创建:Stringstr1="Hello,World!";这是最常用的方式,str1会指向常量池中的字符串。通过new关键字创建:Stringstr2=newString("Hello,World!");这会创建一个新的String对象,即使内容相同,也与常量......
  • 第六周学习报告
    又经过了一周的学习,今天对本周学习进行总结本周学习了Java面向对象进阶内容抽象类和抽象方法抽象类使用abstract关键字声明的类被称为抽象类。抽象类不能被实例化。抽象方法使用abstract关键字声明的方法被称为抽象方法。抽象方法没有方法体,即大括号{}内没有代码实现。抽象......
  • 学习Java第六周
    本周学习——面向对象(下)一、包装类Integer——intLong——longShort——shortByte——byteFloat——floatDouble——doubleCharacter——charBoolean——boolean二、处理对象1.和equals方法Java程序测试两个变量是否相等有两种方式:一种是利用运算符;另一种是利用equals......
  • Java学习记录第六周
    今天在进行数组反转时第一次用了这个代码![](https://img2024.cnblogs.com/blog/3475598/202408/3475598-20240808230516048-1627660110.png)没有考虑到第一个循环只进行一次时,第二个循环进行完一轮了。第二次用了这个代码没有考虑到数组直接赋值会使原先的值丢失,所以最后又定......
  • 第六周
    一、总结关系型数据库相关概念,关系,行,列,主键,惟一键,域。关系Relational:关系就是二维表,表中的行、列次序并不重要行row:表中的每一行,又称为一条记录record列column:表中的每一列,称为属性,字段,域field主键Primarykey:PK,一个或多个字段的组合,用于惟一确定一个记录的......
  • 2023-2024-1学期20232412《网络空间安全导论》第六周学习总结
    教材学习总结初步认知应用安全在不同领域的应用了解身份认证与信任管理的方式认识隐私的定义及隐私保护方法了解云计算、物联网、人工智能的相关知识思维导图教材学习中的问题及解决方法问题1:对差分隐私的知识不够理解解决方式:向ChatGPT询问,寻求清晰的解释问题2:对比特......
  • 学期(2023-2024-1) 学号(20232411)《网络空间安全导论》第六周学习总结
    学期(2023-2024-1)学号(20232411)《网络空间安全导论》第六周学习总结教材学习内容总结本周我学习了《网络空间安全导论》的第六章,其主要讲述了应用安全的概述,一些具体的防御措施和应用安全的一些重点对象。在学习过程中,我总结了如下要点,以思维导图的方式呈现:教材学习中的......
  • 学期 2023-2024-1 20232326《网络空间安全导论》第六周学习总结
    教材学习内容总结教材学习中的问题和解决过程问题1:挑战应答认证协议为什么可以对抗重放攻击?问题1解决方案:百度得知挑战应答认证协议可以对抗重放攻击的原因是因为它引入了挑战和应答的机制。在该协议中,服务端会向客户端发送一个随机的挑战值,客户端必须通过对挑战值进行加密......
  • 20232413《网络》第六周学习总结
    教材学习内容总结教材学习中的问题和解决方案问题一:跨站脚本攻击(XSS)解决方案: 对用户输入进行验证和转义,使用内容安全策略(CSP),避免直接在页面中执行未经验证的用户输入。问题二:跨站请求伪造(CSRF)解决方案:使用CSRF令牌,验证请求来源,确保只有合法的用户可以提交请求。基于AI的学......
  • 2023-2024-1 20232407 《网络》 第六周学习总结
    教材内容学习总结教材学习过程中的问题和解决过程问题1:不清楚零信任模型的优缺点问题1解决方案:询问chatgpt如下零信任模型的优点:增强了数据安全:零信任模型将数据划分成若干部分,对每个部分进行访问控制,让每一次访问都要经过身份验证和授权,从而有效地防止了数据的不当使用和......