在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);
}
}
这会打印一些带有天空图片的瓷砖,但如何使最下面一行成为其他图片
# 1 楼答案
我建议您使用带有图标的
JLabel
,并使用GridLayout
来布局它们带示例代码和屏幕截图的相关问题/答案:
# 2 楼答案
我将2D数组视为非GUI模型,数据本身很可能被保存在一些数据文件中,可能是文本文件,这样就有方法读取数据,这些数据可能是由一个2D数组,也许是int,也许是自定义单元类(再一次,仍然是非GUI)。然后GUI必须解释模型并以某种逻辑方式显示数据。这可能是通过创建一个使用GridLayout的JPAnel所持有的JLabel的二维网格来实现的,然后使用ImageIcons来持有图像,并根据模型的状态设置每个JLabel的图标
编辑1
因此,可能使用的类别包括:
编辑2
关于你的问题:
我会使用观察者/可观察模式,并在模型中添加一个侦听器。因此,每当模型发生更改时,它都应该通知GUI或视图。然后,视图将请求数据数组,在其中进行迭代,并在循环遍历数组时更改需要更改的图像图标