Problemas com KeyListener

9 respostas
luuu

boa tarde ,
fiz um keylistener na minha aplicacao , porem ela nao esta funcionando… creio que deva ter algo errado mas nao consigo achar aonde esta esse erro.
alguem poderia me ajudar?
ai vai o codigo

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.*;
import java.util.*;

import br.com.sweetmellon.telas.Grupo;
import br.com.sweetmellon.telas.Cliente;
import br.com.sweetmellon.telas.Produto;
import br.com.sweetmellon.telas.Sangria;

import br.com.sweetmellon.util.Utilidades;

public class SweetMellon extends JFrame implements KeyListener{
   
    private JPanel principal;
    
    private JPanel topo;
    private JPanel meio;
    private JPanel rodape;
    
    private JButton clientes;
    private JButton pedidos;
    private JButton grupos;
    private JButton produtos;
    private JButton sangria;
    private JButton sair;
    
    private JButton add_carrinho;
    private JButton fechar_pedido;
    
    private JTextField t_codigo;
    private JTextField t_qtdade;
    private JTextField t_preco_unid;
    
    private JLabel l_codigo;
    private JLabel l_qtdade;
    private JLabel l_preco_unid;
        
    public static void main(String args[]){
        SweetMellon s = new SweetMellon();
    }
    
    public void keyTyped(KeyEvent ke){
    }
 
    public void keyPressed(KeyEvent ke){
         if(ke.getKeyCode() == KeyEvent.VK_F6){
             System.out.println("F6");
             sair();
         }
    }
     
    public void keyReleased(KeyEvent ke){
    }
    
    public SweetMellon(){
        /*---INICIANDO--*/
        super("Sweet Mellon "+Utilidades.dataAtual());        
        principal = new JPanel();
   
        clientes = new JButton("Clientes");
        pedidos = new JButton("Pedidos");
        grupos = new JButton("Grupos");
        produtos = new JButton("Produtos");
        sangria = new JButton("Sangria");
        sair = new JButton("Sair");
        
        add_carrinho = new JButton("Adicionar no carrinho");
        fechar_pedido = new JButton("Fechar Pedido");
        
        t_codigo = new JTextField();
        t_codigo.setColumns(2);
        t_qtdade = new JTextField();
        t_qtdade.setColumns(3);
        t_preco_unid = new JTextField();
        t_preco_unid.setColumns(6);
        
        l_codigo = new JLabel("Codigo : ");
        l_qtdade = new JLabel("Quantidade : ");
        l_preco_unid = new JLabel("Preco por unidade : ");
 
        
        /*---Modelando o TOPO do JPANEL---*/
        topo = new JPanel();
        topo.add(clientes);
        topo.add(pedidos);
        topo.add(grupos);
        topo.add(produtos);
        topo.add(sangria);
        topo.add(sair);
        
        /*---Modelando o MEIO do JPANEL---*/
        meio = new JPanel();
        meio.setBackground(new Color(100,150,150));
        
        meio.add(l_codigo);
        meio.add(t_codigo);
        
        meio.add(l_qtdade);
        meio.add(t_qtdade);
        
        meio.add(l_preco_unid);
        meio.add(t_preco_unid);
        
        meio.add(add_carrinho);
        meio.add(fechar_pedido);
        
        
        
        /*---Modelando o RODAPE do JPANEL---*/
        rodape = new JPanel();
        JLabel status = new JLabel(Utilidades.mensagemStatus());
        
        rodape.add(status);
        
        
        /*ACTIONS */
        grupos.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                new Grupo();
            }
        });
        clientes.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                new Cliente();
            }
        });
        produtos.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                new Produto();
            }
        });
        sangria.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                new Sangria();
            }
        });
        sair.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ae) {
                sair();
            }
        });
        
        
        
        /*--Finalizando o JPanel principal---*/
        
        principal.setLayout(new BorderLayout()); 
        
        principal.add(topo,BorderLayout.NORTH);
        principal.add(meio,BorderLayout.CENTER);
        principal.add(rodape,BorderLayout.SOUTH);
        
        this.setSize(800,600);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.addKeyListener(this);
        this.getContentPane().add(principal);        
        this.setVisible(true); 
    }
    
    public void sair(){
        System.exit(0);
    }
    
   
    
    
    
    
}

9 Respostas

Marky.Vasconcelos

Você deu this.addKeyListener(this)?
se não pode ser isso

luuu

dei sim … ta la no codigo…

lina

Oi,
qual mensagem aparece? da alguma erro?

tente fazer:

new Grupo().show();

Tchauzin!

Marky.Vasconcelos

foi mal não vi o código lá

e lina
ele disse que o Listener não funciona mais a tela parece
e o JFrame.show() está deprecated^^
use JFrame.setVisible(true);

(sei que você já deve usar isso mais se alguém novo ver isso pode querer ficar usando, então vale a epna corrigir)

lina

Mark_Ameba:
foi mal não vi o código lá

e lina
ele disse que o Listener não funciona mais a tela parece
e o JFrame.show() está deprecated^^
use JFrame.setVisible(true);

(sei que você já deve usar isso mais se alguém novo ver isso pode querer ficar usando, então vale a epna corrigir)

Não vi que ele falou isso…
malz.

Tchauzin

luuu

entao … nao da nenhuma mensagem de erro … apenas nao acontece nada…

testei num programa mais simples e funcionou… so transferi os metodos da interface KeyListener pro meu programa … e dai nao funciona mais :frowning:

luuu

bom fuçando no codigo descobri que o problema esta quando eu dou os comandos :

principal.add(topo,BorderLayout.NORTH);
principal.add(meio,BorderLayout.CENTER);

o rodape nao deu problema…
o topo contem JButtons e o meio contem JButtons , JLabels , JTextField
o rodape tem so JLabels…

sera que o keylistener para de funciona quando se tem JButtons e JTextField?

Marky.Vasconcelos

Eu não sei
mas acho que o Listener funciona quando o Component com o focus é que tem o listener

brunocastro

A explicacao parece simples,

igual o cara aki em cima falou…
o problema eh o componente q tah o keylistener perde o foco qndo
um actionevent eh disparado…

vc soh tem q transferir o foco pro frame (ou o component q vc tiver adicionado o keylistener)
toda vez q um actionperformed for executado (os botoes meio q “roubam” o foco) :smiley:

n testei seu codigo, mas usei um exemplo aki q deu certo, tente algo do tipo

this.frame.requestFocus();

qqer coisa posta ae

Criado 8 de agosto de 2007
Ultima resposta 27 de jan. de 2008
Respostas 9
Participantes 4