Создать 2D-массив на JFrame Java - PullRequest
4 голосов
/ 29 июля 2011

Так что мне было интересно, что я новичок в java, но я знаю, как это сделать, но я хотел сделать 2d игру на плитке.Теперь я слышал, что вы можете сделать это с 2d Array, чтобы сделать карту.Но как заставить карту отображаться на экране 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);
    }
}

это печатает некоторые плитки с изображением неба, но как сделать нижний ряд другой картинкой?

Ответы [ 2 ]

5 голосов
/ 29 июля 2011

Я бы рассматривал двумерный массив как модель без графического интерфейса пользователя, что сами данные, скорее всего, будут храниться в каком-то файле данных, возможно, в текстовом файле, что будут методы чтения данных, которые будут храниться 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 или представление. Затем представление будет запрашивать массив данных, выполнять итерацию по нему и изменять значки изображений, которые необходимо изменить, по мере его прохождения по массиву.

4 голосов
/ 29 июля 2011

Я предлагаю вам использовать JLabel s с иконками и разметить их, используя GridLayout.

Соответствующий вопрос / ответ с примером кода и снимком экрана:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...