Я бы рассматривал двумерный массив как модель без графического интерфейса пользователя, что сами данные, скорее всего, будут храниться в каком-то файле данных, возможно, в текстовом файле, что будут методы чтения данных, которые будут храниться 2D массив, возможно, целых, возможно, пользовательских классов Cell (опять же, все они не-GUI). Тогда графический интерфейс должен был бы интерпретировать модель и отображать данные некоторым логическим способом. Возможно, это можно сделать путем создания 2D-сетки JLabels, хранящейся в JPAnel, которая использует GridLayout, а затем использовать ImageIcons для хранения изображений и установки значка каждого JLabel в зависимости от состояния модели.
Редактировать 1
Возможные классы включают в себя:
- TileType: перечисление, которое связывает концепцию тайла с числами, содержащимися в файле данных
- TileCell: класс не-GUI, содержит поле TileType, также может содержать список элементов, которые можно найти в ячейке (если игра нуждается в этом). Может иметь информацию о своих соседях.
- TileCellGrid: класс без графического интерфейса, содержащий 2D-сетку TileCells.
- GridDataIO: служебный класс для чтения и записи данных сетки в файл.
- GameGrid: класс GUI, который будет содержать GridLayout с использованием JPanel, который содержит JLabels, чьи ImageIcons отображают изображения, которые вы перечисляете в своем OP.
Редактировать 2
относительно вашего вопроса:
Хорошо, как я могу установить правильное изображение для каждого ярлыка?
Я бы использовал шаблон наблюдателя / наблюдаемого и добавил бы слушателя к модели. Всякий раз, когда модель изменяется, она должна уведомить GUI или представление. Затем представление будет запрашивать массив данных, выполнять итерацию по нему и изменять значки изображений, которые необходимо изменить, по мере его прохождения по массиву.