有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在JFrame java上编写2D数组

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

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);
    }
}

这会打印一些带有天空图片的瓷砖,但如何使最下面一行成为其他图片


共 (2) 个答案

  1. # 1 楼答案

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

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

  2. # 2 楼答案

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

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

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

    编辑2
    关于你的问题:

    Alright how can i set the right picture for everyLabel ?

    我会使用观察者/可观察模式,并在模型中添加一个侦听器。因此,每当模型发生更改时,它都应该通知GUI或视图。然后,视图将请求数据数组,在其中进行迭代,并在循环遍历数组时更改需要更改的图像图标