JButton não funciona em alguns lugares

Alguns botões não funcionam em alguns lugares.

Estou criando uma tela e nela só funcionam os botões que estão na parte “CENTER” do meu layout porém existem dois botões na parte “NORTH” do meu layout, o de Sair e Editar Dados. por qual motivo isso acontece?

[code] /Layout Manager/

  Container telaPainelDeOpcoes = getContentPane();
  telaPainelDeOpcoes.setLayout(new BorderLayout());

  //Parte NORTH do layout onde ficam as JLabel "Sao Judas" e "Painel de Opções".
  JPanel telaPTitle = new JPanel(new BorderLayout());
  JPanel telaPTi = new JPanel(new GridLayout(2,2,10,0));
  telaPTi.add(lblPainelOpcoes);
  telaPTi.add(lblSaoJudas);
  telaPTi.add(lblPainelOpcoes);
  telaPTi.add(lblEspaco);
  telaPTi.add(btnEdtDados);
  telaPTi.add(lblEspaco);
  telaPTi.add(lblEspaco2);    
  telaPTi.add(btnSair);
  telaPTitle.add(telaPTi, BorderLayout.NORTH);
  telaPainelDeOpcoes.add(telaPTitle, BorderLayout.NORTH);
  

  
  
  //Fim da parte Norte do Layout.
  
  


     
     //Parte CENTER do layout.
     
  JPanel telaOpcoesTipo = new JPanel(new BorderLayout());
  JPanel telaOpcoes = new JPanel(new GridLayout(5,1,5,15));
  telaOpcoes.add(btnMural);
  telaOpcoes.add(btnEscreverSug);
  telaOpcoesTipo.add(telaOpcoes, BorderLayout.CENTER);
  telaPainelDeOpcoes.add(telaOpcoesTipo, BorderLayout.CENTER);
  
  //Fim da Parte CENTER do Layout
  
  
  
  /**********Fim do Layout Manager************/
  
  
  //Funcionamento dos Botões

  btnSair.addActionListener(this);
  btnEdtDados.addActionListener(this);
  btnMural.addActionListener(this);
  btnEscreverSug.addActionListener(this);

[/code]

O GridLayout foi instanciado com duas linhas e duas colunas, com capacidade de 4 componentes, mas vc adiciona 8 componentes no container.

Exemplo

// Grid com 4 linhas e 2 colunas, 8 components (4 x 2)
JPanel telaPTi = new JPanel(new GridLayout(4,2,10,0)); 

http://docs.oracle.com/javase/7/docs/api/java/awt/GridLayout.html

A funcionalidade de um botão conta como um Componente?

Não, eu não sei o que acontece se colocar mais ou menos components que o GridLayout suporta, mas se o problema é da ação do botão não funcionar, poderia ser um conflito no GridLayout, como por exemplo um label (invisível) sobre o botão impedindo a execução.

Provavelmente o seu ActionListener não está tratando a acção quando ela é disparada pelo btnSair ou pelo btnEdtDados.

Dica, não é legal utilizar o mesmo listener para diferentes componentes, salvo quando a ação realizada por todos os componentes for a mesma.

Do jeito que você fez, você vai ter que encher de if-else pra saber qual o botão que foi acionado.

Se você implementar um listener pra cada botão, fica até mais legível:

btnSair.addActionListener(new ActionListener() {

   public void actionPerformed(ActionEvent ae) {
       // No método abaixo você trata o que tem de ser feito
       sair();
   }
});
btnEdtDados.addActionListener(new ActionListener() {

   public void actionPerformed(ActionEvent ae) {
       // No método abaixo você trata o que tem de ser feito
       editarDados();
   }
});
btnMural.addActionListener(new ActionListener() {

   public void actionPerformed(ActionEvent ae) {
       // No método abaixo você trata o que tem de ser feito
       acionouMural();
   }
});
btnEscreverSug.addActionListener(new ActionListener() {

   public void actionPerformed(ActionEvent ae) {
       // No método abaixo você trata o que tem de ser feito
       escreverSug();
   }
});
2 curtidas

Valeu, dessa forma entendi o que estava fazendo de errado. Obrigado! :grin: