Swing ed eventi

di il
8 risposte

Swing ed eventi

Ciao a tutti ,
Spero di non duplicare un possibile argomento , ma non ho trovato nulla di attinente al mio problema.
Sto studiando Java per mio conto , il mio obbiettivo e realizzare delle semplici finestre per inserimento e controllo dati da inserire
su database , ne ho già fatte alcune senza problemi ma ora vorrei far funzionare una finestra in un determinato modo , ma per quello che sò la cosa sembra impossibile, per cui vi chiedo Aiuto.

Nella finestra da me creata ho dei JTextField con attivo il FocusListener.
Per determinate condizioni attivo un Jbutton con relativo ActionListener.
Ora se eseguo un click sul JButton e sono con il cursore su uno dei JTextField con attivo il FocusListener , viene eseguito solo il codice associato al focusLost e non l' actionPerformed.
Credo che il problema sia scatenato dalla contemporaneità dei due eventi (perdita del focus e click) e anche dal fatto che
l' actionPerformed (non eseguito) dovrebbe ricevere il valore della JTextField.

Potrei ovviare a questa problematica dando una priorità agli eventi , E' possibile ?

L'altra soluzione da me ipotizzata è quella di iniziare a studiare la gestione dei Thread , ma volevo lasciarla in un secondo momento per approfondire alcune cose.

Vedete altre soluzioni ?

Grazie in anticipo a chiunque desideri darmi una mano.

