Java - Заполнение макета сетки JButtons на основе индексов в массиве

Есть ли способ создать массив с индексами, чтобы я мог использовать макет сетки для быстрого создания кнопок J только в тех индексах, которые мне нужны. Я делаю игровую доску для проекта и пытаюсь сделать это максимально безболезненно, а GUI - не самая сильная моя особенность.

// Set the height to the number of rows, length to number of columns
setLayout(new GridLayout(mineGrid.length, mineGrid[0].length);
  // For each row
  for (int rowIndex = 0; rowIndex < mineGrid.length; rowIndex++) {
   // For each column
   for (int colIndex = 0; colIndex < mineGrid[0].length; colIndex++) {
    // Add the button, because of GridLayout it starts @ the top row, goes across left to right, down a row, across left to right, etc.
    add(mineGrid[rowIndex][colIndex];
    }
   }

Этот код, который я нашел, касался игры тральщика и на самом деле ставит мины, но я не уверен, что это применимо к той же концепции. Чтобы сделать это немного более понятным, я имею в виду, например, что я хочу сделать сетку размером 25x25 и не хочу делать JButtons для индексов (5,2),(7,6),(24,25) Есть ли способ исключить эти кнопки? Или было бы проще удалить их вручную.

Для моего применения этого процесса мне потребуется исключить более 3 индексов, поэтому, если вы решите ответить, подумайте об этом в большем масштабе, около 25 или более высоких индексов.

1 ответ

Вы можете создать массив типа Point и добавить координаты точек, которые вы хотите опустить.

Затем, прежде чем добавлять шахту, просто убедитесь, что рассматриваемый квадрат не является одной из тех точек, которые вы хотите опустить

Point[] exclude = new Point[numPointsToExclude];
//Here you would determine what are the points you want to exclude and add them to the array in the starting top row, goes across left to right, down a row, across left to right, etc.
int i = 0;

// Set the height to the number of rows, length to number of columns
setLayout(new GridLayout(mineGrid.length, mineGrid[0].length);   

// For each row
for (int rowIndex = 0; rowIndex < mineGrid.length; rowIndex++) {
    // For each column
    for (int colIndex = 0; colIndex < mineGrid[0].length; colIndex++) {
        // Add the button, because of GridLayout it starts @ the top row, goes across left to right, down a row, across left to right, etc.

        if (new Point(colIndex, rowIndex).equals(exclude[i]) {
            i++;
            continue;
        }

        add(mineGrid[rowIndex][colIndex];

    }   
 }
Другие вопросы по тегам