【问题标题】:Write a 2D Array on a JFrame java在 JFrame java 上写一个二维数组
【发布时间】:2011-07-29 18:22:21
【问题描述】:

所以我想知道我是 java 新手,但我知道如何解决它,但我想制作一个 2d 瓷砖游戏。 现在我听说你可以用二维数组来制作地图。 但是如何使地图在屏幕上显示为图片,JFrame? 所以这里有一个数组/映射的例子:

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

这会打印一些带有天空图片的图块,但我如何让底行成为另一张图片?

【问题讨论】:

    标签: java arrays swing multidimensional-array tile


    【解决方案1】:

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

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

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

    编辑 2
    关于你的问题:

    好的,如何为ev​​eryLabel 设置正确的图片?

    我会使用观察者/可观察模式并向模型添加监听器。每当模型发生变化时,它都应该通知 GUI 或视图。然后视图会请求数据数组,遍历它并在遍历数组时更改需要更改的图像图标。

    【讨论】:

    • 有点晚了,但我看到我的想法和aioobe的很相似。 1+ 给他!
    • @JanVos:请参阅上面我的回答中的“编辑 2”。
    • 那个Edit 2 thingy我不太了解它:p可能是因为我缺乏英语或java,但你能举一个小例子吗?还是工作量大?
    • 如果我按照我原来的帖子建议的方式以模型-视图-控制方式进行操作,那就有点工作了。一种想法是使用 HashMap 之类的 Map 将枚举映射到 ImageIcon。
    【解决方案2】:

    我建议您使用带有图标的JLabels 并使用GridLayout 进行布局。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-13
      • 2012-03-08
      • 2013-09-16
      • 1970-01-01
      • 1970-01-01
      • 2017-01-03
      • 2016-08-26
      • 2014-11-11
      相关资源
      最近更新 更多