在JFrame java上编写一个2D数组



所以我想知道我是java新手,但我知道我的方式,但我想做一个2d贴图游戏。现在我听说你可以用2d Array来制作地图。但是如何让地图以图片的形式出现在屏幕上呢?这里有一个数组/map的例子:

1111111111
1011011001
1001100011
0000100011
0000000000
2222222222
0 = blueSky.png
1 = cloud.png
2 = grass.png

谢谢!编辑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);
    }
}

这打印一些瓷砖与天空的图片,但我如何使底部一行的另一个图片?

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

编辑1
所以可能使用的类包括:

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

编辑2
关于你的问题:

如何为everyLabel设置正确的图片?

我将使用观察者/可观察模式,并向模型添加侦听器。无论何时模型发生变化,它都应该通知GUI或视图。然后,视图将请求数据数组,迭代它,并在循环数组时更改需要更改的图像图标。

我建议你使用带有图标的JLabel s,并使用GridLayout来布局它们。

相关问题/答案与示例代码和屏幕截图:

  • swing中的平铺图像

相关内容

  • 没有找到相关文章

最新更新