第一个小项目:拼图小游戏
暂不完善,因为没有链接数据库,用户名和密码只是暂存在集合中

资料

图片资料
整个项目源码

界面展示


代码:

一.主程序(入口)App

import com.qi.ui.GameJFrame;
import com.qi.ui.LoginJFrame;
import com.qi.ui.RegisterJFrame;public class App {public static void main(String[] args) {//        new GameJFrame();new LoginJFrame();
//        new RegisterJFrame();}
}

二.游戏界面 GameJFrame

package com.qi.ui;import javax.swing.*;
import javax.swing.border.BevelBorder;
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 {//获取随机数Random r = new Random();//创建一个二维数组//目的:用来管理数据//加载图片的时候,会根据二维数组中的数据进行加载int[][] data = new int[4][4];//记录空白方块在二维数组中的位置int x = 0;int y = 0;//定义一个变量,记录当前展示图片的路径String path = "image\\animal\\animal3\\";//定义一个二维数组,存储正确的数据int[][] win = {{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12},{13, 14, 15, 0},};//定义变量用来统计步数int step = 0;//创建选项下面的条目对象JMenuItem replayItem = new JMenuItem("重新游戏");JMenuItem reLoginItem = new JMenuItem("重新登录");JMenuItem closeItem = new JMenuItem("关闭游戏");//更换图片:美女,动物,运动选项JMenuItem girl = new JMenuItem("美女");JMenuItem animal = new JMenuItem("动物");JMenuItem sport = new JMenuItem("运动");//关于我们:公众号选项JMenuItem accountItem = new JMenuItem("公众号");//空参构造public GameJFrame() {//初始化界面initJFrame();//初始化菜单initJMenuBar();//初始化数据(打乱)initData();//初始化图片(根据打乱之后的结果去加载图片)initImage();//窗体默认隐藏,让其显示出来this.setVisible(true);}//初始化界面private void initJFrame() {//设置窗体的宽高this.setSize(603, 680);//设置窗体的标题this.setTitle("拼图单机版 v1.0");//设置窗体置顶this.setAlwaysOnTop(true);//设置窗体居中this.setLocationRelativeTo(null);//设置关闭模式
//        this.setDefaultCloseOperation(3);this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//取消默认的居中放置,只有取消了才会按照XY轴的形式添加组件this.setLayout(null);//给整个界面添加键盘监听事件this.addKeyListener(this);}//初始化菜单private void initJMenuBar() {//创建整个的菜单对象JMenuBar jMenuBar = new JMenuBar();//创建菜单上面的两个选项的对象(功能  关于我们)JMenu functionJMenu = new JMenu("功能");JMenu aboutJMenu = new JMenu("关于我们");//功能下的更换图片选项JMenu changeImage = new JMenu("更换图片");//把美女,动物,运动添加到更换图片当中changeImage.add(girl);changeImage.add(animal);changeImage.add(sport);//将每一个选项下面的条目添加到选项当中去//将更换图片添加到功能中;JMenu里可以再添加JMenufunctionJMenu.add(changeImage);functionJMenu.add(replayItem);functionJMenu.add(reLoginItem);functionJMenu.add(closeItem);//把公众号添加到关于我们当中aboutJMenu.add(accountItem);//给条目绑定事件replayItem.addActionListener(this);reLoginItem.addActionListener(this);closeItem.addActionListener(this);accountItem.addActionListener(this);//给美女,动物,运动添加绑定事件girl.addActionListener(this);animal.addActionListener(this);sport.addActionListener(this);//将菜单里面的两个选项添加到菜单当中jMenuBar.add(functionJMenu);jMenuBar.add(aboutJMenu);//给整个界面设置菜单this.setJMenuBar(jMenuBar);}//初始化数据(打乱)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++) {//获取随机索引int index = r.nextInt(tempArr.length);//拿着遍历到的每一个数据,跟随机索引上的数据进行交换int temp = tempArr[i];tempArr[i] = tempArr[index];tempArr[index] = temp;}//3.给二维数组添加数据//遍历一位数组tempArr得到每一个元素,把每一个元素依次添加到二维数组当中for (int i = 0; i < tempArr.length; i++) {if (tempArr[i] == 0) {x = i / 4;y = i % 4;}data[i / 4][i % 4] = tempArr[i];}}//初始化图片和步数(即初始化隐藏容器里的内容)//添加图片的时候,就需要按照二维数组中管理的数据添加图片private void initImage() {//清空原本已经出现的所有图片this.getContentPane().removeAll();if (victory()) {//显示胜利的图标JLabel winJLabel = new JLabel(new ImageIcon("image\\win.png"));winJLabel.setBounds(203, 283, 197, 73);this.getContentPane().add(winJLabel);}//将步数添加到隐藏容器里JLabel stepCount = new JLabel("步数:" + step);stepCount.setBounds(50, 30, 100, 20);this.getContentPane().add(stepCount);//细节://先加载的图片在上方,后加载的图片塞在下面。//外循环 --- 把内循环重复执行了4次for (int i = 0; i < 4; i++) {//内循环 --- 表示在一行添加4张图片for (int j = 0; j < 4; j++) {int num = data[i][j];//创建一个JLabel的对象(管理容器)//目录下没有16.jpg,JLabel找不到图片,会自动加载一张空白图片JLabel jLabel = new JLabel(new ImageIcon(path + num + ".jpg"));//指定图片位置jLabel.setBounds(105 * j + 83, 105 * i + 134, 105, 105);//给图片添加边框//0:表示让图片凸起来//1:表示让图片凹下去jLabel.setBorder(new BevelBorder(1));//把管理容器添加到界面中//获取隐藏容器,并且将jLabel1添加到隐藏容器当中this.getContentPane().add(jLabel);}}JLabel background = new JLabel(new ImageIcon("image\\background.png"));background.setBounds(40, 40, 508, 560);//把背景图片添加到界面当中this.getContentPane().add(background);//刷新一下界面this.getContentPane().repaint();}@Overridepublic void keyTyped(KeyEvent e) {}//按下不松会调用这个方法@Overridepublic void keyPressed(KeyEvent e) {int code = e.getKeyCode();if (code == 65) {//把界面中所有的图片全部删除this.getContentPane().removeAll();//加载第一张完整的图片JLabel all = new JLabel(new ImageIcon(path + "all.jpg"));all.setBounds(83, 134, 420, 420);this.getContentPane().add(all);//加载背景图片JLabel background = new JLabel(new ImageIcon("image\\background.png"));background.setBounds(40, 40, 508, 560);//把背景图片添加到界面当中this.getContentPane().add(background);//刷新一下界面this.getContentPane().repaint();}}//松开按键的时候会调用这个方法@Overridepublic void keyReleased(KeyEvent e) {//判断游戏是否胜利,如果胜利,此方法需要直接结束,不能再执行下面的移动代码了if (victory()) {return;}//对上,下,左,右进行判断//左:37  上:38  右:39  下:40int code = e.getKeyCode();if (code == 37) {if (y == 3) {return;}data[x][y] = data[x][y + 1];data[x][y + 1] = 0;y++;//每移动一次,计数器就自增一次step++;initImage();} else if (code == 38) {if (x == 3) {//表示空白方块已经在最下方了,他的下面没有图片再能移动了return;}/** 逻辑:把空白方块下方的数组往上移动* x,y 表示空白方块的位置* x+1 , y  表示空白方块下方的图片的数字* *///把空白方块下方的数字赋值给空白方块data[x][y] = data[x + 1][y];data[x + 1][y] = 0;//更新空白方块的位置x++;//每移动一次,计数器就自增一次step++;//调用方法按照最新的数字加载图片initImage();} else if (code == 39) {if (y == 0) {return;}data[x][y] = data[x][y - 1];data[x][y - 1] = 0;y--;//每移动一次,计数器就自增一次step++;initImage();} else if (code == 40) {if (x == 0) {return;}data[x][y] = data[x - 1][y];data[x - 1][y] = 0;x--;//每移动一次,计数器就自增一次step++;initImage();}//当松开按键A时,重新加载打乱顺序的图片else if (code == 65) {initImage();}//当松开按键W时,直接加载顺序的图片else if (code == 87) {//直接给二维数组data进行赋值data = new int[][]{{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12},{13, 14, 15, 0},};initImage();}}//判断data数组中的数据是否跟win数组中相同//如果全部相同,返回true,否则返回falsepublic boolean victory() {for (int i = 0; i < data.length; i++) {for (int j = 0; j < data[i].length; j++) {if (data[i][j] != win[i][j]) {//只要有一个数据不一样,则返回falsereturn false;}}}//当循环结束表示数组遍历比较完毕,全部一样返回truereturn true;}@Overridepublic void actionPerformed(ActionEvent e) {//获取当前被点击的条目对象Object obj = e.getSource();//按下重新游戏if (obj == replayItem) {System.out.println("重新游戏");//计步器清零step = 0;//再次打乱二维数组中的数据initData();//重新加载图片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("公众号");//创建一个弹框对象JDialogJDialog jDialog = new JDialog();//创建一个管理图片的容器对象JLabelJLabel jLabel = new JLabel(new ImageIcon("image\\damie.jpg"));//设置位置和宽高,此时的原点为弹窗的左上角jLabel.setBounds(0, 0, 258, 258);//把图片添加到弹框当中jDialog.getContentPane().add(jLabel);//给弹框设置大小jDialog.setSize(344, 344);//让弹框置顶jDialog.setAlwaysOnTop(true);//让弹框居中jDialog.setLocationRelativeTo(null);//让弹框不关闭则无法操作下面的界面jDialog.setModal(true);//让弹框显示出来jDialog.setVisible(true);}//按下更换图片中的美女选项else if (obj == girl) {int temp = r.nextInt(13) + 1;path = "image\\girl\\girl" + temp + "\\";//计步器清零step = 0;//再次打乱二维数组中的数据initData();//重新加载图片initImage();}//按下更换图片中的动物选项else if (obj == animal) {int temp = r.nextInt(8) + 1;path = "image\\animal\\animal" + temp + "\\";//计步器清零step = 0;//再次打乱二维数组中的数据initData();//重新加载图片initImage();}//按下更换图片中的运动选项else if (obj == sport) {int temp = r.nextInt(10) + 1;path = "image\\sport\\sport" + temp + "\\";//计步器清零step = 0;//再次打乱二维数组中的数据initData();//重新加载图片initImage();}}
}

三.用户类 User

package com.qi.ui;public class User {private String username;private String password;public User() {}public User(String user, String password) {this.username = user;this.password = password;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}
}

四.工具类:随机生成验证码 CodeUtil

package com.qi.ui;import java.util.Random;
/*
* 工具类:用来生成5位数的验证码,包括4位字母(字母可以是大写也可以是小写)和一位数字
* */
public class CodeUtil {//定义一个字符数组,用来存储所有的大写字母和小写字母static char[] c = new char[52];//数字采用随机数static Random r = new Random();//使用静态代码块初始化数组,因为静态代码块在进入本类的时候最先执行static{for (int i = 0; i < c.length; i++) {if (i <= 25) {c[i] = (char) (65 + i);} else {c[i] = (char) (97 + i - 26);}}}public static String getCode() {//把验证码定义在此处,则每次调用该方法都会生成一个新的验证码String code = "";int temp = r.nextInt(4);//1.先随机抽取temp个字母for (int i = 0; i < temp; i++) {int index = r.nextInt(c.length);code = code + c[index];}//2.再随机抽取一个数字code = code + r.nextInt(10);//3.再随机抽取4-temp个字母for (int i = 0; i < (4-temp); i++) {int index = r.nextInt(c.length);code = code + c[index];}return code;}
}

五.登录界面 LoginJFrame

package com.qi.ui;import javax.swing.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;/*
* 创建一个登录界面
* */
public class LoginJFrame extends JFrame implements MouseListener{//暂时做不了注册功能,因为还没有能力做数据库,所以先创建两个用户测试用//创建一个集合存储正确的用户名和密码static ArrayList<User> list = new ArrayList<>();static{list.add(new User("zhangsan","123"));list.add(new User("lisi","1234"));}//添加登录按钮JButton login = new JButton();//添加注册按钮JButton register = new JButton();//添加用户名输入框JTextField username = new JTextField();//添加密码输入框JPasswordField password = new JPasswordField();//添加验证码输入框JTextField code = new JTextField();//定义验证码变量String codeStr;//添加验证码变量显示框JLabel rightCode = new JLabel();//定义错误显示信息String error = "用户名或密码错误";public LoginJFrame() {//初始化界面initJFrame();//在这个界面中添加内容initView();//让当前界面显示出来this.setVisible(true);}//初始化界面private void initJFrame() {this.setSize(488,435);//设置窗体的标题this.setTitle("拼图游戏 V1.0登录");//设置窗体置顶this.setAlwaysOnTop(true);//设置窗体居中this.setLocationRelativeTo(null);//设置关闭模式this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//取消内部默认布局this.setLayout(null);}//在界面中添加内容//注意:先添加的图片在上方,后添加的图片塞在下面。private void initView() {//1.添加用户名文字JLabel usernameText = new JLabel(new ImageIcon("image\\login\\用户名.png"));usernameText.setBounds(116,138,51,19);this.getContentPane().add(usernameText);//2.设置用户名输入框
//        JTextField username = new JTextField();username.setBounds(195,134,200,30);this.getContentPane().add(username);//3.添加密码文字JLabel passwordText = new JLabel(new ImageIcon("image\\login\\密码.png"));passwordText.setBounds(130,198,35,18);this.getContentPane().add(passwordText);//4.设置密码输入框
//        JPasswordField password = new JPasswordField();password.setBounds(195,195,200,30);this.getContentPane().add(password);//5.添加验证码文字JLabel codeText = new JLabel(new ImageIcon("image\\login\\验证码.png"));codeText.setBounds(116,256,50,30);this.getContentPane().add(codeText);//6.设置验证码输入框code.setBounds(195,256,100,30);this.getContentPane().add(code);//获取验证码:包含字母和一位数字codeStr = CodeUtil.getCode();
//        JLabel rightCode = new JLabel();//设置内容rightCode.setText(codeStr);//位置和宽高rightCode.setBounds(300,256,50,30);//添加到界面this.getContentPane().add(rightCode);//7.设置登录按钮login.setBounds(113,310,128,47);login.setIcon(new ImageIcon("image\\login\\登录按钮.png"));//去除按钮的默认边框login.setBorderPainted(false);//去除按钮的默认背景login.setContentAreaFilled(false);this.getContentPane().add(login);//8.设置注册按钮register.setBounds(266,310,128,47);register.setIcon(new ImageIcon("image\\login\\注册按钮.png"));//去除按钮的默认边框register.setBorderPainted(false);//去除按钮的默认背景register.setContentAreaFilled(false);this.getContentPane().add(register);//给登录和注册按钮绑定鼠标事件login.addMouseListener(this);register.addMouseListener(this);//添加背景图片JLabel background = new JLabel(new ImageIcon("image\\login\\background.png"));background.setBounds(0, 0, 470, 390);//把背景图片添加到界面当中this.getContentPane().add(background);//刷新一下界面this.getContentPane().repaint();}//鼠标监听事件//当单击(按下并释放时)@Overridepublic void mouseClicked(MouseEvent e) {Object obj = e.getSource();if(obj == login){//登录按钮被按下,则开始获取输入框中的用户名和密码//判断1:输入框是否为空,如果为空,提示:用户名和密码为空String rootUserName = username.getText();//getPassword()的返回值为char[],直接给转换为字符串String rootPassWord = new String(password.getPassword());//获取用户输入的验证码String rootCode = code.getText();//判断2:用户名和密码是否为zhangsan,123456,如果正确,则继续判断验证码是否正确//       如果验证码也正确了,则隐藏登录界面,进入游戏界面//判断3:用户名和密码如果错误,就展示弹框,提示:用户名和密码错误//登录成功:true//登录失败:falseboolean flag = contains(list,rootUserName,rootPassWord,rootCode);if (flag){new GameJFrame();}else{//创建一个弹框对象JDialogJDialog jDialog = new JDialog();jDialog.setTitle("登录失败");//创建一个管理图片的容器对象JLabelJLabel jLabelImg = new JLabel(new ImageIcon("image\\damie.jpg"));//创建一个管理文字的容器对象JLabelJLabel jLabel = new JLabel(error);//设置位置和宽高,此时的原点为弹窗的左上角jLabelImg.setBounds(0, 0, 99, 100);jLabel.setBounds(22, 130, 120,15);//把文字和图片添加到弹框当中jDialog.getContentPane().add(jLabel);jDialog.getContentPane().add(jLabelImg);//给弹框设置大小jDialog.setSize(99, 200);//让弹框置顶jDialog.setAlwaysOnTop(true);//让弹框居中jDialog.setLocationRelativeTo(null);//让弹框不关闭则无法操作下面的界面jDialog.setModal(true);//让弹框显示出来jDialog.setVisible(true);//当把弹框收掉的时候,重置用户名,密码,验证码输入框,以便于重新输入username.setText("");password.setText("");code.setText("");//重新生成验证码codeStr = CodeUtil.getCode();rightCode.setText(codeStr);//刷新一下界面this.getContentPane().repaint();}}else if(obj == register){new RegisterJFrame();}}//在组件上按下鼠标按钮时调用@Overridepublic void mousePressed(MouseEvent e) {//获取当前被点击的条目对象Object obj = e.getSource();if(obj == login){login.setIcon(new ImageIcon("image\\login\\登录按下.png"));}else if(obj == register){register.setIcon(new ImageIcon("image\\login\\注册按下.png"));}//刷新一下界面this.getContentPane().repaint();}//在组件上释放鼠标按钮时调用@Overridepublic void mouseReleased(MouseEvent e) {//获取当前被点击的条目对象Object obj = e.getSource();if(obj == login){login.setIcon(new ImageIcon("image\\login\\登录按钮.png"));}else if(obj == register){register.setIcon(new ImageIcon("image\\login\\注册按钮.png"));}//刷新一下界面this.getContentPane().repaint();}//当鼠标进入组件时调用@Overridepublic void mouseEntered(MouseEvent e) {}//当鼠标退出组件时调用@Overridepublic void mouseExited(MouseEvent e) {}//判断输入的用户名和密码是否存在且正确,验证码是否正确//存在且正确,且验证码也正确则登录成功:true//不存在或不正确或验证码不正确则登录失败:falsepublic boolean contains(ArrayList<User> list,String rootUsername,String Password,String code){//首先判断验证码是否为空,是否正确//如果验证码为空,或者不正确,则返回falseif(code.length() == 0 || (!codeStr.equalsIgnoreCase(code))){error = "验证码不正确";return false;}//到这一步则说明验证码正确//如果用户名或者密码输入为空,则登录失败if (rootUsername.length() == 0 || Password.length() == 0){return false;}//获取数组长度int length = list.size();for (int i = 0; i < length; i++) {String listUsername = list.get(i).getUsername();String listPassword = list.get(i).getPassword();//如果用户名和密码都匹配且正确,则登录成功if (listUsername.equalsIgnoreCase(rootUsername) && listPassword.equalsIgnoreCase(Password)){return true;};}//循环结束,都没有匹配的用户名和密码,则登录失败return false;}
}

六.注册界面 RegisterJFame

package com.qi.ui;import javax.swing.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;/*
* 创建一个注册界面
* */
public class RegisterJFrame extends JFrame implements MouseListener {//添加注册按钮JButton register = new JButton();//添加重置按钮JButton reset = new JButton();//注册用户名输入框JTextField reUsername = new JTextField();//注册密码输入框JPasswordField rePassword = new JPasswordField();//再次输入密码输入框JPasswordField vePassword = new JPasswordField();//定义错误显示信息String error = "用户已存在";public RegisterJFrame() {//初始化界面initJFrame();//在这个界面中添加内容initView();//让当前界面显示出来this.setVisible(true);}private void initJFrame() {this.setSize(488,435);//设置窗体的标题this.setTitle("拼图 注册");//设置窗体置顶this.setAlwaysOnTop(true);//设置窗体居中this.setLocationRelativeTo(null);//设置关闭模式this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);this.setVisible(true);}//在这个界面中添加内容private void initView() {//1.注册用户名文字JLabel registerUsername = new JLabel(new ImageIcon("image\\register\\注册用户名.png"));registerUsername.setBounds(80,138,100,19);this.getContentPane().add(registerUsername);//2.注册用户名输入框reUsername.setBounds(195,134,200,30);this.getContentPane().add(reUsername);//3.注册密码文字JLabel registerPassword = new JLabel(new ImageIcon("image\\register\\注册密码.png"));registerPassword.setBounds(80,198,100,19);this.getContentPane().add(registerPassword);//4.注册密码输入框rePassword.setBounds(195,194,200,30);this.getContentPane().add(rePassword);//5.再次输入密码文字JLabel verifyPassword = new JLabel(new ImageIcon("image\\register\\再次输入密码.png"));verifyPassword.setBounds(80,258,100,19);this.getContentPane().add(verifyPassword);//6.再次输入密码输入框vePassword.setBounds(195,254,200,30);this.getContentPane().add(vePassword);//7.设置注册按钮register.setBounds(113,310,128,47);register.setIcon(new ImageIcon("image\\register\\注册按钮.png"));//去除按钮的默认边框register.setBorderPainted(false);//去除按钮的默认背景register.setContentAreaFilled(false);this.getContentPane().add(register);//8.设置重置按钮reset.setBounds(266,310,128,47);reset.setIcon(new ImageIcon("image\\register\\重置按钮.png"));//去除按钮的默认边框reset.setBorderPainted(false);//去除按钮的默认背景reset.setContentAreaFilled(false);this.getContentPane().add(reset);//给注册和重置按钮绑定鼠标事件register.addMouseListener(this);reset.addMouseListener(this);//添加背景图片JLabel background = new JLabel(new ImageIcon("image\\register\\background.png"));background.setBounds(0, 0, 470, 390);//把背景图片添加到界面当中this.getContentPane().add(background);//刷新一下界面this.getContentPane().repaint();}//鼠标监听事件//当单击(按下并释放时)@Overridepublic void mouseClicked(MouseEvent e) {//获取当前被点击的条目对象Object obj = e.getSource();if (obj == register){String name = reUsername.getText();String password = new String(rePassword.getPassword());String againPassword = new String(vePassword.getPassword());boolean flag = contains(LoginJFrame.list,name,password,againPassword);//如果注册成功if (flag){NewUser(name,password);//创建一个弹框对象JDialogJDialog jDialog = new JDialog();jDialog.setTitle("注册成功");//给弹框设置大小jDialog.setSize(100, 100);//让弹框置顶jDialog.setAlwaysOnTop(true);//让弹框居中jDialog.setLocationRelativeTo(null);//让弹框不关闭则无法操作下面的界面jDialog.setModal(true);//让弹框显示出来jDialog.setVisible(true);//刷新一下界面this.getContentPane().repaint();new LoginJFrame();}else{//创建一个弹框对象JDialogJDialog jDialog = new JDialog();jDialog.setTitle("注册失败");//创建一个管理文字的容器对象JLabelJLabel jLabel = new JLabel(error);jLabel.setBounds(50, 130, 120,15);//把文字和图片添加到弹框当中jDialog.getContentPane().add(jLabel);//给弹框设置大小jDialog.setSize(260, 200);//让弹框置顶jDialog.setAlwaysOnTop(true);//让弹框居中jDialog.setLocationRelativeTo(null);//让弹框不关闭则无法操作下面的界面jDialog.setModal(true);//让弹框显示出来jDialog.setVisible(true);//当把弹框收掉的时候,重置用户名,密码,验证码输入框,以便于重新输入reUsername.setText("");rePassword.setText("");vePassword.setText("");//刷新一下界面this.getContentPane().repaint();}}else if(obj == reset){//重置按钮被点击reUsername.setText("");rePassword.setText("");vePassword.setText("");}//刷新一下界面this.getContentPane().repaint();}//在组件上按下鼠标按钮时调用@Overridepublic void mousePressed(MouseEvent e) {//获取当前被点击的条目对象Object obj = e.getSource();if (obj == register){register.setIcon(new ImageIcon("image\\register\\注册按下.png"));}else if(obj == reset){reset.setIcon(new ImageIcon("image\\register\\重置按下.png"));}//刷新一下界面this.getContentPane().repaint();}//在组件上释放鼠标按钮时调用@Overridepublic void mouseReleased(MouseEvent e) {//获取当前被点击的条目对象Object obj = e.getSource();if (obj == register){register.setIcon(new ImageIcon("image\\register\\注册按钮.png"));}else if(obj == reset){reset.setIcon(new ImageIcon("image\\register\\重置按钮.png"));}//刷新一下界面this.getContentPane().repaint();}//当鼠标进入组件时调用@Overridepublic void mouseEntered(MouseEvent e) {}//当鼠标退出组件时调用@Overridepublic void mouseExited(MouseEvent e) {}//判断输入的用户名和密码是否已存在//不存在或存在不匹配,注册成功:true// 都已存在且匹配或两次密码不一致,注册失败:falsepublic boolean contains(ArrayList<User> list, String rootUsername, String Password,String againPassword){//如果用户名或者两次密码中有输入为空,则登录失败if (rootUsername.length() == 0 || Password.length() == 0 || againPassword.length() == 0){error = "请输入数据";return false;}//判断两次输入的密码是否一致if(!(Password.equalsIgnoreCase(againPassword))){error = "两次输入密码不一致,请重新输入";return false;}//到这里说明两次密码输入是一致的//获取数组长度int length = list.size();for (int i = 0; i < length; i++) {String listUsername = list.get(i).getUsername();String listPassword = list.get(i).getPassword();//如果用户名和密码都匹配且正确,则表示用户已存在if (listUsername.equalsIgnoreCase(rootUsername) && listPassword.equalsIgnoreCase(Password)){return false;};}//循环结束,都没有匹配的用户名和密码,则注册成功return true;}//给集合添加用户数据public void NewUser(String username,String password){User user = new User(username,password);LoginJFrame.list.add(user);}
}

JAVA练习题37:拼图小游戏相关推荐

  1. Java项目之“拼图小游戏”

    文章目录 一.项目简介 二.游戏展示 三.程序设计 1. 创建游戏主界面( GameJFrame ) 2. 初始化界面 ( initJFrame ) 3. 初始化菜单 ( initJMenuBar ) ...

  2. Java实现拼图小游戏(6)—— 移动图片(键盘监听实操练习)

    移动图片 一.前言 二.步骤 1.让我们的类继承KeyListener接口 2.改写initData方法 3.实现向上移动 4.实现向下移动 5.实现向左移动 6.实现向右移动 7.改写initIma ...

  3. 拼图小游戏Java简易版

    Java拼图小游戏简易版 技术需求 代码实现 完整代码 相关图片 技术需求 Java基础封装.继承.多态. 代码实现 创建一个子类继承自父类JFrame,好处是继承到父类的所有方法,直接使用,更为方便 ...

  4. Java基础:拼图小游戏(包含Java代码)

    涉及到的知识: 1.图形用户接口GUI(Graphical User Interface)用图形化的方式显示操作界面 两个体系: AWT包和Swing包 2.界面会用到JFrame类 3.界面中的菜单 ...

  5. java对拼图小游戏的简单实现(详解)

    使用Java编写拼图小游戏主要包括: 初始化界面 初始化菜单 初始化数据 初始化图片 其他必要功能的实现 这几部分.在进行细分时包括了菜单的搭建,添加图片,打乱图片位置,让图片移动起来,查看完整图片, ...

  6. 【java】JavaFX从零开始实现拼图小游戏

    最近java课老师布置了一个作业:制作一个拼图小游戏,关键老师自己说javaGUI编程没用,讲课的时候好像跳过了(没去上课不过我猜应该没讲吧),现在又叫我们做这些,实在是哭笑不得. 得了吧,老师的任务 ...

  7. java实现智能拼图_java实现拼图小游戏

    一个简单的拼图小游戏,供大家参考,具体内容如下 1.首先设计视图面板. 2.添加所需要的图片按钮. 3.最主要的是设计监听事件,添加图片的监听按钮,设定移动空白图片周围的按钮. 4.判断是否成功 . ...

  8. Java实现拼图小游戏(5)—— 美化界面(含源码阅读)

    美化界面 一.前言 二.添加背景图 1.注意事项 2.创建图片对象 3.创建JLabel的对象(一个用来放图片的容器) 4.调整位置 5.将容器放到界面中 6.优化代码 三.添加边框 1.查看源码 2 ...

  9. Java实现拼图小游戏(2)——菜单搭建(有关Java中的JMenuBar知识点)

    菜单搭建 一.前言 二.搭建步骤 1. 创建JMenuBar 2. 创建Jmenu 3. 创建JMenuItem 4. 将JMenuItem放到Jmenu中 5. 将Jmenu放到JMeanuBar中 ...

最新文章

  1. AutoIt脚本在做自动化操作的时候,如何进行错误捕获?
  2. UITableView学习笔记
  3. 卧槽,又一个Java面试神器!!!
  4. MySQL高级查询语句
  5. 谁控制了我们的浏览器?
  6. css3 固定,CSS3 calc()不适用于固定位置/绝对位置
  7. Flash Socket通信的安全策略问题
  8. Wap wml开发中需要注意的地方
  9. Oracle和SQL server的数据类型比较
  10. Q91:真实地模拟透明材质(Realistic Transparency)(4)——Fish Bowl
  11. Extjs使用(最最基础)
  12. [AngularJS] 插件ui-grid使用说明
  13. 重庆大学软件工程导论总结
  14. ubuntu samba实现linux与windows之间的资源共享
  15. 华为ENSP进行evn实验,尚不完整,但已经有RT1、RT2、RT3、RT4了
  16. Linux安全之PHP木马查杀与防范
  17. [Matlab]LMS滤波器设计
  18. PYTHON 中的多线程
  19. mysql函数循环查询的数据_MySQL 查询树结构、循环查询、查看函数、视图、存储过程...
  20. 亚马逊查询关键词排名的工具_拼多多关键词排名查询工具怎么查关键词的?

热门文章

  1. 机器学习1.线性回归
  2. 【android】configuration
  3. 抖音短视频系统开发图片局部放大镜,可在大图上下左右移动并放大对应的区域
  4. 美化Windows 字体
  5. 无法访问其它家庭组计算机,win7系统家庭组无法访问的解决方法
  6. linux中根目录包含哪些目录,Linux根目录的主要目录功能介绍
  7. 关闭窗体上面的中文输入法
  8. 【时间序列】FaceBook开源全网第一个时序王器--Kats。
  9. Android P Preview1 兼容要点
  10. android webview 图片居中,Android WebView实现截长图功能