主界面GameJFrame源码:
//创建一个主界面
public class GameJFrame extends JFrame {
public GameJFrame(){
this.setSize(603,680);
this.setVisible(true);
}
}
登录界面 LoginJFrame源码:
//登录界面
public class LoginJFrame extends JFrame {
public LoginJFrame(){
this.setSize(488,433);
this.setVisible(true);
}
}
注册界面 RegisterJFrame源码:
//注册界面
public class RegisterJFrame extends JFrame {
public RegisterJFrame(){
this.setSize(488,500);
this.setVisible(true);
}
}
3.在src目录下创建一个主程序运行入口APP,源码如下(简单调用以上三个界面):
public class App {
public static void main(String[] args) {
new LoginJFrame();
new GameJFrame();
new RegisterJFrame();
}
}
1.IDEA抽取方法快捷键:ctrl+alt+m
2.首先初始界面,设置标题,置顶,居中,关闭模式
3.设置菜单(JMenu),分别创建主菜单对象,选项对象,条目对象,层层封装
GameJFrame实现初始化界面和初始化菜单,源码更新为:
//创建一个主界面
public class GameJFrame extends JFrame {
public GameJFrame() {
//初始化界面
initJFrame();
//初始化菜单
initJMenuBar();
//让界面显示
this.setVisible(true);
}
private void initJMenuBar() {
JMenuBar jMenuBar = new JMenuBar();
//创建两个菜单选项的对象
JMenu functionJmMnu = new JMenu("功能");
JMenu aboutJmMnu = new JMenu("关于我们");
//创建选项下面的条目对象
JMenuItem replayItem = new JMenuItem("重新游戏");
JMenuItem reLoginItem = new JMenuItem("重新登录");
JMenuItem closeItem = new JMenuItem("关闭游戏");
JMenuItem accountItem = new JMenuItem("公众号");
//将每个条目添加到选项中
functionJmMnu.add(replayItem);
functionJmMnu.add(reLoginItem);
functionJmMnu.add(closeItem);
aboutJmMnu.add(accountItem);
//将选项添加到菜单中
jMenuBar.add(functionJmMnu);
jMenuBar.add(aboutJmMnu);
//给整个界面设置菜单
this.setJMenuBar(jMenuBar);
}
private void initJFrame() {
//设置界面的宽高
this.setSize(603, 680);
this.setTitle("拼图单机版 v1.0");//设置界面的标题
this.setAlwaysOnTop(true);//置顶
this.setLocationRelativeTo(null);//居中
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//设置关闭模式
}
}
LoginJFrame和RegisterJFrame暂时只需要实现初始化界面即可,此处略
1.添加素材包image在项目下
2.在初始化菜单后面添加初始化图片方法:initImage();
实现将15张图片放入注界面。
private void initImage() {
int number = 1;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
//创建一个图片ImageIcon的对象
//创建一个JLable的对象
JLabel jLabel = new JLabel(new ImageIcon("G:\\JavaReview\\puzzlegame\\image\\animal\\animal3\\"+number+".jpg"));
//指定图片位置
jLabel.setBounds(105 * j, 105 * i, 105, 105);
//将管理容器添加到界面
this.getContentPane().add(jLabel);
number++;
}
}
}
在初始化主界面方法initJFrame()中添加一段代码:取消图片默认居中
//取消默认的居中放置
this.setLayout(null);
1.在初始化菜单后面添加一个初始化数据方法initData();得到一个数据打乱的二维数组,作为调取图片的索引。
private void initData() {
int[] tempArr = new int[]{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 < 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++) {
data[i / 4][i % 4] = tempArr[i];
}
}
2.对initImage()方法进行修改:
private void initImage() {
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
int num = data[i][j];
//创建一个图片ImageIcon的对象
//创建一个JLable的对象
JLabel jLabel = new JLabel(new ImageIcon("G:\\JavaReview\\puzzlegame\\image\\animal\\animal3\\" + num + ".jpg"));
//指定图片位置
jLabel.setBounds(105 * j, 105 * i, 105, 105);
//将管理容器添加到界面
this.getContentPane().add(jLabel);
}
}
}
可以在注界面查看到被打乱的图片。
介绍以下三种监听方式(分别描述了示例代码,不是项目内容):
public class MyJFrame extends JFrame implements ActionListener {
JButton jtb1 = new JButton("点我");
JButton jtb2 = new JButton("点我");
public MyJFrame(){
//设置界面的宽高
this.setSize(603, 680);
this.setTitle("拼图单机版 v1.0");//设置界面的标题
this.setAlwaysOnTop(true);//置顶
this.setLocationRelativeTo(null);//居中
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//设置关闭模式
//取消默认的居中放置
this.setLayout(null);
//设置宽高
jtb1.setBounds(0,0,100,50);
jtb1.addActionListener(this);
//设置宽高
jtb2.setBounds(100,0,100,50);
jtb2.addActionListener(this);
this.getContentPane().add(jtb1);
this.getContentPane().add(jtb2);
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if (source == jtb1){
jtb1.setSize(200,200);
}else if (source== jtb2){
Random r = new Random();
jtb2.setLocation(r.nextInt(500),r.nextInt(500));
}
}
}
public class MyJFrame2 extends JFrame implements MouseListener {
JButton jtb1 = new JButton("点我");
JButton jtb2 = new JButton("点我");
public MyJFrame2(){
//设置界面的宽高
this.setSize(603, 680);
this.setTitle("拼图单机版 v1.0");//设置界面的标题
this.setAlwaysOnTop(true);//置顶
this.setLocationRelativeTo(null);//居中
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//设置关闭模式
//取消默认的居中放置
this.setLayout(null);
//设置宽高
jtb1.setBounds(0,0,100,50);
jtb1.addMouseListener(this);
//设置宽高
jtb2.setBounds(100,0,100,50);
this.getContentPane().add(jtb1);
this.getContentPane().add(jtb2);
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("划出");
}
}
public class MyJFrame3 extends JFrame implements KeyListener {
public MyJFrame3(){
//设置界面的宽高
this.setSize(603, 680);
this.setTitle("拼图单机版 v1.0");//设置界面的标题
this.setAlwaysOnTop(true);//置顶
this.setLocationRelativeTo(null);//居中
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//设置关闭模式
//取消默认的居中放置
this.setLayout(null);
this.addKeyListener(this);
this.setVisible(true);
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
System.out.println("按下");
}
@Override
public void keyReleased(KeyEvent e) {
System.out.println("松开");
int keyCode = e.getKeyCode();
System.out.println(keyCode);
if (keyCode == 65){
System.out.println("现在按的是A");
}
}
}
1.将15张小图片移动到界面的中央偏下方
2.添加了背景图片
3.添加了图片的边框
4.优化路径,由绝对路径改成了相对路径
只对initImage()方法进行了修改
private void initImage() {
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
int num = data[i][j];
//创建一个图片ImageIcon的对象
//创建一个JLable的对象
JLabel jLabel = new JLabel(new ImageIcon("..\\puzzlegame\\image\\animal\\animal3\\" + num + ".jpg"));
//指定图片位置
jLabel.setBounds(105 * j+83, 105 * i+134, 105, 105);
//给图片添加边框
jLabel.setBorder(new BevelBorder(BevelBorder.LOWERED));
//将管理容器添加到界面
this.getContentPane().add(jLabel);
}
}
//添加背景图片
JLabel background = new JLabel(new ImageIcon("..\\puzzlegame\\image\\background.png"));
background.setBounds(40,40,508,560);
//添加背景图到界面
this.getContentPane().add(background);
}
目前的效果图:
1.在GameJFrame类中实现KeyListener接口,并重写所有抽象方法。
2.给界面添加键盘监听事件
3.统计下空白方块0在二维数组中的位置
4.在keyReleased方法中实现移动的逻辑
GameJFrame类更新为:
//创建一个主界面
public class GameJFrame extends JFrame implements KeyListener {
//创建二维数组
int[][] data = new int[4][4];
//空白方块的位置
int x = 0;
int y = 0;
public GameJFrame() {
//初始化界面
initJFrame();
//初始化菜单
initJMenuBar();
//初始化数据(打乱)
initData();
//初始化图片
initImage();
//让界面显示
this.setVisible(true);
}
private void initData() {
int[] tempArr = new int[]{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 < 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 / 4;
y = i % 4;
} else {
data[i / 4][i % 4] = tempArr[i];
}
}
}
private void initImage() {
//清除所有图片
this.getContentPane().removeAll();
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
int num = data[i][j];
//创建一个图片ImageIcon的对象
//创建一个JLable的对象
JLabel jLabel = new JLabel(new ImageIcon("..\\puzzlegame\\image\\animal\\animal3\\" + num + ".jpg"));
//指定图片位置
jLabel.setBounds(105 * j + 83, 105 * i + 134, 105, 105);
//给图片添加边框
jLabel.setBorder(new BevelBorder(BevelBorder.LOWERED));
//将管理容器添加到界面
this.getContentPane().add(jLabel);
}
}
//添加背景图片
JLabel background = new JLabel(new ImageIcon("..\\puzzlegame\\image\\background.png"));
background.setBounds(40, 40, 508, 560);
//添加背景图到界面
this.getContentPane().add(background);
//刷新界面
this.getContentPane().repaint();
}
private void initJMenuBar() {
JMenuBar jMenuBar = new JMenuBar();
//创建两个菜单选项的对象
JMenu functionJmMnu = new JMenu("功能");
JMenu aboutJmMnu = new JMenu("关于我们");
//创建选项下面的条目对象
JMenuItem replayItem = new JMenuItem("重新游戏");
JMenuItem reLoginItem = new JMenuItem("重新登录");
JMenuItem closeItem = new JMenuItem("关闭游戏");
JMenuItem accountItem = new JMenuItem("公众号");
//将每个条目添加到选项中
functionJmMnu.add(replayItem);
functionJmMnu.add(reLoginItem);
functionJmMnu.add(closeItem);
aboutJmMnu.add(accountItem);
//将选项添加到菜单中
jMenuBar.add(functionJmMnu);
jMenuBar.add(aboutJmMnu);
//给整个界面设置菜单
this.setJMenuBar(jMenuBar);
}
private void initJFrame() {
//设置界面的宽高
this.setSize(603, 680);
this.setTitle("拼图单机版 v1.0");//设置界面的标题
this.setAlwaysOnTop(true);//置顶
this.setLocationRelativeTo(null);//居中
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//设置关闭模式
//取消默认的居中放置
this.setLayout(null);
//给整个界面添加键盘监听事件
this.addKeyListener(this);
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
int keyCode = e.getKeyCode();
if (keyCode==37){
System.out.println("向左移动");
if (y==3){
return;
}
data[x][y] = data[x][y+1];
data[x][y+1] = 0;
y++;
initImage();
} else if (keyCode==38) {
System.out.println("向上移动");
if (x==3){
return;
}
data[x][y] = data[x+1][y];
data[x+1][y] = 0;
x++;
initImage();
}else if (keyCode==39) {
System.out.println("向右移动");
if (y==0){
return;
}
data[x][y] = data[x][y-1];
data[x][y-1] = 0;
y--;
initImage();
}else if (keyCode==40) {
System.out.println("向下移动");
if (x==0){
return;
}
data[x][y] = data[x-1][y];
data[x-1][y] = 0;
x--;
initImage();
}
}
}
1.查看完整图片,通过重写keyPressed()方法,写入监听事件:当长按A时,显示完整图片
2.作弊码:在keyReleased()方法中重写,当按下W键时,将正确的二维数组的坐标赋值给data.
3.判断胜利:新增了一个victory()方法,判断当前数组的坐标和胜利数组win的坐标是否一致。
更新后的GameJFrame类为:
//创建一个主界面
public class GameJFrame extends JFrame implements KeyListener {
//创建二维数组
int[][] data = new int[4][4];
//空白方块的位置
int x = 0;
int y = 0;
//定义一个变量,记录当前图片的路径
String path = "..\\puzzlegame\\image\\animal\\animal3\\";
int[][] win = new int[][]{
{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
{13,14,15,0}
};
public GameJFrame() {
//初始化界面
initJFrame();
//初始化菜单
initJMenuBar();
//初始化数据(打乱)
initData();
//初始化图片
initImage();
//让界面显示
this.setVisible(true);
}
private void initData() {
int[] tempArr = new int[]{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 < 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 / 4;
y = i % 4;
} else {
data[i / 4][i % 4] = tempArr[i];
}
}
}
private void initImage() {
//清除所有图片
this.getContentPane().removeAll();
if (victory()){
//显示胜利
JLabel winJLabel = new JLabel(new ImageIcon("G:\\JavaReview\\puzzlegame\\image\\win.png"));
winJLabel.setBounds(203,283,197,73);
this.getContentPane().add(winJLabel);
}
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
int num = data[i][j];
//创建一个图片ImageIcon的对象
//创建一个JLable的对象
JLabel jLabel = new JLabel(new ImageIcon(path + num + ".jpg"));
//指定图片位置
jLabel.setBounds(105 * j + 83, 105 * i + 134, 105, 105);
//给图片添加边框
jLabel.setBorder(new BevelBorder(BevelBorder.LOWERED));
//将管理容器添加到界面
this.getContentPane().add(jLabel);
}
}
//添加背景图片
JLabel background = new JLabel(new ImageIcon("..\\puzzlegame\\image\\background.png"));
background.setBounds(40, 40, 508, 560);
//添加背景图到界面
this.getContentPane().add(background);
//刷新界面
this.getContentPane().repaint();
}
private void initJMenuBar() {
JMenuBar jMenuBar = new JMenuBar();
//创建两个菜单选项的对象
JMenu functionJmMnu = new JMenu("功能");
JMenu aboutJmMnu = new JMenu("关于我们");
//创建选项下面的条目对象
JMenuItem replayItem = new JMenuItem("重新游戏");
JMenuItem reLoginItem = new JMenuItem("重新登录");
JMenuItem closeItem = new JMenuItem("关闭游戏");
JMenuItem accountItem = new JMenuItem("公众号");
//将每个条目添加到选项中
functionJmMnu.add(replayItem);
functionJmMnu.add(reLoginItem);
functionJmMnu.add(closeItem);
aboutJmMnu.add(accountItem);
//将选项添加到菜单中
jMenuBar.add(functionJmMnu);
jMenuBar.add(aboutJmMnu);
//给整个界面设置菜单
this.setJMenuBar(jMenuBar);
}
private void initJFrame() {
//设置界面的宽高
this.setSize(603, 680);
this.setTitle("拼图单机版 v1.0");//设置界面的标题
this.setAlwaysOnTop(true);//置顶
this.setLocationRelativeTo(null);//居中
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//设置关闭模式
//取消默认的居中放置
this.setLayout(null);
//给整个界面添加键盘监听事件
this.addKeyListener(this);
}
@Override
public void keyTyped(KeyEvent e) {
}
//按下不松时调用
@Override
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
if (keyCode==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("..\\puzzlegame\\image\\background.png"));
background.setBounds(40, 40, 508, 560);
//添加背景图到界面
this.getContentPane().add(background);
//刷新界面
this.getContentPane().repaint();
}
}
@Override
public void keyReleased(KeyEvent e) {
//胜利后结束方法
if (victory()){
return;
}
int keyCode = e.getKeyCode();
if (keyCode==37){
System.out.println("向左移动");
if (y==3){
return;
}
data[x][y] = data[x][y+1];
data[x][y+1] = 0;
y++;
initImage();
} else if (keyCode==38) {
System.out.println("向上移动");
if (x==3){
return;
}
data[x][y] = data[x+1][y];
data[x+1][y] = 0;
x++;
initImage();
}else if (keyCode==39) {
System.out.println("向右移动");
if (y==0){
return;
}
data[x][y] = data[x][y-1];
data[x][y-1] = 0;
y--;
initImage();
}else if (keyCode==40) {
System.out.println("向下移动");
if (x==0){
return;
}
data[x][y] = data[x-1][y];
data[x-1][y] = 0;
x--;
initImage();
}else if (keyCode==65){
initImage();
}else if(keyCode==87){
data = new int[][]{
{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
{13,14,15,0}
};
initImage();
}
}
//判断胜利
public 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]){
return false;
}
}
}
return true;
}
}
1.计步,设置一个全局变量step,在图片移动模块中计步,在
if (keyCode==37){
System.out.println("向左移动");
if (y==3){
return;
}
data[x][y] = data[x][y+1];
data[x][y+1] = 0;
y++;
//计步器
step++;
initImage();
}
在initImage中添加计步显示:
JLabel stepCount = new JLabel("步数:"+step);
stepCount.setBounds(50,30,100,20);
this.getContentPane().add(stepCount);
2.菜单业务实现:
//创建选项下面的条目对象
JMenuItem replayItem = new JMenuItem("重新游戏");
JMenuItem reLoginItem = new JMenuItem("重新登录");
JMenuItem closeItem = new JMenuItem("关闭游戏");
JMenuItem accountItem = new JMenuItem("公众号");
3.给条目绑定事件
//给条目绑定事件
replayItem.addActionListener(this);
reLoginItem.addActionListener(this);
closeItem.addActionListener(this);
accountItem.addActionListener(this);
4. 在重写的actionPerformed()中分别实现重新游戏,重新登录,关闭游戏,关于我们的业务功能。(修复bug:在initData方法中,对空白块的数值录入的零坐标的覆盖)
public 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 == accountItem){
System.out.println("公众号");
//创建一个弹框对象
JDialog jDialog = new JDialog();
//创建一个管理图片的容器对象JLabel
JLabel jLabel = new JLabel(new ImageIcon("..\\puzzlegame\\image\\about.png"));
//设置位置和宽高
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 == closeItem){
System.out.println("关闭游戏");
//关闭虚拟机即可
System.exit(0);
}
}
LoginJFrame类的完整代码:
//登录界面
public class LoginJFrame extends JFrame implements MouseListener {
//创建用户
static ArrayList list = new ArrayList();
static {
list.add(new User("张三", "123"));
list.add(new User("李四", "1234"));
}
//登录
JButton login = new JButton();
//添加用户户名输入框
JTextField username = new JFormattedTextField();
//密码输入框
JPasswordField password = new JPasswordField();
//验证码输入框
JTextField code = new JFormattedTextField();
//正确验证码
String codeStr = CodeUtil.getCode();
//正确验证码模块
JLabel rightCode = new JLabel();
//5.添加注册按钮
JButton register = new JButton();
public LoginJFrame() {
//初始化界面
initJFrame();
//在界面添加内容
initView();
this.setVisible(true);
}
private void initView() {
//添加用户名文字
JLabel usernameText = new JLabel(new ImageIcon("G:\\JavaReview\\puzzlegame\\image\\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("G:\\JavaReview\\puzzlegame\\image\\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("G:\\JavaReview\\puzzlegame\\image\\login\\验证码.png"));
codeText.setBounds(133, 256, 50, 30);
this.getContentPane().add(codeText);
code.setBounds(195, 256, 100, 30);
this.getContentPane().add(code);
//设置内容
rightCode.setText(codeStr);
//设置宽高
rightCode.setBounds(300, 256, 50, 30);
//添加到界面
this.getContentPane().add(rightCode);
//添加刷新验证码
rightCode.addMouseListener(this);
//5.设置登录按钮n
login.setBounds(123, 310, 128, 47);
login.setIcon(new ImageIcon("G:\\JavaReview\\puzzlegame\\image\\login\\登录按钮.png"));
//去除按钮的边框
login.setBorderPainted(false);
//去除按钮的背景
login.setContentAreaFilled(false);
this.getContentPane().add(login);
//添加点击事件
login.addMouseListener(this);
register.setBounds(256, 310, 128, 47);
register.setIcon(new ImageIcon("G:\\JavaReview\\puzzlegame\\image\\login\\注册按钮.png"));
//去除按钮的边框
register.setBorderPainted(false);
//去除按钮的背景
register.setContentAreaFilled(false);
this.getContentPane().add(register);
//添加点击事件
register.addMouseListener(this);
//7.添加背景图片
JLabel background = new JLabel(new ImageIcon("G:\\JavaReview\\puzzlegame\\image\\login\\background.png"));
background.setBounds(0, 0, 470, 390);
this.getContentPane().add(background);
}
private void initJFrame() {
this.setSize(488, 430);
this.setTitle("拼图 注册");//设置界面的标题
this.setAlwaysOnTop(true);//置顶
this.setLocationRelativeTo(null);//居中
this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//设置关闭模式
this.setLayout(null);//取消默认布局
}
public void showJDialog(String content) {
//创建对象
JDialog jDialog = new JDialog();
//设置大小
jDialog.setSize(200, 200);
//置顶
jDialog.setAlwaysOnTop(true);
//居中
jDialog.setLocationRelativeTo(null);
//锁定
jDialog.setModal(true);
//创建警告文字对象
JLabel warning = new JLabel(content);
warning.setBounds(0, 0, 200, 200);
jDialog.getContentPane().add(warning);
//让弹框展示
jDialog.setVisible(true);
}
private boolean contains(ArrayList list,User user) {
for (int i = 0; i < list.size(); i++) {
User user1 = list.get(i);
if ((user1.getUsername().equals(user.getUsername())) && (user1.getPassword().equals(user.getPassword()))) {
return true;
}
}
return false;
}
@Override
public void mouseClicked(MouseEvent e) {
Object obj = e.getSource();
if (obj == login) {
String usernameText = username.getText();
String passwordText = password.getText();
User userInput = new User(usernameText,passwordText);
String codeText = code.getText();
if (usernameText.isEmpty() || passwordText.isEmpty()) {
showJDialog("用户名或密码为空!!!");
} else {
if (codeText.equalsIgnoreCase(codeStr)){
if (contains(list,userInput)){
System.out.println("success");
this.setVisible(false);
new GameJFrame();
}else {
showJDialog("用户名不存在!");
}
}else {
showJDialog("验证码错误!");
}
}
}else if (obj == rightCode){
System.out.println("更新验证码");
codeStr = CodeUtil.getCode();
//设置内容
rightCode.setText(codeStr);
}else if (obj == register){
showJDialog("当前不支持注册!但提供测试账号:张三,密码:123");
// new RegisterJFrame();
}
}
//按下不松
@Override
public void mousePressed(MouseEvent e) {
Object click = e.getSource();
if (click == login) {
login.setIcon(new ImageIcon("G:\\JavaReview\\puzzlegame\\image\\login\\登录按下.png"));
}else if (click == register){
register.setIcon(new ImageIcon("G:\\JavaReview\\puzzlegame\\image\\login\\注册按下.png"));
}
}
//松开
@Override
public void mouseReleased(MouseEvent e) {
Object click = e.getSource();
if (click == login) {
login.setIcon(new ImageIcon("G:\\JavaReview\\puzzlegame\\image\\login\\登录按钮.png"));
}else if (click == register){
register.setIcon(new ImageIcon("G:\\JavaReview\\puzzlegame\\image\\login\\注册按钮.png"));
}
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
}
使用IDEA签名打包即可