Opa!
Nao sei se é essa a sua duvida, mas para gerar os botoes poderia ser utilizado como no exemplo a seguir:
int linha = 5;
int coluna = 5;
int minas = 5;
int[] posMinas = new int[minas];
List<JButton> botoes = new ArrayList<JButton>();
public void gerarBotoes() {
java.awt.GridBagConstraints gridBagConstraints;
for (int i = 0; i < linha; i++) {
for (int j = 0; j < coluna; j++) {
JButton aux = new JButton();
aux.setText(" ");
aux.addActionListener(this);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = i;
gridBagConstraints.gridy = j;
jPanel2.add(aux, gridBagConstraints);
botoes.add(aux);
}
}
}
Aqui um exemplo para popular as minas:
public void popularMinas() {
for (int i = 0; i < minas; i++) {
int num = new Random().nextInt((linha * coluna) - 1);
posMinas[i] = num;
botoes.get(num).setText("*");
}
}
Uma ideia é criar uma classe onde além do botao também teria as posicoes relativas, se ele está com mina ou nao, etc.
Criar um método que entao pegue quem o usuario clicou, podendo ser pego com o ActionEvent.getSource, como no exemplo a seguir:
public void actionPerformed(ActionEvent e) {
JButton aux = (JButton)e.getSource();
//JOptionPane.showMessageDialog(null, aux.getText());
analisa(aux);
}
Depois poderia ser feito a analise dos campos ao redor, caso já nao seja uma mina e o usuario perdeu.
Nao cheguei a implementar a análise, acredito que essa seria a maior dúvida, mas tenho uma ideia que poderia ser pego a partir dos indices da linha e coluna, verificar ao redor, sendo que:
- se nao tiver bomba em nenhum redor, ele abre o quadrado;
- se tiver bomba ele aumenta um contador para mostrar no botao;
- se proximo a ele estiver um botao sem bomba este tambem tem que chamar o metodo analisa(), para ser verificado se nao se encaixa nas regras acima.
Espero ter ajudado, desculpa qualquer erro, problema com a resposta, é a primeira vez que posto 