Listener [concluído]

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:

http://www.guj.com.br/posts/list/47289.java#258583

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!