Preencher uma matriz com eventos do JButon. Isso é possivel?
4 respostas
diegosant.per
Bom galera, estou com uma grande dúvida e enfrentando alguns problemas para poder elaborar um jogo da velha, utilizando Swing!
Vamos ao que nos interessam( haha) :
A intenção é criar um menu e uma tela para servir de tabuleiro.
Para esta tela que servirá como tabuleiro, pensei em adicionar um painel (configurar para gridlayout), e adicionar 9 JButtons.
Mas ao clicar nestes botões, vou ter como saber a posição do botão para preencher a matriz?
posiciona os botões no grid em ordem numerica…
e quando for clickado execute uma cadeia de if’s para descobrir qual botao foi clickado…
aí por exemplo… o botao clickado foi o botao 5, entao atribua na matriz indice 5 ou vetor…
gostei da ideia vou fazer o programinha depois te mando… se quiser…
ViniGodoy
Todo listener é também uma classe. Você pode cria-lo e dar atributos a ele, como o número do botão que ele atende. Ou mesmo a coordenada do tabuleiro dele.
Veja um exemplo (essa classe seria implementado dentro da classe do JFrame de seu jogo da velha, que aqui chamo de velhaDialog):
publicclassButtonListenerimplementsActionListener{privateintx;privateinty;publicButtonListener(intx,inty){this.x=x;this.y=y;}@OverridepublicvoidactionPerformed(ActionEventevt){if(tabuleiro[x][y]!=CASA_VAZIA){JOptionPane.showMessageDialog(VelhaDialog.this,"Essa casa não está vazia!");tabuleiro[x][y]=jogadorAtual;}}
Na hora de criar os botões:
JPanelpnlVelha=newJPanel(newGridLayout(3,3));for(intx=0; x < 3; x++) {for(inty=0; y < 3; y++) {JButtonbtnCasa=newJButton();btnCasa.addActionListener(newButtonListener(x,y));}
}
Evite cadeias de ifs. Além de representarem um mau-cheiro feio no código, deixam ele comprido e difícil de manter. Prefira sempre usar parâmetros, ou criar listeners diferentes para cada botão.
Bom de inicio usar o jButton não seria a melhor opção pois você necessitará por exemplo saber se o botão ja foi pressionado, se o que esta no botão é um “X” ou um “O”.
Acredito então como sugestão que você inicialmente deveria criar um componente que extenda de jButton ,implementar os métodos necessários ( Por Exemplo para saber por exemplo qual a posição daquele componente) e sobreescrever outros.
Depois criar um form com layout grid ou nulo. Adicionar o componente criado no form e voala num passe de mágica interface gráfica prontinha.