Pessoal, é o seguinte, eu tenho em um JFrame uma instancia de uma classe que extends de JPanel, e nessa classe, eu tenho apenas uma matriz de JButtons, digamos 10 botoes por 10 botoes. Só que eu tentei adicionar o ActionListener na minha classe extendida de JPanel, entretanto quando eu rodo a aplicação e clico nos botoes, eles não fazem nada, como se naum estivessem “ouvindo”. O problema é que eles não fazem parte da minha classe principal, aonde ta o JFrame, eu penso que seja esse o problema, então como faço para adicionar os listeners?
Tem que adicionar o Listener nos botões, né.
SuaClasseListener listener = new SuaClasseListener();
seubotao.addActionListener(listener);
//faca isso para todos os bototes
onde SuaClasseListener é a sua classe que implementa ActionListener, e que por isso deve ter o método actionPerformed.
Ah Renato, acho que entendi, eu tava fazendo isso:
MinhaClassePrincipal implements ActionListener
...
MinhaClasseComBotoes implements ActionListener
...
Tava fazendo as duas classes implementarem a interface ActionListener,
vou testar
Obrigado,
Tome cuidado que os listeners só disparam para os componentes que tem foco. Se esse não é o teu caso (por exemplo, se estiver usando uma calculadora), você terá que usar o código descrito aqui, com ActionMap e InputMap:
Hum… acho que esse pode ser um problema, é mais ou menos isso que aconteceu com a calculadora, só que diferente do evento do teclado, o meu é com o mouse, vou tentar…
obrigado viniGodoy
Olá Vini,
Meu problema é o seguinte, eu tenho essa classe ae, como vc pode ver tudo o que ela faz é preencher um painel com um certo numero de botoes, tudo o que eu queria era dar ação a esses botões, para ser mais especifico, gostaria de que quando um botao fosse clicado, a ação dele era retornar o i e o j,
Eu li o seu post e para ser sincero, não entendi muito, entendi o que vc falou, mas não ficou claro sobre o que fazer com isso, mas acho que no meu caso, a minha classe principal contem essa outra classe, acho que se encaixa em WHEN_ANCESTOR_OF_FOCUSED_COMPONENT. Contudo, se vc puder me ajudar quanto a esse pequeno problema, eu agradeço,
Samuel
import java.awt.GridLayout;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JButton;
/**
*
* @author samuel
*/
public class JCrossPanel extends JPanel{
private JButton[][] caixas;
public JCrossPanel(int altura, int largura, String name) {
caixas = new JButton[altura][largura];
setLayout(new GridLayout(altura,largura));
for(int newI = 0; newI<altura-1;newI++)
{
for(int newJ = 0;newJ<largura-1;newJ++)
{
add(caixas[altura][largura] = new JButton(name));
}
}
}
}
O keyMap e InputMap seriam só para eventos de teclado mesmo, quando os botões não estivessem no foco. No caso do clique, use o actionListener mesmo. Basta fazer:
public JCrossPanel(int altura, int largura, String name) {
caixas = new JButton[altura][largura];
setLayout(new GridLayout(altura,largura));
for(int newI = 0; newI<altura-1;newI++)
{
for(int newJ = 0;newJ<largura-1;newJ++)
{
JButton caixa = new JButton(name);
caixa.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
//Ação do seu botão aqui.
}
}):
caixas[altura][largura] = caixa;
add(caixa);
}
}
}>
-> public class JCrossPanel extends JPanel implements ActionListener {
private JButton[][] caixas;
-> private int altura;
-> private int largura;
-> private static int iClicked;
-> private static int jClicked;
public JCrossPanel(int altura, int largura, String name) {
-> this.altura = altura;
-> this.largura = largura;
caixas = new JButton[altura][largura];
setLayout(new GridLayout(altura,largura));
for(int newI = 0; newI<altura-1;newI++)
{
for(int newJ = 0;newJ<largura-1;newJ++)
{
add(caixas[altura][largura] = new JButton(name));
-> caixas[altura][largura].addActionListener(this);
}
}
}
-> public void actionPerformed(ActionEvent e) {
for (int i=0; i < altura; i++) {
for (int j=0; j < largura; j++) {
if (caixa[i][j].equals(e.getSource())) {
iClicked = i;
jClicked = j;
}
}
}
}
}
axo q com isso vc vai te armazenado nas variaveis iClicked e jClicked as posicoes do botao q foi disparado…
ai depois tu cria ai uns gets pra eles…
Obrigado pessoal, valeu!