目录
前言
学习了这么长时间JAVA,都是一个模块一个模块的学习,不知道自己到底掌握了多少知识点,虽然早已经将JAVA基础部分学习完毕,但我一直都不敢说自己有JAVA基础。
以前写过几个小案例(简易版学生管理系统、康小汪双色球彩票系统),都觉得so easy,也确实非常简单,我觉得只要有一丢丢JAVA基础的人都能写出来。但是,这一次不一样!!!
这个小项目将封装、继承、多态、抽象类、接口、内部类、集合、字符串、数组、循环、判断等等知识点综合起来,可以锻炼我们的思维能力,了解前面学习的知识点在实际开发中的应用场景。所以一定要多敲代码,多练项目。
演示视频;https://live.csdn.net/v/317795Java练手小项目 演示视频https://live.csdn.net/v/317795
下载地址:
我已经将打包好的.exe文件放在了百度网盘里,可以下载安装
链接:https://pan.baidu.com/s/1T9OihEC5wPVfV96RH0mWgA?pwd=c6mj
提取码:c6mj
分析业务
主界面:
可以发现,我们的游戏主界面包括了 最外层的窗体,菜单栏还有菜单条目,当我们点击菜单栏或者菜单条目的相应按键时,就会触发不同的效果。
比如:我们点击了菜单中的关闭游戏,整个程序就会停止运行并且关闭主界面。
那么,怎么实现这个窗口呢。
首先,我们需要创建最外层的窗体,接着创建菜单对象,创建菜单中的选项对象,创建菜单选项中条目的对象,将每个选项中的条目添加到选项中,将选项添加到菜单中,最后在给整个界面设置菜单就ok了。
主界面代码实现:
创建一个宽1125像素,高1125像素的游戏主界面:
//初始化最外层窗体
private void initJFgame() {
//设置主界面的宽高
this.setSize(1125,1125);
//设置主界面标题
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);
}
创建菜单对象,创建菜单中的选项对象,创建菜单选项中条目的对象,将每个选项中的条目添加到选项中,将选项添加到菜单中,最后在给整个界面设置菜单
//创建菜单对象
JMenuBar jMenuBar = new JMenuBar();
//创建菜单中的选项对象
JMenu functionjMenu = new JMenu("菜单");
JMenu aboutjMenu = new JMenu("关于我们");
JMenu helpjMenu = new JMenu("帮助");
JMenu choosejMenu = new JMenu("类别");
//创建菜单选项中条目的对象
JMenuItem rePlay = new JMenuItem("重新游戏");
JMenuItem reLogin = new JMenuItem("重新登录");
JMenuItem closeGame = new JMenuItem("关闭游戏");
JMenuItem beautyGame = new JMenuItem("美女");
JMenuItem animalGame = new JMenuItem("动物");
JMenuItem carGame = new JMenuItem("汽车");
JMenuItem helpGame = new JMenuItem("操作教程");
JMenuItem contactOur = new JMenuItem("联系我们");
//将每个选项中的条目添加到选项中
functionjMenu.add(choosejMenu);
functionjMenu.add(rePlay);
functionjMenu.add(reLogin);
functionjMenu.add(closeGame);
choosejMenu.add(beautyGame);
choosejMenu.add(animalGame);
choosejMenu.add(carGame);
helpjMenu.add(helpGame);
aboutjMenu.add(contactOur);
//将选项添加到菜单中
jMenuBar.add(functionjMenu);
jMenuBar.add(aboutjMenu);
jMenuBar.add(helpjMenu);
//给整个界面设置菜单
this.setJMenuBar(jMenuBar);
到这里,主界面就算创建完成了,要想利用鼠标点击或键盘输入触发不同的效果,还要给每个条目绑定不同的事件,具体代码看全部代码吧。
登录界面
这里的登录界面有登录按钮和注册按钮,所以我们需要创建两个按钮对象。同时有用户名输入框和密码输入框还有验证码输入框,我们需要创建 相应的输入框对象。
这里的验证码是我自己写的一个类,专门用于生成验证码,支持生成同时含有字母大小写和数字的总共五位的验证码,数字出现的位置是随机的,每个位置都有可能。
登录界面代码实现:
这是最外层窗体:
public void initJFrame() {
this.setSize(488, 430);//设置宽高
this.setTitle("拼图游戏 V1.0登录");//设置标题
this.setDefaultCloseOperation(3);//设置关闭模式
this.setLocationRelativeTo(null);//居中
this.setAlwaysOnTop(true);//置顶
this.setLayout(null);//取消内部默认布局
//让当前界面显示出来
this.setVisible(true);
}
这是创建的登录 注册 按钮,以及相应的输入框
JButton login = new JButton();
JButton register = new JButton();
JTextField username = new JTextField();
//JTextField password = new JTextField();
JPasswordField password = new JPasswordField();
JTextField code = new JTextField();
//正确的验证码
JLabel rightCode = new JLabel();
当输入相应的用户名和密码后点击登录按钮,就会进入主界面,当点击注册按钮则会进入注册界面,点击验证码时,验证码会发生变化。
当然,需要点击有效,我们要给两个按钮绑定相应的事件。
这是绑定相应事件的代码:
//给验证码框绑定鼠标事件
rightCode.addMouseListener(this);
//给登录按钮绑定鼠标事件
login.addMouseListener(this);
//给注册按钮绑定鼠标事件
register.addMouseListener(this);
这是对接口MouseListener中方法的重写:
//点击
@Override
public void mouseClicked(MouseEvent e) {
if (e.getSource() == login) {
System.out.println("点击了登录按钮");
//获取两个文本输入框中的内容
String usernameInput = username.getText();
String passwordInput = password.getText();
//获取用户输入的验证码
String codeInput = code.getText();
//创建一个User对象
User userInfo = new User(usernameInput, passwordInput);
System.out.println("用户输入的用户名为" + usernameInput);
System.out.println("用户输入的密码为" + passwordInput);
if (codeInput.length() == 0) {
showJDialog("验证码不能为空");
} else if (usernameInput.length() == 0 || passwordInput.length() == 0) {
//校验用户名和密码是否为空
System.out.println("用户名或者密码为空");
//调用showJDialog方法并展示弹框
showJDialog("用户名或者密码为空");
} else if (!codeInput.equalsIgnoreCase(rightCode.getText())) {
showJDialog("验证码输入错误");
} else if (contains(userInfo)) {
System.out.println("用户名和密码正确可以开始玩游戏了");
//关闭当前登录界面
this.setVisible(false);
//打开游戏的主界面
//需要把当前登录的用户名传递给游戏界面
new GameJf();
} else {
System.out.println("用户名或密码错误");
showJDialog("用户名或密码错误");
}
} else if (e.getSource() == register) {
System.out.println("点击了注册按钮");
this.setVisible(false);
new RegisterJFrame();
} else if (e.getSource() == rightCode) {
System.out.println("更换验证码");
//获取一个新的验证码
String code = CodeUtil.getCode();
rightCode.setText(code);
}
}
//按下不松
@Override
public void mousePressed(MouseEvent e) {
if (e.getSource() == login) {
login.setIcon(new ImageIcon("image\\login\\登录按下.png"));
} else if (e.getSource() == register) {
register.setIcon(new ImageIcon("image\\login\\注册按下.png"));
}
}
//松开按钮
@Override
public void mouseReleased(MouseEvent e) {
if (e.getSource() == login) {
login.setIcon(new ImageIcon("image\\login\\登录按钮.png"));
} else if (e.getSource() == register) {
register.setIcon(new ImageIcon("image\\login\\注册按钮.png"));
}
}
//鼠标划入
@Override
public void mouseEntered(MouseEvent e) {
}
//鼠标划出
@Override
public void mouseExited(MouseEvent e) {
}
注册界面
注册界面包含注册 重置 按钮,还有用户名 密码 确认密码 输入框,所以我们要创建相应的按钮对象和输入框,当我们输入用户名密码 确认密码,点击注册后,就会弹出如上界面,当我们点击登录时,就会跳转到登录界面,就可以用我们刚才注册的用户名和密码进行登录了。
注册界面代码实现
最外层窗体:
private void initJFrame() {
this.setSize(500,550);
//设置界面的标题
this.setTitle("拼图 注册");
//设置界面置顶
this.setAlwaysOnTop(true);
//设置界面居中
this.setLocationRelativeTo(null);
//设置关闭模式
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
//让显示显示出来,建议写在最后
this.setVisible(true);
}
这是注册 重置 按钮,以及相应的输入框:
JButton jButton = new JButton("注册成功");
JDialog jDialog = new JDialog();
JButton register = new JButton();
JButton resetting = new JButton();
JTextField username = new JTextField();
JPasswordField password = new JPasswordField();
JPasswordField rpassword = new JPasswordField();
同样的,
需要点击有效,我们要给两个按钮绑定相应的事件。
这是绑定相应事件的代码:
//给注册按钮绑定鼠标事件
register.addMouseListener(this);
//给重置按钮绑定鼠标事件
resetting.addMouseListener(this);
//给登录按钮绑定鼠标事件
jButton.addMouseListener(this);
这是点击注册后弹窗的代码实现:
public void rshowJDialog(String content) {
//创建一个弹框对象
//给弹框设置大小
jDialog.setSize(250, 200);
//让弹框置顶
jDialog.setAlwaysOnTop(true);
//让弹框居中
jDialog.setLocationRelativeTo(null);
//弹框不关闭永远无法操作下面的界面
jDialog.setModal(true);
//创建Jlabel对象管理文字并添加到弹框当中
JLabel warning = new JLabel(content);
warning.setBounds(50, -100, 0, 0);
jDialog.getContentPane().add(warning);
//5.添加登录按钮
jButton.setBounds(130, 120, 128, 47);
jButton.setIcon(new ImageIcon("image\\login\\登录按钮.png"));
//去除按钮的边框
jButton.setBorderPainted(false);
//去除按钮的背景
jButton.setContentAreaFilled(false);
//给登录按钮绑定鼠标事件
jButton.addMouseListener(this);
jDialog.getContentPane().add(jButton);
//让弹框展示出来
jDialog.setVisible(true);
}
到这里,所有的界面设置完成,接下来就是业务逻辑分析。
业务逻辑分析:
首先,我们想,怎样实现移动界面中图片的位置?
当然是二维数组了,试想一下,我们将每张图片对应二维数组中的每个元素,如果二维数组之间的元素发生位置变化,我们的图片不就也发生了位置的变化吗?
那么,我们就要创建一个二维数组了,并且要将二维数组进行随机打乱顺序处理,因为我们的图片是随机分布的。
首先,创建一个一维数组,里面按顺序存放9个元素,0~8。
int[] tempArr = {0,1,2,3,4,5,6,7,8};
然后再创建一个二维数组,将一维数组中的元素随机的添加到二维数组中。
private void initDate() {
int[] tempArr = {0,1,2,3,4,5,6,7,8};
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;
}
//遍历一维数组
for (int i = 0; i < tempArr.length; i++) {
if (tempArr[i] == 0){
x = i / 3;
y = i % 3;
}
arr[i/3][i%3] = tempArr[i];
}
}
这样,每次调用这个方法,二维数组都是不一样的。
接下来要做的就是将每一张图片对应到每个元素上,我们将图片命名成 数字.png 的方式,这样就会按照二维数组中存放的元素去找照片了
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
int num = arr[i][j];
//创建图片的Imageicon的对象
ImageIcon icon = new ImageIcon(path2 +num+".png");
//创建jLabel的对象
JLabel jLabel = new JLabel(icon);
//指定图片添加的位置
jLabel.setBounds(375 * j,375 * i,375,375);
//给图片添加边框
jLabel.setBorder(new BevelBorder(BevelBorder.RAISED));
//将管理容器添加到页面中
//this.add(jLabel);
this.getContentPane().add(jLabel);
}
}
那么,又怎么判断游戏的输赢呢?
也很简单,我们创建一个二维数组,里面按顺序存放0~8的元素,每移动一次图片,我们就让两个二维数组进行一次比较,如果相同了,就说明游戏结束,弹出相应的提示,否则继续游戏。
public boolean victory(){
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
if (arr[i][j] != win[i][j]){
return false;
}
}
}
return true;
}
简单的游戏逻辑就是这样,需要完整的游戏代码可以私信我!
登录完整代码
package com.itkxw.ui;
import com.itkxw.domain.User;
import com.itheima.util.CodeUtil;
import javax.swing.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
public class LoginJFrame extends JFrame implements MouseListener {
static ArrayList<User> allUsers = new ArrayList<>();
static {
allUsers.add(new User("zhangsan","123"));
allUsers.add(new User("lisi","1234"));
}
JButton login = new JButton();
JButton register = new JButton();
JTextField username = new JTextField();
//JTextField password = new JTextField();
JPasswordField password = new JPasswordField();
JTextField code = new JTextField();
//正确的验证码
JLabel rightCode = new JLabel();
public LoginJFrame() {
//初始化界面
initJFrame();
//在这个界面中添加内容
initView();
//让当前界面显示出来
this.setVisible(true);
}
public void initView() {
//1. 添加用户名文字
JLabel usernameText = new JLabel(new ImageIcon("image\\login\\用户名.png"));
usernameText.setBounds(116, 135, 47, 17);
this.getContentPane().add(usernameText);
//2.添加用户名输入框
username.setBounds(195, 134, 200, 30);
this.getContentPane().add(username);
//3.添加密码文字
JLabel passwordText = new JLabel(new ImageIcon("image\\login\\密码.png"));
passwordText.setBounds(130, 195, 32, 16);
this.getContentPane().add(passwordText);
//4.密码输入框
password.setBounds(195, 195, 200, 30);
this.getContentPane().add(password);
//验证码提示
JLabel codeText = new JLabel(new ImageIcon("image\\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();
//设置内容
rightCode.setText(codeStr);
//绑定鼠标事件
rightCode.addMouseListener(this);
//位置和宽高
rightCode.setBounds(300, 256, 50, 30);
//添加到界面
this.getContentPane().add(rightCode);
//5.添加登录按钮
login.setBounds(123, 310, 128, 47);
login.setIcon(new ImageIcon("image\\login\\登录按钮.png"));
//去除按钮的边框
login.setBorderPainted(false);
//去除按钮的背景
login.setContentAreaFilled(false);
//给登录按钮绑定鼠标事件
login.addMouseListener(this);
this.getContentPane().add(login);
//6.添加注册按钮
register.setBounds(256, 310, 128, 47);
register.setIcon(new ImageIcon("image\\login\\注册按钮.png"));
//去除按钮的边框
register.setBorderPainted(false);
//去除按钮的背景
register.setContentAreaFilled(false);
//给注册按钮绑定鼠标事件
register.addMouseListener(this);
this.getContentPane().add(register);
//7.添加背景图片
JLabel background = new JLabel(new ImageIcon("image\\login\\background.png"));
background.setBounds(0, 0, 470, 390);
this.getContentPane().add(background);
}
public void initJFrame() {
this.setSize(488, 430);//设置宽高
this.setTitle("拼图游戏 V1.0登录");//设置标题
this.setDefaultCloseOperation(3);//设置关闭模式
this.setLocationRelativeTo(null);//居中
this.setAlwaysOnTop(true);//置顶
this.setLayout(null);//取消内部默认布局
}
//点击
@Override
public void mouseClicked(MouseEvent e) {
if (e.getSource() == login) {
System.out.println("点击了登录按钮");
//获取两个文本输入框中的内容
String usernameInput = username.getText();
String passwordInput = password.getText();
//获取用户输入的验证码
String codeInput = code.getText();
//创建一个User对象
User userInfo = new User(usernameInput, passwordInput);
System.out.println("用户输入的用户名为" + usernameInput);
System.out.println("用户输入的密码为" + passwordInput);
if (codeInput.length() == 0) {
showJDialog("验证码不能为空");
} else if (usernameInput.length() == 0 || passwordInput.length() == 0) {
//校验用户名和密码是否为空
System.out.println("用户名或者密码为空");
//调用showJDialog方法并展示弹框
showJDialog("用户名或者密码为空");
} else if (!codeInput.equalsIgnoreCase(rightCode.getText())) {
showJDialog("验证码输入错误");
} else if (contains(userInfo)) {
System.out.println("用户名和密码正确可以开始玩游戏了");
//关闭当前登录界面
this.setVisible(false);
//打开游戏的主界面
//需要把当前登录的用户名传递给游戏界面
new GameJf();
} else {
System.out.println("用户名或密码错误");
showJDialog("用户名或密码错误");
}
} else if (e.getSource() == register) {
System.out.println("点击了注册按钮");
this.setVisible(false);
new RegisterJFrame();
} else if (e.getSource() == rightCode) {
System.out.println("更换验证码");
//获取一个新的验证码
String code = CodeUtil.getCode();
rightCode.setText(code);
}
}
public 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("image\\login\\登录按下.png"));
} else if (e.getSource() == register) {
register.setIcon(new ImageIcon("image\\login\\注册按下.png"));
}
}
//松开按钮
@Override
public void mouseReleased(MouseEvent e) {
if (e.getSource() == login) {
login.setIcon(new ImageIcon("image\\login\\登录按钮.png"));
} else if (e.getSource() == register) {
register.setIcon(new ImageIcon("image\\login\\注册按钮.png"));
}
}
//鼠标划入
@Override
public void mouseEntered(MouseEvent e) {
}
//鼠标划出
@Override
public void mouseExited(MouseEvent e) {
}
//判断用户在集合中是否存在
public boolean contains(User userInput){
for (int i = 0; i < allUsers.size(); i++) {
User rightUser = allUsers.get(i);
if(userInput.getUsername().equals(rightUser.getUsername()) && userInput.getPassword().equals(rightUser.getPassword())){
//有相同的代表存在,返回true,后面的不需要再比了
return true;
}
}
//循环结束之后还没有找到就表示不存在
return false;
}
public static ArrayList<User> kk(User user){
allUsers.add(user);
return allUsers;
}
}
注册完整代码
package com.itkxw.ui;
import com.itkxw.domain.User;
import javax.swing.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import com.itkxw.ui.LoginJFrame;
public class RegisterJFrame extends JFrame implements MouseListener {
JButton jButton = new JButton("注册成功");
JDialog jDialog = new JDialog();
JButton register = new JButton();
JButton resetting = new JButton();
JTextField username = new JTextField();
JPasswordField password = new JPasswordField();
JPasswordField rpassword = new JPasswordField();
//跟注册相关的代码,都写在这个界面中
public RegisterJFrame(){
//初始化界面
initJFrame();
//在这个界面中添加内容
initView();
//让显示显示出来,建议写在最后
this.setVisible(true);
getContentPane();
}
private void initJFrame() {
this.setSize(500,550);
//设置界面的标题
this.setTitle("拼图 注册");
//设置界面置顶
this.setAlwaysOnTop(true);
//设置界面居中
this.setLocationRelativeTo(null);
//设置关闭模式
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
private void initView() {
//添加用户文字
JLabel userNameText = new JLabel(new ImageIcon("image\\register\\注册用户名.png"));
userNameText.setBounds(100, 164, 79, 17);
this.getContentPane().add(userNameText);
//2.添加用户名输入框
username.setBounds(195, 160, 200, 30);
this.getContentPane().add(username);
//3.添加密码文字
JLabel passwordText = new JLabel(new ImageIcon("image\\register\\注册密码.png"));
passwordText.setBounds(100, 205, 66, 16);
this.getContentPane().add(passwordText);
//4.密码输入框
password.setBounds(195, 195, 200, 30);
this.getContentPane().add(password);
//3.添加确认密码文字
JLabel rpasswordText = new JLabel(new ImageIcon("image\\register\\再次输入密码.png"));
rpasswordText.setBounds(90, 245, 96, 17);
this.getContentPane().add(rpasswordText);
//4.确认密码输入框
rpassword.setBounds(195, 235, 200, 30);
this.getContentPane().add(rpassword);
//添加注册按钮
register.setBounds(103, 310, 128, 47);
register.setIcon(new ImageIcon("image\\register\\注册按钮.png"));
//去除按钮的边框
register.setBorderPainted(false);
//去除按钮的背景
register.setContentAreaFilled(false);
//给注册按钮绑定鼠标事件
register.addMouseListener(this);
this.getContentPane().add(register);
//添加重置按钮
resetting.setBounds(260, 310, 128, 47);
resetting.setIcon(new ImageIcon("image\\register\\重置按钮.png"));
//去除按钮的边框
resetting.setBorderPainted(false);
//去除按钮的背景
resetting.setContentAreaFilled(false);
//给重置按钮绑定鼠标事件
resetting.addMouseListener(this);
this.getContentPane().add(resetting);
JLabel background = new JLabel(new ImageIcon("image\\register\\background.png"));
background.setBounds(0, 0, 470, 390);
this.getContentPane().add(background);
}
//点击
@Override
public void mouseClicked(MouseEvent e) {
Object source = e.getSource();
if (source == register){
System.out.println("点击了注册按钮");
//获取输入框的内容
String userNameText = username.getText();
String passwordText = password.getText();
String rpasswordText = rpassword.getText();
//创建一个USER对象
User user = new User(userNameText,passwordText);
System.out.println("用户输入的用户名为" + userNameText);
System.out.println("用户输入的密码为" + passwordText);
if (userNameText.length() == 0 && passwordText.length() == 0){
System.out.println("用户名或者密码为空");
//调用showJDialog方法并展示弹框
showJDialog("用户名或者密码为空");
} else if (!(passwordText.equals(rpasswordText))) {
System.out.println("两次密码输入不一致");
//调用showJDialog方法并展示弹框
showJDialog("两次密码输入不一致");
} else if (source == jButton) {
System.out.println("点击了登录按钮");
this.setVisible(false);
new LoginJFrame();
} else {
LoginJFrame.kk(user);
//调用showJDialog方法并展示弹框
rshowJDialog("注册成功");
}
}
}
//按下不松
@Override
public void mousePressed(MouseEvent e) {
}
//松开按钮
@Override
public void mouseReleased(MouseEvent e) {
Object source = e.getSource();
if (source == jButton){
System.out.println("点击了登录按钮");
this.setVisible(false);
jDialog.setVisible(false);
new LoginJFrame();
}
}
//鼠标划入
@Override
public void mouseEntered(MouseEvent e) {
}
//鼠标划出
@Override
public void mouseExited(MouseEvent e) {
}
public 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);
}
public void rshowJDialog(String content) {
//创建一个弹框对象
//给弹框设置大小
jDialog.setSize(250, 200);
//让弹框置顶
jDialog.setAlwaysOnTop(true);
//让弹框居中
jDialog.setLocationRelativeTo(null);
//弹框不关闭永远无法操作下面的界面
jDialog.setModal(true);
//创建Jlabel对象管理文字并添加到弹框当中
JLabel warning = new JLabel(content);
warning.setBounds(50, -100, 0, 0);
jDialog.getContentPane().add(warning);
//5.添加登录按钮
jButton.setBounds(130, 120, 128, 47);
jButton.setIcon(new ImageIcon("image\\login\\登录按钮.png"));
//去除按钮的边框
jButton.setBorderPainted(false);
//去除按钮的背景
jButton.setContentAreaFilled(false);
//给登录按钮绑定鼠标事件
jButton.addMouseListener(this);
jDialog.getContentPane().add(jButton);
//让弹框展示出来
jDialog.setVisible(true);
}
}
主页面主要代码:
这都是对方法的封装
public GameJf(){
//初始化界面
initJFgame();
//初始化菜单
initJFMenuBar();
//初始化数据
initDate();
//初始化图片
initImage();
//设置主界面显示,建议放在最后一行
this.setVisible(true);
}
打包成.exe
准备软件
- Idea:将代码打包成jar包(java形式的压缩包)
- exe4j:将jar包转换成exe的工具。
- innosetup:将游戏用到的图片,Java的运行环境和第二步打包的代码,组合成最终的安装程序。
这里需要的软件在最后我都会分享给大家一个链接,点击下载安装即可。
将代码打包成jar包
1.点击File,再点Project Structure。
2.点击Artifaces。
3.下方图片箭头指向位置应为空白,如果有其他内容,可以选中之后,点击减号删除。
4.选中左侧的Artifacts,点击中间上方位置的+, 点击JAR,点击From modules with dependencies...
如下图所示:
5.Module:选择要打包的项目。
6.Main Class:点击红框最后的那个小图标,项目中是哪个main方法所在的类去启动项目,这里就选择哪个类。我的项目是由com.itkxw.ui.App里面的main方法启动的,所以我就选择com.itkxw.ui.App
7.设置 META-INF/MANIFEST.MF。点击箭头指向的图标进行设置。 然后ok。
8.出现一个puzzlegame:jar的提示。点击右下角的OK。
9.在idea主界面上方,点击Build里面的Build Artifacts。如果是灰色的不能按,请确定在上面第一步~第九步有没有配置好jar包的信息。如果已经配置好了jar的信息,此处就可以正常点击。
10.在主界面正中央。选择puzzlegame:jar。再选择Build。idea会帮我们生成jar包。
11.等页面右下角的进度条结束,jar就已经生成完毕。
12.点击File,再点Project Structure。点击Artifaces。在下图红色框中的路径下,可以找到生成好的jar包。
第一步:代码打包成jar包
第二步:整合资源文件
第三步:将jar包打包成exe
第四步:将jdk、资源文件、jar包转换后的exe三者再次打包成最终的exe。
这些步骤请点击链接获取。
链接:https://pan.baidu.com/s/1BidJgpN8x-jRnktzik0b-g?pwd=nyku
提取码:nyku