概要
现在需要将图片添加界面中
关键点在于它如何动态地根据游戏状态更新用户界面。它使用了Swing的布局管理器来定位组件,并且通过ImageIcon和JLabel来显示图像。注意,路径字符串中的反斜杠在Java中是转义字符,因此在字符串中使用双反斜杠或者使用正斜杠可以避免潜在的错误。
整体架构流程
1
-
initImage方法首先通过调this.getContentPane().removeAll();清空了当前内容面板上的所有组件。这样做是为了重新绘制界面,确保每次调用时都是全新的状态。
-
接下来,代码检查是否满足胜利条件,这是通过调用victory()方法实现的。如果游戏胜利,就创建一个新的JLabel,并使用ImageIcon加载胜利图片"image\victory.png"。然后设置这个标签的位置和大小,并将其添加到内容面板上。
-
创建一个显示步数的标签stepCount,格式为"步数: "加上变量step的值。同样地,设置位置和大小后,将其添加到内容面板。
-
接下来是一个嵌套循环,用于在界面上放置16个图像块。每个图像块的位置由i和j的值决定,这些值对应于二维数组data中的索引。根据data[i][j]的值,加载相应的.gif文件作为图像,并创建一个新的JLabel来显示它。每个图像块的位置通过计算setBounds方法的参数来确定。
-
创建一个背景标签background,并使用ImageIcon加载背景图片"image\background.png"。设置其位置和大小后,将其添加到内容面板。
-
最后,调用this.getContentPane().repaint();来刷新界面,确保所有的更改都能显示出来。
2
检查一个名为data的二维数组是否与另一个名为win的二维数组完全相同,以确定是否达到胜利条件。函数通过两个嵌套的循环遍历data数组的每个元素,与对应位置的win数组元素进行比较,如果找到任何不相等的元素,则立即返回false表示未达到胜利条件。如果所有元素都相等,循环结束后返回true,表示胜利条件已满足。
代码过程
//清空原本已经出现的所有图片
//如果游戏胜利,显示胜利图片
//显示步数
//循环遍历数组,为每个元素创建对应的图片标签并添加到界面
private void initImage(){
this.getContentPane().removeAll();
if(victory()){
JLable winJLabel = new JLabel(new ImageIcon("图片地址"));
winJLabel.setBounds(203,283,197,73);
this.getContentPane().add(winJLabel);
}
JLabel stepCount = new JLabel("步数:"+step);
stepCount.setBounds(30,20,100,20);
this.getContentPane().add(stepCount);
for(int i = 0 ; i < 4 ; i++){
for(int j = 0 ; j < 4 ; j++){
int num = data[i][j];
JLabel jLabel = new JLabel(new ImageIcon(path+num +".gif"));
//path,这是我的定量地址,我在成员变量的时候定义了
JLabel.setBorder(new BevelBorder(1));
this.getContentPane().add(jLabel);
}
}
}
//遍历data数组的每一行
//遍历data数组的每一列
//比较data和win在当前位置的元素是否相等,如果不相等,返回false
//如果都相等,返回true
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;
}
小结
输出:已更新游戏状态,包括胜利条件。
向界面中添加了图像。