ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

用java实现扫雷小游戏,不再枯燥学语法(二)

2020-01-15 12:39:58  阅读:385  来源: 互联网

标签:java 枯燥 单元格 GridBagConstraints 小游戏 方格 frame new public


写在开始

上一篇博客的链接为:用java实现扫雷小游戏,不再枯燥学语法(一)

任务清单

博主做这个项目给自己列的任务清单如下:

任务一:创建窗口(已完成)

任务二:窗口布局

任务三:定义数据结构

任务四:实现游戏的基础功能(布雷,查雷,排雷,判定输赢)

任务五:辅助功能(待开数,已开数,游戏重开,计时器)

代码实现

Windows.java

package game;

import javax.swing.*;
import java.awt.*;

import static game.Game.*;

public class Windows{

//  创建公共静态对象方便调用
    public static JFrame frame=new JFrame();
    public static JButton jButton=new JButton();
    public static JLabel label1=new JLabel("待开:"+UNOPEN);
    public static JLabel label2=new JLabel("已开:"+OPENED);
    public static JLabel label3=new JLabel("用时:"+second+"s");

//  创建窗口
    public void createWindows(){
//      定义窗口大小(600*700)
        frame.setSize(600,700);
//      窗口是否可以改变大小
        frame.setResizable(false);
//      点击可关闭
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//      设置窗口布局
        frame.setLayout(new BorderLayout());
//      显示窗口
        frame.setVisible(true);
    }

    //  创建的按钮放窗口顶部
    public void setHeader(){
//      创建布局
        JPanel panel=new JPanel(new GridBagLayout());
        GridBagConstraints c1=new GridBagConstraints(0,0,3,1,1.0,1.0,GridBagConstraints.CENTER,GridBagConstraints.BOTH,new Insets(0,0,0,0),0,0);
        panel.add(jButton,c1);

//      设置透明度
        label1.setOpaque(true);
//      设置背景色
        label1.setBackground(Color.white);
//      设置边框颜色
        label1.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY));
//      label2、label3同理
        label2.setOpaque(true);
        label2.setBackground(Color.white);
        label2.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY));
        label3.setOpaque(true);
        label3.setBackground(Color.white);
        label3.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY));
//      设置三个状态显示栏
        GridBagConstraints c2=new GridBagConstraints(0,1,1,1,1.0,1.0,GridBagConstraints.CENTER,GridBagConstraints.BOTH,new Insets(0,0,0,0),0,0);
        panel.add(label1,c2);
        GridBagConstraints c3=new GridBagConstraints(1,1,1,1,1.0,1.0,GridBagConstraints.CENTER,GridBagConstraints.BOTH,new Insets(0,0,0,0),0,0);
        panel.add(label2,c3);
        GridBagConstraints c4=new GridBagConstraints(2,1,1,1,1.0,1.0,GridBagConstraints.CENTER,GridBagConstraints.BOTH,new Insets(0,0,0,0),0,0);
        panel.add(label3,c4);
//      添加至布局的上方
        frame.add(panel,BorderLayout.NORTH);
    }

//  设置按钮
    public void setButtons(){
//      创建容器
        Container container=new Container();
//      创建布局
        container.setLayout(new GridLayout(ROW,COL));
//      添加至整体布局的中央
        frame.add(container,BorderLayout.CENTER);
//      创建按钮
        for(int i=0;i<ROW;i++){
            for(int j=0;j<COL;j++){
                JButton btn=new JButton();
                btn.setOpaque(true);
                btn.setBackground(Color.yellow);
                container.add(btn);
                buttons[i][j]=btn;
            }
        }
    }

总结

这一部分主要就是运用swing组件和awt组件进行界面的布局,教程中用到的两种布局一种是GridBagLayout,另一种是GridLayout。

GridBagLayout设计理念是将父容器看作一个表格,表格中单元格的长宽可根据需求调整,通过竖线和横线的位置,来调整单元格大小,而不是、任意的设置单元格大小,组件可以放在一个或多个连续的单元格中,且这些连续单元格最后所构成的区域必须是一个方形区域。

比如说:我们想要完成这样的一个布局,如下图所示,我们该怎么做呢?

在这里插入图片描述
先来看一下GridBagLayout中GridBagConstraints的参数属性

变量名 作用
gridx 方格左上角单元格所在行号,行号在表格中以0开始,从左到右依次编号
gridy 方格左上角单元格所在列号,列号在表格中以0开始,从上到下依次编号
gridwidth 方格在横向占用的单元格数
gridheight 方格在纵向占用的单元格数
weightx 方格的长与表格长(即父容器的长)的比例,若为0,则为组件默认长度
weighty 方格的宽与表格宽(即父容器的宽)的比例,若为0,则为组件默认宽度

如下图所示,父容器被分割成3*3的表格,然后在该容器中分别放了方格1,方格2,方格3,以方格3为例,参数为:

gridx=0,gridy=2,gridwidth=2,gridheight=1,weightx=0.2,weighty=0.5

在这里插入图片描述
那么GridLayout又是一个什么样的布局呢?

GridLayout就是传统的网格布局,你只需要定义几行几列然后去依次添加组件就行了,十分方便。

结语

如果说这篇文章有让你学到一定的知识的话,不妨点个赞和关注,让博主能够看到。如果讲解中有什么错误和疏忽,也劳烦在评论中指出或提问,博主会第一时间进行更新和答复,谢谢!

职业工具人 发布了6 篇原创文章 · 获赞 9 · 访问量 121 私信 关注

标签:java,枯燥,单元格,GridBagConstraints,小游戏,方格,frame,new,public
来源: https://blog.csdn.net/weixin_44018540/article/details/103985013

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有