8 Risposte

  • Re: Swing ed eventi

    sciaboletta ha scritto:


    Nella finestra da me creata ho dei JTextField con attivo il FocusListener.
    Per determinate condizioni attivo un Jbutton con relativo ActionListener.
    Ora se eseguo un click sul JButton e sono con il cursore su uno dei JTextField con attivo il FocusListener , viene eseguito solo il codice associato al focusLost e non l' actionPerformed.
    Credo che il problema sia scatenato dalla contemporaneità dei due eventi (perdita del focus e click) e anche dal fatto che
    l' actionPerformed (non eseguito) dovrebbe ricevere il valore della JTextField.
    In Swing il termine "contemporaneo" riferito agli eventi non esiste. Gli eventi sono dispacciati nel contesto del Event Dispatch Thread, che è uno solo. Quindi o sta facendo una cosa o un'altra o un'altra ancora.
    Invece dovresti precisare meglio COSA fa quel tuo focus listener.

    sciaboletta ha scritto:


    Potrei ovviare a questa problematica dando una priorità agli eventi , E' possibile ?
    Non esiste.

    sciaboletta ha scritto:


    L'altra soluzione da me ipotizzata è quella di iniziare a studiare la gestione dei Thread , ma volevo lasciarla in un secondo momento per approfondire alcune cose.
    I thread nelle applicazioni Swing servono quando a seguito di un evento devi eseguire delle operazioni "lunghe", che potenzialmente possono impegnare parecchio tempo (dal mezzo secondo in sù). Dato che NON bisogna mai tenere "impegnato" per troppo tempo il EDT, si deve eseguire il task in un thread a parte. Altrimenti se lo esegui nel EDT la tua interfaccia è completamente "congelata" in quel frangente di tempo.
  • Re: Swing ed eventi

    Grazie.
    Queste sono le istruzioni che eseguo nel focusLost

    if(interno.getText().length() > 0)
    {
    Integer numero=0;
    numero= Integer.parseInt(interno.getText());
    interno.setText(numero.toString());
    }

    per tre JTextField che devono contenere un numero intero , quindi tolgo eventuali 0 precedenti.
    La JTextField e utilizzato nel codice dell' ActionListener , che però non parte se al click ho il cursore su uno dei tre JTextField.
  • Re: Swing ed eventi

    sciaboletta ha scritto:


    per tre JTextField che devono contenere un numero intero , quindi tolgo eventuali 0 precedenti.
    Innanzitutto se hai più text field che si devono comportare allo stesso modo, sarebbe bene non replicare quel codice (se hai fatto 3 FocusListener distinti che variano solo per il reference al textfield .... non è il massimo, ovviamente).

    Comunque se immaginiamo uno scenario come questo: un JTextField a cui è agganciato un FocusListener e un JButton a cui è agganciato un FocusListener, se il focus ce l'hai sul JTextField e clicchi il JButton, la sequenza che è propria di Swing è questa:
    - prima il JTextField "perde" il focus (focusLost relativo al JTextField)
    - poi il JButton riceve il focus (focusGained relativo al JButton)
    - poi il JButton emette il actionPerformed.

    Quindi il focusLost sul JTextField è effettivamente in grado di modificare il testo del campo PRIMA che il actionPerformed lo utilizzi.

    sciaboletta ha scritto:


    La JTextField e utilizzato nel codice dell' ActionListener , che però non parte se al click ho il cursore su uno dei tre JTextField.
    Detto così mi suona strano, bisognerebbe vedere meglio il tuo codice. Io personalmente non vedrei problemi su questo.
  • Re: Swing ed eventi

    Dovrei inserire circa 450 righe di codice , non mi pare opportuno.
    Non ho tre 3 FocusListener distinti ma uno solo e gestisco le istruzioni sul TextFiend con la lenght.
    Tra le prove che ho fatto , ho sostituito le istruzioni di sopra con il messaggio a console system.out.println("testo"), cosi partono i due eventi , con le istruzioni di sostituzione del valore invece non viene eseguito il codice dell'ActionListener.
    Non vedo soluzioni , cambierò il funzionamento della finestra.
    Grazie mille per le delucidazioni sul funzionamento del Listener.
  • Re: Swing ed eventi

    sciaboletta ha scritto:


    invece non viene eseguito il codice dell'ActionListener.
    Ti ripeto che mi suona molto strano. Se c'è un ActionListener registrato e il pulsante non è disabilitato, il actionPerformed viene di certo invocato se ci clicchi sopra.
    Prova magari a postare qui un po' più di codice.
  • Re: Swing ed eventi

    Generalmente questo tipo di comportamento è sintomo di un'eccezione che viene generata nel codice che esegue il focusLost(), ma che non viene correttamente gestita. Se hai dei try/catch, verifica di non ammazzare le eccezioni. Se non hai alcun try/catch, mettine uno e fatti stampare lo stackTrace. Al 90% si tratta proprio di un'eccezione che non vedi.


    Ciao.
  • Re: Swing ed eventi

    LeleFT ha scritto:


    Generalmente questo tipo di comportamento è sintomo di un'eccezione che viene generata nel codice che esegue il focusLost()
    Ciao Lele, è di certo possibile che ci sia una eccezione nel focusLost(). Ma se il focusLost() per un JTextField lancia fuori una eccezione, il actionPerformed() di un JButton verrebbe comunque invocato se il pulsante viene cliccato. Bisognerebbe vedere il codice ... altrimenti secondo me possiamo solo fare supposizioni.
  • Re: Swing ed eventi

    Visto l'interessamento , vi posto tutto il codice, Magari potete darmi anche consigli stilistici e di progettazione!
    Avevo già modificato la casse escludendo il focuslost e l'ho reinserito al volo e su un solo campo.
    Ora il problema c'è solo se il cursore è sul textfield denominato "civico" dove ho attivato il listener del focus.
    Nella console non trovo eccezioni. Sicuramente sbaglio qualcosa ma non riesco a capire cosa.

    
    import javax.swing.*;
    import javax.swing.event.*;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.JOptionPane;
    import java.awt.*;
    import java.awt.event.*;
    
    public class AnagraficaCondominio extends JFrame implements ActionListener, DocumentListener, FocusListener
    {
    /**
    	 * definito da Eclipse per versione , messo perchè mi dava un warning a destra che mi infastidiva.
    	 */
    	private static final long serialVersionUID = 1L;
    
     	public  JLabel lvia = new JLabel("Indirizzo - Via       :");
    	public	JTextField via = new JTextField("" , 100);   // (valore e numero caratteri visibili nel Text
    		
    	public  JLabel lcivico = new JLabel("Civico :");
    	public  JTextField civico = new JTextField("" , 100);
    	public  JTextField letteraCivico = new JTextField("" , 100);
    	
    	public  JLabel lnumScale = new JLabel("N° Scale/Palazzi  :");
    	public  JTextField numScale = new JTextField("", 100);
    	/*	
    	public  JLabel lnumAppartamenti = new JLabel("N° Appartamenti  :");
    	public	JTextField numAppartamenti = new JTextField("" , 100);   // (valore e numero caratteri visibili nel Text
    	*/	
    	public JButton buttonInserisci = new JButton("INSERISCI");
    	
    	public  JLabel lproprietario = new JLabel("Propretario (Cognome - Nome)  :");
    	public  JTextField proprietarioCognome = new JTextField("" , 100);
    	public  JLabel ltrattino = new JLabel(" - ");                
    	public  JTextField proprietarioNome    = new JTextField("" , 100);
    
    	public  JLabel lpiano = new JLabel("Piano      :");
    	public  JTextField piano = new JTextField("" , 100);
    	
    	public  JLabel lscala = new JLabel("Scala  :");
    	public  JTextField scala = new JTextField("" , 100);
    		
    	public  JLabel linterno = new JLabel("Interno :");
    	public  JTextField interno = new JTextField("" , 100);
    	
    	public  JLabel lmillesimi = new JLabel("Millesimi :");
    	public  JTextField millesimi1 = new JTextField("" , 100);
    	public  JLabel lmillesimiv = new JLabel(",");
    	public  JTextField millesimi2 = new JTextField("" , 100);
    	
    	public	JLabel lcantina = new JLabel("Cantina :");
    	public  String[] sceltaCantina = {"N" , "S"};
    	private JComboBox comboCantina = new JComboBox(sceltaCantina);
    		
    	public JButton buttonAggiungiAppartamento = new JButton("APPARTAMENTO");
    	
    	public DefaultTableModel strutturaTabellaAppartamenti = new DefaultTableModel();    // oggetto per definire struttura tabella da includere JTable che verra incluso in JScrollpanel
    	public JTable tabellaAppartamenti = new JTable(strutturaTabellaAppartamenti)    	// Oggetto Jtable , deve contenere un DefaultTableModel(vedi Sopra)
        		{
        			@Override public boolean isCellEditable(int row, int col)   // Riscrivo in maniera statica il metodo di Jtabel
        						{												// altrimenti le celle sono editabili , unico modo per farlo
        							return false;                               // (che cazzata sto Java)
        						}
        		};
      	public JScrollPane scrollAppartamenti = new JScrollPane(tabellaAppartamenti); // jScroll per visualizzazione jtable con jmodel
        
      	public Integer numeroRigheScroll=0;    // Classe Integer
      	
    	public Container contenitore = this.getContentPane(); // contenitore dove mettere uno o piu Panel 
    	public JPanel pannello = new JPanel();	               //Creo Panel finestra dove aggiungero oggetti , na finestra può avere più panell e un panell piu' oggetti	 	
    	
    	
     public AnagraficaCondominio()
     {	
       super();			                  // chiamo costruttore superclasse
       this.setBounds(400,150,780,600);   // invece di chiamare le due istruzione soprastanti , setBounds imposta posizione e dimensioni finestra insieme
       this.setDefaultCloseOperation(EXIT_ON_CLOSE);   //metodo attivato all'evento chiusura finestra con variabile final che indica di  chiudere applicazione alla chiusura finestra
       this.attivoAscoltatori();
       this.disegnoFinestra();
     }
    
    public void disegnoFinestra()
     { 
    	pannello.setLayout (null);         // inibisce il posizionamento automatico degli oggetti dobbiamo però associare ad ogni oggetto , posizione e grandezza	
    // coordinate posizione  Nome e altri oggetti (distanza da sinistra , distanza dall'alto, lungezza ,  altezza in pixel)			
    	lvia.setBounds   		      		( 10 ,  60 , 130 , 20);	
    	via.setBounds          				(120 ,  60 , 520 , 20);
    	via.setToolTipText("Indirizzo del Condominio");
    	
    	lcivico.setBounds  		      		(650 ,  60 ,  50 , 20);	
    	civico.setBounds       				(695 ,  60 ,  35 , 20);
    	civico.setToolTipText("Numero Civico senza Lettera");
    	
    	letteraCivico.setBounds             (730 ,  60 ,  20 , 20);
    	letteraCivico.setToolTipText("Eventuale lettera del civico(Facoltativo)");
    	
    	lnumScale.setBounds            		( 10 ,  100, 130 , 20);	
    	numScale.setBounds            		(120 ,  100,  50 , 20);
    	numScale.setToolTipText("Numero delle scale del condominio(Facoltativo)");
    	/*
    	lnumAppartamenti.setBounds          (200 ,  100, 130 , 20);	
    	numAppartamenti.setBounds           (310 ,  100,  50 , 20);
        numAppartamenti.setEditable(false);
        numAppartamenti.setToolTipText("Numero appartamenti del condominio si incrementa da solo");
        */
    	buttonInserisci.setBounds			(310 , 140 , 140 , 20);
    
    	lproprietario.setBounds             (10  , 180 , 190 , 20);
    	proprietarioCognome.setBounds       (205 , 180 , 250 , 20);
    	proprietarioCognome.setToolTipText("Cognome del proprietario");
    	
    	ltrattino.setBounds					(470 , 180 ,  15 , 20);
        proprietarioNome.setBounds          (500 , 180 , 255 , 20); 
        proprietarioNome.setToolTipText("Nome del proprietario");
        
    	lpiano.setBounds					( 55 , 220 ,  70 , 20);
    	piano.setBounds						(120 , 220 ,  70 , 20);
    	piano.setToolTipText("Piano appartamento");
    	
    	lscala.setBounds					(205 , 220 ,  70 , 20);
    	scala.setBounds						(260 , 220 ,  70 , 20);
    	scala.setToolTipText("Scala appartamento");
    	
    	linterno.setBounds					(350 , 220 ,  50 , 20);
    	interno.setBounds					(405 , 220 ,  50 , 20);
    	interno.setToolTipText("Interno appartamento");
    	
    	lcantina.setBounds					(500 , 220 ,  50 , 20);
    	comboCantina.setBounds				(560 , 220 ,  40 , 20);
    	comboCantina.setToolTipText("Cantina SI/NO");
    	
    	lmillesimi.setBounds				(615 , 220 ,  70 , 20);
    	millesimi1.setBounds				(680 , 220 ,  40 , 20);
    	millesimi1.setToolTipText("Millesimi parte intera");
    	
    	lmillesimiv.setBounds				(720 , 220 ,  10 , 20);
    	millesimi2.setBounds				(725 , 220 ,  30 , 20);
    	millesimi2.setToolTipText("Millesimi parte decimale");
    
    	
    	buttonAggiungiAppartamento.setBounds(310 , 260 , 140 , 20);
        
    	scrollAppartamenti.setBounds        ( 10 , 300 , 745 , 250);
    	/* proteggo campi appartamento da sproteggere dopo inserimento condominio */
    	proprietarioCognome.setEditable(false);
    	proprietarioNome.setEditable(false);
    	piano.setEditable(false);
    	scala.setEditable(false);
    	interno.setEditable(false);
    	comboCantina.setEnabled(false);
    	millesimi1.setEditable(false);
    	millesimi2.setEditable(false);
    	buttonAggiungiAppartamento.setEnabled(false);
    	buttonInserisci.setEnabled(false);
    	
    	/* Fine */
    	pannello.add(lvia);
    	pannello.add(via);
    	pannello.add(lcivico);
    	pannello.add(civico);
    	pannello.add(letteraCivico);
    	/*
    	pannello.add(lnumAppartamenti);
    	pannello.add(numAppartamenti);
       	*/
    	pannello.add(lnumScale);
       	pannello.add(numScale);
       	pannello.add(buttonInserisci);
       	pannello.add(lproprietario);
       	pannello.add(proprietarioCognome);
       	pannello.add(proprietarioNome);
       	pannello.add(ltrattino);
       	pannello.add(lpiano);
       	pannello.add(piano);
       	pannello.add(lscala);
       	pannello.add(scala);
       	pannello.add(linterno);
       	pannello.add(interno);
       	pannello.add(lcantina);
       	pannello.add(comboCantina);
       	pannello.add(lmillesimi);
       	pannello.add(millesimi1);
       	pannello.add(lmillesimiv);
       	pannello.add(millesimi2);
       	pannello.add(buttonAggiungiAppartamento);
       	
       	/*definisco struttura tabella per scroll */
       	strutturaScroll();
       	   	
       	pannello.add(scrollAppartamenti);
    	
    	contenitore.add(pannello); 
       	via.requestFocusInWindow();	// cursore su TextNome
       	this.setVisible(true); 
     }
     public void attivoAscoltatori()
     {
    	 /* istanzio oggetti ascoltatori per controllo valore Campi */
    	 AscoltaNumero ascoltaNumero = new AscoltaNumero();
    	 AscoltaTesto ascoltaTesto = new AscoltaTesto();
    	 	
    	 /*Attivo  ascoltatori per Gestione Inserimento Condominio */
    	 via.addKeyListener(ascoltaTesto);
    	 via.getDocument().addDocumentListener(this);
    	 
    	 numScale.addKeyListener(ascoltaNumero);
    	 numScale.getDocument().addDocumentListener(this);
    	 
    	 civico.addKeyListener(ascoltaNumero);
    	 civico.getDocument().addDocumentListener(this);
    	 civico.addFocusListener(this);
    	 letteraCivico.addKeyListener(ascoltaTesto);
    	 letteraCivico.getDocument().addDocumentListener(this);
    
    	 buttonInserisci.addActionListener(this);
    	 
    	 /*Attivo  ascoltatori per Gestione Inserimento Appartamento */
    	 proprietarioCognome.addKeyListener(ascoltaTesto);
    	 proprietarioCognome.getDocument().addDocumentListener(this);
    	 
    	 proprietarioNome.addKeyListener(ascoltaTesto);
    	 proprietarioNome.getDocument().addDocumentListener(this);
    	 
    	 piano.addKeyListener(ascoltaNumero);
    	 piano.getDocument().addDocumentListener(this);
    	 
    	 scala.addKeyListener(ascoltaTesto);
    	 scala.getDocument().addDocumentListener(this);
    	 
    	 interno.addKeyListener(ascoltaNumero);
    	 interno.getDocument().addDocumentListener(this);
    	 	 
    	 millesimi1.addKeyListener(ascoltaNumero);
    	 millesimi1.getDocument().addDocumentListener(this);
    
    	 millesimi2.addKeyListener(ascoltaNumero);
    	 millesimi2.getDocument().addDocumentListener(this);
    
    	 buttonAggiungiAppartamento.addActionListener(this); 	 	 
      }
     public void strutturaScroll()
      {
    	 strutturaTabellaAppartamenti.addColumn("Interno");
    	 strutturaTabellaAppartamenti.addColumn("Cognome");
    	 strutturaTabellaAppartamenti.addColumn("Nome");
    	 strutturaTabellaAppartamenti.addColumn("Piano");
    	 strutturaTabellaAppartamenti.addColumn("Scala");
    	 strutturaTabellaAppartamenti.addColumn("Cantina");
    	 strutturaTabellaAppartamenti.addColumn("Millesimi");
    	
      }
    
    
    @Override
    public  void  actionPerformed(ActionEvent e) 
     {
      if (e.getActionCommand()=="INSERISCI")
      	{
    	  normalizzaCampiInt();
    	  Integer numero=0;
    	  if (numScale.getText().length() == 0)     /*se non digitato ci metto il Valore Dell'Integer */
    	  {
    		  numScale.setText("1");
    	  }
    	  else									 /*Se digitato lo trasformo in integer per evitare 000 string che deve essere 0*/ 
    	  {
    		  numero= Integer.parseInt(numScale.getText());
    		  numScale.setText(numero.toString());
    		  if (numero== 0)
    		    {
    			  	numScale.setText("1");
    		    }
    	  }
    	  
    	  InsPalazzo insPalazzo = new InsPalazzo(via.getText() , 
    			                                ( civico.getText() + letteraCivico.getText() ),
    											  numScale.getText());
    	  insPalazzo.inserisci();
    	  System.out.println(insPalazzo.continua + " " + insPalazzo.inserito);
    	  if (insPalazzo.continua==false)
    		    {
    		  	dispose();
    			}
    	  if (insPalazzo.inserito==true)		  
    	  {
    		  via.setEditable(false);
    		  civico.setEditable(false);
    		  numScale.setEditable(false);
    		  letteraCivico.setEditable(false);
    		
    		  proprietarioCognome.setEditable(true);
    		  proprietarioNome.setEditable(true);
    		  piano.setEditable(true);
    					
    		  if (numScale.getText().equals("1")) /* non digitato , digitato 0 o digitato 1  vedi prima di istanza oggetto InsPalazzo*/
    		  {
    			  scala.setEditable(false);
    			  scala.setFocusable(false);
    			  scala.setText("A");
    		  }
    		  else
    		  {
    			  scala.setEditable(true);
    		  }
    		  interno.setEditable(true);
    		  comboCantina.setEnabled(true);
    		  millesimi1.setEditable(true);
    		  millesimi2.setEditable(true);
    		  buttonInserisci.setEnabled(false);
    	  }
        }
      if (e.getActionCommand()=="APPARTAMENTO")
       {
    	 normalizzaCampiInt(); 
    			/* Inserisco Appartamento */	
    	 InsAppartamento insAppartamento = new InsAppartamento (via.getText() ,
    	  											  		   ( civico.getText() + letteraCivico.getText() ),
    				  											 numScale.getText(),
    				  											 interno.getText() ,				  												
    				  											 proprietarioCognome.getText(),
    				  											 proprietarioNome.getText(),
    				  											 piano.getText(),
    				  											 scala.getText(),
    				  											 (String)comboCantina.getSelectedItem() ,
    				  											  millesimi1.getText() + "," + millesimi2.getText()); 
    	 insAppartamento.inserisci();
    			/* valorizzo scroll */
    	 
    	 strutturaTabellaAppartamenti.setRowCount(numeroRigheScroll + 1);
    	 strutturaTabellaAppartamenti.setValueAt(interno.getText()                      , numeroRigheScroll ,  0);
    	 strutturaTabellaAppartamenti.setValueAt(proprietarioCognome.getText()          , numeroRigheScroll ,  1);
    	 strutturaTabellaAppartamenti.setValueAt(proprietarioNome.getText()             , numeroRigheScroll ,  2);
    	 strutturaTabellaAppartamenti.setValueAt(piano.getText()                        , numeroRigheScroll ,  3);
    	 strutturaTabellaAppartamenti.setValueAt(scala.getText()                        , numeroRigheScroll ,  4);
    	 strutturaTabellaAppartamenti.setValueAt((String)comboCantina.getSelectedItem() , numeroRigheScroll ,  5);
    	 strutturaTabellaAppartamenti.setValueAt(millesimi1.getText() + "," + millesimi2.getText()                   , numeroRigheScroll ,  6);
    	 numeroRigheScroll++;
    				
    				/*	numAppartamenti.setText(numeroRigheScroll.toString());   numRigheScroll è Definito come classe Integer per questa istruzione poi asteriscata */
    		
    	 interno.setText("");
    	 proprietarioNome.setText("");
    	 proprietarioCognome.setText("");
    	 piano.setText("");
    		
    	 if (!numScale.getText().equals("1"))  scala.setText("");
    		
    	 comboCantina.setSelectedIndex(0);
    	 millesimi1.setText("");
    	 millesimi2.setText("");
    	 proprietarioCognome.requestFocusInWindow();
      }
     }
    public void normalizzaCampiInt() 
    {
    
    	if (civico.getText().length() > 0)
    	{
    		Integer numero=0;
    		numero=Integer.parseInt(civico.getText());
    		civico.setText(numero.toString()); 
    	}
    	if (numScale.getText().length() > 0)
    	{
    		Integer numero=0;						  
    		numero= Integer.parseInt(numScale.getText());
    		numScale.setText(numero.toString());
    	}
    	if(interno.getText().length() > 0)
    	{
    		Integer numero=0;
    		numero= Integer.parseInt(interno.getText());
    		interno.setText(numero.toString());
    	}
    	if(piano.getText().length() > 0)
    	{
    		Integer numero=0;
    		numero= Integer.parseInt(piano.getText());
    		piano.setText(numero.toString());
    	}
    	if(millesimi1.getText().length() > 0)
    	{
    		Integer numero=0;
    		numero= Integer.parseInt(millesimi1.getText());
    		millesimi1.setText(numero.toString());
    	} 	
    }
    public void attivaTasti()
    {	
    		
    	if (via.isEditable() )
    	{
    		if(via.getText().length() > 0 && civico.getText().length() > 0 )
    		{
    			 buttonInserisci.setEnabled(true);
    		}	 
    		else
    		{
    			 buttonInserisci.setEnabled(false);
    		}
    	}
    	else if (proprietarioCognome.getText().length() > 0 && proprietarioNome.getText().length() > 0 &&
    			 piano.getText().length()   > 0             && scala.getText().length()     > 0        && 
    			 interno.getText().length() > 0             && millesimi1.getText().length() > 0 && millesimi2.getText().length() > 0)
    		{
    		 buttonAggiungiAppartamento.setEnabled(true);
    		}
    		else
    		{
    		 buttonAggiungiAppartamento.setEnabled(false);
    		}
     }
    
    public void insertUpdate(DocumentEvent e) 
     {
    	attivaTasti();
     }
    
    public void removeUpdate(DocumentEvent e) 
     {
    	// TODO Auto-generated method stub
    	attivaTasti();
     } 
    
    public void changedUpdate(DocumentEvent e) 
     {
    	attivaTasti();
     }
    
    @Override
    public void focusGained(FocusEvent e) {
    	// TODO Auto-generated method stub
    	
    }
    
    @Override
    public void focusLost(FocusEvent e) {
    	// TODO Auto-generated method stub
    	normalizzaCampiInt();
    	
    }
    } 
    
Devi accedere o registrarti per scrivere nel forum
8 risposte