dúvida sobre a classe principal

8 respostas
ken420

na minha classe princiapal public static void main(String[] args), vi algumas pessoas falando que nao é muito aconselhavel colocar codigos no método principal é verdade isso? pq criei um projeto e inseri

EventQueue queue = new EventQueue() { protected void dispatchEvent(AWTEvent event) { super.dispatchEvent(event);
para capturar as teclas do teclado estou errado em fazer desse modo?

8 Respostas

ken420

uma otra dúvida tambem que estou é o seguinte para abrir uma tela eu uso o

case 112: //F1
new Vendas().show();

ele abre certinho mas e para mim fechar a tela por um ESC, o case do ESC é 0? pq coloquei case 0 e System.exit(0); como valor e nao fechou a tela ;/

marciofermino

mais ou menos

e que sempre usamos a principal para instanciar alguma coisa…

seria a classe de start para uma outra coisa,
nao sei se deu para entender

mais se vc quiser fazer pode tb.

tinorberto

Eu gosto de usar a main para apenas instanciar objetos , ai nos objetos que eu trato os eventos por exemplo . flw

Andre_Brito

ken420:
uma otra dúvida tambem que estou é o seguinte para abrir uma tela eu uso o

case 112: //F1
new Vendas().show();

ele abre certinho mas e para mim fechar a tela por um ESC, o case do ESC é 0? pq coloquei case 0 e System.exit(0); como valor e nao fechou a tela ;/


Nesse caso, você tem que dar um print na key do ESC pra ver o código dele. Daí você manda bala no case com o código que aparecer.

Só uma coisa. Você está usando JFrame? O método show() está deprecated. Tente usar setVisible(true), ao invés.

Abraço.

M

É mais aconselhável, ao invés de usar números como 112, usar as constantes da classe KeyEvent, como em:

case KeyEvent.VK_F1:
    Vendas vendas = new Vendas();
    vendas.setVisible(true);
    break;

case KeyEvent.VK_ESCAPE:
    if (vendas != null) {
        vendas.setVisible(false); // como uma nova janela é criada cada vez,
        // talvez o método dispose() seja mais adequado.
    }
    break;
ken420
Entendi o que vcs falaro e tambem entendi que usaras constantes da classe KeyEvent ficar ate mais facil de depois re-tratar algum evento, mas vejam isso
EventQueue queue = new EventQueue()
    	{

    		protected void dispatchEvent(AWTEvent event)
    		{
    			super.dispatchEvent(event);

    			     String a[];
    			     String tecla[];

    			     if(!event.paramString().equals(""))
    			     {
    			     	//System.out.println(event.paramString().substring(0,5));
    			     	if (event.paramString().substring(0,5).equals("KEY_P"))
    			     	{
    			     		a = event.paramString().split(",");
    			     		tecla = a[1].split("=");

    			     		switch (Integer.parseInt(tecla[1]))
    			     		{
                               case KeyEvent.VK_ESCAPE:   
                                    if (Vendas != null) {   
                                        Vendas.setVisible(false); // como uma nova janela é criada cada vez,   
                                        dispose();  
                                    }   
                                    break; 
                                case KeyEvent.VK_F1:   
                                    Vendas vendas = new Vendas();   
                                    vendas.setVisible(true);   
                                    break;
                                 

    			     		}
    			     	}

    			     }
    			     //System.out.println("event mask: " + event.paramString());
    		}
    	};
        Toolkit.getDefaultToolkit().getSystemEventQueue().push(queue);
    }
esse e o codigo nas 3 linhas estão sublinhado com a seguinte error non-static method dispose()cannot be referenced from a static context , non-static method setVisbile()boolean be referenced from a static context operator != cannot be apllied to Vendas [code] if (Vendas != null) { Vendas.setVisible(false); // como uma nova janela é criada cada vez, dispose(); [code]
Andre_Brito

Opa.

O que é Vendas? É uma classe, certo? dispose e setVisible() são métodos herdados e não são estáticos. Então acho que não podem ser chamados como métodos de classe. Cria uma instância de Vendas e aplica os métodos usando essa instância.

Abraço.

ken420

era isso mesmo vlw pessoal problema resolvido!

Criado 3 de janeiro de 2009
Ultima resposta 4 de jan. de 2009
Respostas 8
Participantes 5