用java实现扫雷小游戏,不再枯燥学语法(二)
作者:互联网
写在开始
上一篇博客的链接为:用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