import javax.swing.*;
import java.awt.*;
import java.util.*;
public class GridPanel extends JPanel
{
private static ArrayList<JPanel> cellList;
public static JPanel cell;
public GridPanel(int cols, int rows)
{
setLayout(new GridLayout(rows, cols));
setBorder(BorderFactory.createEtchedBorder());
cellList = new ArrayList<JPanel>();
for(int i=0; i<cols; i++)
for(int j=0; j<rows; j++)
{
cell = new JPanel();
cell.setBorder(BorderFactory.createEtchedBorder());
cellList.add(cell);
add(cell);
}
}
}
Se os painéis estão dentro da Lista, basta buscá-los pelo número de índice deles e mudar a característica que vc quiser:
public void setCorFundoPanel(int nrPanel, Color cor){
if(nrPanel<cellList.size()){
cell = cellList.get(nrPanel);
cell.setBackground(cor);
}
}
O problema é que vc criou uma matriz de painéis que roda linha e coluna e apenas cria painéis e joga dentro do
ArrayList, numericamente, com uma única dimensão. então para vc saber qual o número dele no array, terá de criar
uma fórmula que calcule a posição do painél usando linha e coluna e transformando em um valor único.
Imagine que você tenha uma matriz de 6 linhas por 8 colunas e quer acessar o painel que vai aparecer na linha 3 coluna 5.
Qual o número dele no array?
A fórmula seria:
(linhaPainel - 1) * totalColunas + (colunaPainel - 1)
(3 - 1) * 8 + (5 - 1) = 20
Essa forma te dá o painel 20 do ArrayList que é o painel equivalente a linha 3, coluna 5 da matriz.
Com isso você acessa qualquer um deles dentro do Array e muda qualquer coisa com métodos semelhantes a esse que criei acima.
setCorFundoPainel(20, new Color(RGB(255,0,0)));
De resto você vai ter de carregar esse GridPanel num Frame e redesenhar ele sempre que algo for mudado.
Boa sorte.
Outra forma interessante se você é um cara que quer aprender mais,
é criar um ArrayList bidimensional, isto é, um ArrayList de arraylists e
dentro destes os painéis.
private static ArrayList rowList;
daí na hora de começar a primeira linha,
você faz um
private static ArrayList cellList;
Acrescenta no cellList os panels como você criou
e quando termina a lista
rowList.add(cellList).
Fecha a lista cellList, cria um novo
e parte para a proxima linha.
Assim, quando quisesse uma posicao, faria
JPanel painel = rowList.get(row).get(col);
e continuaria mantendo teu esquema de matriz sem precisar
fazer muito cálculo.
De fato, a única coisa que você precisa é um método que converte coordenadas bi-dimensionais em coordenada de uma dimensão apenas. Você pode dispensar o ArrayList e usar o armazenamento interno do próprio container para obter os painéis.