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