Reconhecer botão que chama evento

3 respostas
S

Pessoal, uma dúivda simples:

Exemplo:

Criei um loop que cria uma matriz de JButtons.
Para cada botão gostaria de aplicar um evento, que ao clicar muda a cor de fundo para azul.

O problema é:

Como eu faço para que o evento reconheça quem chamou o evento?

Não posso colocar esse evento no loop, senão ele vai setar a cor de todos os botões quando eu clicar em um, certo?

E também não tem como usar o getSource(), senão eu terei que usar if para comparar botão por botão da matriz.

Tem alguma outra solução?

Obrigado.

3 Respostas

Nicolas_Fernandes
Não há problema em usar o getSource(). Esse método retorna de onde foi chamado o evento. Logo, se você clicou no Botão X, ele te retorna esse mesmo botão! Isso resolve seu problema?
public class FormularioDinamico extends JFrame {

    public static void main(String[] args) {
        FormularioDinamico formularioDinamico = new FormularioDinamico();
        formularioDinamico.exibirFormulario();
    }
    
    public FormularioDinamico() {

        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setLayout(new FlowLayout(FlowLayout.LEFT));
            setTitle("Formulário dinâmico!");
            setResizable(false);

            for (int I = 0; I < 10; ++I) {

                JButton buttonToFillBackground = new JButton("Botão " + (I + 1));
                buttonToFillBackground.addActionListener(new BotaoDinamicoActionListener(this));
                add(buttonToFillBackground);
            }
        }
        catch (Exception generalException) {
            generalException.printStackTrace();
        }
    }

    public void exibirFormulario() {
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }

    private class BotaoDinamicoActionListener implements ActionListener {

        private JFrame formularioPai;
        public BotaoDinamicoActionListener(JFrame formularioPai) {
            this.formularioPai = formularioPai;
        }
        public void actionPerformed(ActionEvent e) {
            JButton clickedButton = (JButton) e.getSource();
            clickedButton.setForeground(Color.RED);
            clickedButton.setText("Mudou o texto!");
            formularioPai.pack();
        }
    }
}

Espero ter ajudado,
fique com Deus! :D

S

Então, meu código que cria os botões está assim:

private JButton[] caixas = new JButton[5];         
     
for (int i=0,a=15;i<=4;i++,a+=45){       
      caixas[i] = new JButton();       
      caixas[i].setBounds(a,30,30,30);       
      getContentPane().add(caixas[i]);
       
}
;

Como posso implementar a parte do evento que eu falei ?

Obrigado

Nicolas_Fernandes
Soruji:
Então, meu código que cria os botões está assim:
private JButton[] caixas = new JButton[5];         
     
for (int i=0,a=15;i<=4;i++,a+=45){       
      caixas[i] = new JButton();       
      caixas[i].setBounds(a,30,30,30);       
      getContentPane().add(caixas[i]);
       
}
;

Como posso implementar a parte do evento que eu falei ?

Obrigado

private JButton[] caixas = new JButton[5];         
     
    for (int i=0,a=15;i<=4;i++,a+=45){       
        caixas[i] = new JButton();       
        caixas[i].setBounds(a,30,30,30);      
        caixas[i].addActionListener(new ActionListener(this) {
            private JFrame formularioPai;  
            public BotaoDinamicoActionListener(JFrame formularioPai) {  
                this.formularioPai = formularioPai;  
            }  
            public void actionPerformed(ActionEvent e) {  
                JButton clickedButton = (JButton) e.getSource();  
                clickedButton.setForeground(Color.RED);  
                clickedButton.setText("Mudou o texto!");  
                formularioPai.pack();  
            }  
        }); 
        getContentPane().add(caixas[i]);
    }
Assim!

Espero ter ajudado,
fique com Deus! :D

Criado 6 de março de 2012
Ultima resposta 6 de mar. de 2012
Respostas 3
Participantes 2