JFrame abrir somente uma vez [RESOLVIDO]

8 respostas
G

Bom o problema é o seguinte , tenha uma tela de vendas que após feito venda chamo uma tela de finalização com o total meios de pagamentos e troco,

tenho trez meios de finalização, com impressão fiscal , sem impressão e com impressão não fiscal

chamo essa tela por meios de atalho do teclado f6 f7 f8

o problema é que sem querer for apertado f6 e f7 ou f7 e f8 junto, é aberto duas telas de finalização

quero limitar que somente uma tela abra

Alguem tem alguma ideia de como posso fazer isso ??

Vlw.

8 Respostas

E

grippa,

Acredito que consigo te ajudar. Tem como postar os métodos?

E

Vc está criando uma instância diferente para cada método? Caso sim, pode verificar em cada método se já existe alguma instância criada, se não existir vc estância o objeto referente ao método chamado. Consegui ser claro? Não sei se é a maneira mais elegante, porém deve funcionar.
Abraço.

G

Isto esta destro do metodo construtor da classe venda

//atalho finalizar venda com o botão f7 s\impr 
	 	KeyStroke escapeKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_F7,0, false); //Botão da ação 
	 	 javax.swing.Action escapeAction = new AbstractAction() {  
         public void actionPerformed(ActionEvent e) { 
        	String totalS = (tfTotal.getText());
  		    double total = Double.parseDouble((totalS).replace(".","").replace(",","."));  		   
  			 if( total == 0.00)
  				JOptionPane.showMessageDialog(null,"Nenhuma venda foi inicializada   !!");
  			 else
  			 {   				 
  		         try {
  		        	updateVenda("SP");
  		        	btFinalizar.requestFocus(); 
  		        	new FinalizarVenda(Vendas.this,"s/p",codVenda,idVenda).setVisible(true);
         		    	        	     		        	   
					} catch (SQLException ef) {
						ef.printStackTrace();
					} 
  			 }
       }         
       };  
       getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(escapeKeyStroke, "Sem impressão");//Nome da ação  
       getRootPane().getActionMap().put("Sem impressão", escapeAction);


       
     //atalho finalizar venda com o botão f8 fiscal 
	 	KeyStroke escapeKeyStroke5 = KeyStroke.getKeyStroke(KeyEvent.VK_F8,0, false); //Botão da ação 	
     	javax.swing.Action escapeAction5 = new AbstractAction() {  

        public void actionPerformed(ActionEvent e) {  
       	 String totalS = (tfTotal.getText());
 		   double total = Double.parseDouble((totalS).replace(".","").replace(",","."));
 		   
 			 if( total == 0.00)
 				JOptionPane.showMessageDialog(null,"Nenhuma venda foi inicializada   !!");
 			 else
 			 { 
 		         try {
 		        	 updateVenda("FI");
 		        	 btFinalizar.requestFocus();
 		        	 new FinalizarVenda(Vendas.this,"fiscal",codVenda,idVenda).setVisible(true);						
   		        	          	   
					} catch (SQLException ef) {
						ef.printStackTrace();
					} 
 			 }
      } 
        
      };  
      getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(escapeKeyStroke5, "Fiscal");//Nome da ação  
      getRootPane().getActionMap().put("Fiscal", escapeAction5);


      
    //atalho finalizar venda com o botão f6 comprovante 
	 	KeyStroke escapeKeyStroke6 = KeyStroke.getKeyStroke(KeyEvent.VK_F6,0, false); //Botão da ação 
	 	javax.swing.Action escapeAction6 = new AbstractAction() {  

       public void actionPerformed(ActionEvent e) {
    	  
      	   String totalS = (tfTotal.getText());
		   double total = Double.parseDouble((totalS).replace(".","").replace(",","."));		   
			 if( total == 0.00)
				JOptionPane.showMessageDialog(null,"Nenhuma venda foi inicializada   !!");
			 else
			 { 
		         try {
		        	 updateVenda("RO");
		        	 btFinalizar.requestFocus();
				 new FinalizarVenda(Vendas.this,"comprovanteNaoFiscal",codVenda,idVenda).setVisible(true);						
						
					} catch (SQLException ef) {
						ef.printStackTrace();
					} 
			 }
     } 
       
     };  
     getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(escapeKeyStroke6, "Comprovante");//Nome da ação  
     getRootPane().getActionMap().put("Comprovante", escapeAction6);
E

Vc pode criar uma variável booleana global( boolean jframeAberto = falso), que identifica se a JFrame está aberta ou não. E dentro de cada método, faz a verificação antes de executar a rotina.

Caso esteja preenchida com false, você executa a rotina e preenche a variável com true.

Caso esteja preenchida com true, você não executa a rotina.

Abraço.

G

Vlw elio.cruz

uma solução simples que resolveu meu problema.

Até mais.

E

grippa:
Vlw elio.cruz

uma solução simples que resolveu meu problema.

Até mais.

grippa,

=D

E

Grippa,

Interessante que vc coloque no assunto do tópico [RESOLVIDO].

Abraço.

E

Eu aconselharia o uso de singleton: http://wmagician.wordpress.com/2008/01/02/padrao-singleton-em-java/

Abraços.

Criado 29 de outubro de 2012
Ultima resposta 31 de out. de 2012
Respostas 8
Participantes 3