JButton não funciona em alguns lugares

5 respostas
botaojava
D

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?

/**************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);

5 Respostas

D

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

D

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

D

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.

S

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();
   }
});
D

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

Criado 13 de novembro de 2016
Ultima resposta 15 de nov. de 2016
Respostas 5
Participantes 3