在JFrame java上编写2D数组

Jan*_*Vos 4 java arrays swing tile multidimensional-array

所以我想知道我是java的新手,但我知道我的方式,但我想做一个2d平铺游戏.现在我听说你可以使用二维数组来制作地图.但是你如何使地图出现在屏幕上,JFrame,作为图片?这里是一个数组/映射的例子:

1111111111
1011011001
1001100011
0000100011
0000000000
2222222222

0 = blueSky.png
1 = cloud.png
2 = grass.png
Run Code Online (Sandbox Code Playgroud)

谢谢! 编辑2 所以我现在有这个:

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

public class Game extends JFrame {

private static final long serialVersionUID = 1L;

    public static void main(String[] args) {
        ImageIcon sky = new ImageIcon ("/Users/pro/Desktop/sky.png");

        JPanel grid = new JPanel();
        grid.setLayout(new GridLayout(25, 25));
        for (int i = 0; i < 25; i++) {
            for (int n = 0; n < 25; n++) {
                grid.add(new JLabel(sky));
            }
        }
        JFrame frame = new JFrame("Map");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //frame.setPreferredSize(new Dimension(640, 400));
        frame.add(grid);
        frame.pack();
        frame.setVisible(true);
    }
}
Run Code Online (Sandbox Code Playgroud)

这会打印一些带有天空图片的瓷砖,但我如何将底行另一张图片?

Hov*_*els 5

我认为2D数组是非GUI模型,数据本身可能会保存在某些数据文件中,也许是文本文件中,可能有读取数据的方法由2D数组保存.也许是整数,也许是自定义Cell类(再次,仍然是所有非GUI).然后,GUI必须解释模型并以某种逻辑方式显示数据.这可以通过创建由JPAnel持有的JLabel的2D网格来完成,该网格使用GridLayout,然后使用ImageIcons来保存图像,并基于模型的状态设置每个JLabel的图标.

编辑1
因此可能使用的类包括:

  • TileType:将tile概念与数据文件保存的数字相关联的枚举
  • TileCell:非GUI类,持有TileType字段,也可以保存可以在单元格上找到的项目列表(如果游戏需要这个).可能有关于其邻居的信息.
  • TileCellGrid:非GUI类,包含TileCells的2D网格.
  • GridDataIO:用于读入和写出网格数据到文件的实用程序类.
  • GameGrid:使用JPanel保存GridLayout的GUI类,其中包含JIabel,其ImageIcons显示您在OP中列出的图像.

编辑2
关于您的问题:

好吧,我怎么能为每个标签设置正确的图片?

我会使用观察者/可观察模式并为模型添加一个监听器.每当模型改变时,它应该通知GUI或视图.然后视图将请求数据数组,将迭代它并将更改在循环通过数组时需要更改的图像图标.

  • 有点太晚了,但我看到我的想法与aioobe的相似.1+给他! (5认同)