Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [JAVA] Princincipiante: utilizzo del LostFocus e gestione eventi in generale

    Ciao a Tutti,

    Purtroppo ho di nuovo necessita di alcuni chiarimenti base (almeno immagino). Nonostante abbia visto e studiato diversi esempi e capitoli di manuali a riguardo, non riesco proprio a capire come gestire gli eventi. Nel mio programmino ho la necessita di creare diversi oggetti JTextField, a seguito di un imput dell'user. Quale è la strada migliore per intercettare quando l'user va a riempire un determinato JText creato? immagino con evento di tipo LostFocus: Quindi, quando esce dalla Jtext controllo che l'user non abbia un valore scorretto e via verso il futuro. In vb questo si faceva abbastanza agevolmente con l AddHandler(evento), adress of (funzione che gestisce l'evento).
    In java non riesco a capire il ruolo dell'ascoltatore, che nel mio caso dovrebbe essere il panel dove sono disegnate le JText(?), e che nel mio caso non vorrei ricreare da capo in quanto l'ho disegnato in fase di progettazione (ovvero usando la sezione design di netbeans).
    Sostanzialmente dovrebbe succedere che il programma disegna le JText, l'utente va inserire un valore in questi campi, il programma intercetta in quale text l'utente ha inserito il valore, lo controlla, va avanti. Ho fatto diversi tentativi, vi posto solo l'ultimo che mi sembrava il più logico e che assomiglia di più all'esempio uffciale sul sito di oracle (almeno secondo la mia testa).

    codice:
    
     for (int i = 1; i<anagCinema.numSale+1; i++){
                
                          
                JTextField capSala=new JTextField();
                capSala.setName("capSala"+i);            
                pSale.add(capSala);
                capSala.setBounds(100, y, 80, 20);
                capSala.addFocusListener((FocusListener) capSala);/* non è la sintassi
     che ho messo io, è la sintassi che aggiusta 
    il compilatore in automatico. se uso (this) non funziona*/
                
                
                  y=y+30;
                       
            }
            
        }                                          
        
        public void focusLost(FocusEvent e) {
            System.out.println("Focus lost di"+ e.getClass().getName());/*è una prova solo per 
    capire se riuscivo a selezionare
     il jtext giusto*/
        }
    Vi ringrazio cmq, perchè questo forum è fantastico!

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: [JAVA] Princincipiante: utilizzo del LostFocus e gestione eventi in generale

    Originariamente inviato da eternauta
    Quale è la strada migliore per intercettare quando l'user va a riempire un determinato JText creato? immagino con evento di tipo LostFocus: Quindi, quando esce dalla Jtext controllo che l'user non abbia un valore scorretto e via verso il futuro.
    Se quello che ti interessa fare è verificare che l'utente non abbia inserito valori non validi ti conviene usare InputVerifier.
    http://stackoverflow.com/questions/2...e-a-jtextfield
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Ciao Alex,

    Grazie per la risposta. In realta non devo controllare subito che l'utente abbia inserito un dato valido. Devo prima capire su quale JText tra quellic eh sono stati creati nel for, lo ha inserito.Quando il jtext che ha usato lascia il focus allora farò tutte le verifiche. Il mio problema è proprio come intercettare il jtext che ha appena lasciato il focus.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Alex'87 ha risposto prima di me ma anche io avrei suggerito di guardare javax.swing.InputVerifier.

    La questione del focusLost() è che quando avviene, il focus è già stato "perso" per un istante e non puoi impedire quest'evento. Certo ... nessuno vieta di fare, nel focusLost, la validazione e se l'input è errato ridare il focus al text field.
    Ma c'è una differenza tra usare questo approccio e usare un InputVerifier. Se il focus è nel text field e l'input è invalido e premi TAB per passare al componente successivo, anche se nel focusLost ridai il focus al text field, il componente successivo riceve comunque il focusGained.
    Con InputVerifier no, il focus non si "schioda" dal text field.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Ragazzi, vi ringrazio davvero per l'aiuto!!

    Ho capito quello che volete dirmi, ma non è esattamente il problema che non riesco a superare. Mi spiego meglio con un esempio:l'utente inputa 10 in un inputText e il programma crea 10 JText che mettiamo si chiameranno jt1,jt2..jt10. L'utente può iniziare a inserire i suoi dati da una qualsiasi di queste. Mettiamo che faccio l'InputVerifier in questa fase. Mano mano che le compila (quaesta parte mancava prima me ne rendo conto) il programma dovra intercettare quale jt è stata compilata e mi andrà a riempire un array che avrà come indice il numero della jt stessa. Ad esempio, l'utente compila la jt7, fa l'input verifier, e una volta che ha lasciato il focus carichera sull'array ad indice 7 quello che è stato inputato. E' vero, potrei caricare l'array tutto d'un fiato alla fine, ma se non capisco impazzisco!!!! E comunque anche se volessi caricare l'array alla fine, come potrei rintracciare le varie jtext? Comunque anche se questa soluzione sarà più facile vorrei capire se è fattibile con il rintracciamento immediato. (per Andbin, vedi questa per me che ripeto, sono un pivellino sia in java che in vb, è una grossa differenza che mi blocca completamente. In vb la gestione degli eventi mi sembra un pò più lineare e immediata)


    Non riesco proprio a gestire l'evento..


    Vi posto il codice completo:

    codice:
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package filmtime;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.border.Border;
    
    
    
    public class FTMaker extends javax.swing.JFrame {
    
        //dichiarazione publica
        
        AnagraficaCinema anagCinema=new AnagraficaCinema();
        Sala [] cinema;
        
      
       
        public FTMaker() {
            initComponents();
        }
    
           
        private void creaCienamActionPerformed(java.awt.event.ActionEvent evt) {                                           
             
            int y=50;
            
            
            anagCinema.nome=nomeCinema.getText();
            anagCinema.numSale=Short.parseShort(numSale.getText());
            anagCinema.via=via.getText();
            anagCinema.città=città.getText();               
            System.out.println(anagCinema.anagrafica());
            cinema= new Sala[anagCinema.numSale];
          
            
            JLabel lab0=new JLabel("Capienza");
            pSale.add(lab0);
            lab0.setBounds(100,10,80,20);
            JLabel lab1=new JLabel("3D");
            pSale.add(lab1);
            lab1.setBounds(210,10,40,20);
            
            //creao tante line di oggetti quante sale
            for (int i = 1; i<anagCinema.numSale+1; i++){
                
                JLabel lab=new JLabel();
                lab.setName("label"+i);
                lab.setText("Sala: "+i);
                pSale.add(lab);
                lab.setBounds(30, y, 80, 20);
                
                JTextField capSala=new JTextField();
                capSala.setName("capSala"+i);            
                pSale.add(capSala);
                capSala.setBounds(100, y, 80, 20);
                /*qua creo le jtext e possibilmente intercettare se vengono popolate
                
                JCheckBox è3d= new JCheckBox();
                è3d.setName("è3d"+1); 
                pSale.add(è3d);
                è3d.setBounds(210, y, 20, 20);
                
                y=y+30;
                //pSale.setSize(new Dimension(scrollSale.getWidth(),y));
                
                pSale.revalidate();
                
            }
    
            JButton CaricaCinema=new JButton();
            pSale.add(CaricaCinema);
            CaricaCinema.setBounds(100, y+20, 100, 40);
            CaricaCinema.setText("SALVA");      
            CaricaCinema.addActionListener(new Caricone());
            pSale.setPreferredSize(new Dimension(scrollSale.getWidth(),y+100));
            pSale.revalidate();
         
        }                                          
        
        public class Caricone implements ActionListener{
            public void actionPerformed (ActionEvent e){
                for (int i=0;i<anagCinema.numSale; i++){
                    cinema[i].capacità=capSala[i].getText;/*
                     * questa sintassi ovviamente non funziona se no era troppo 
                     * facile :)). Non vede le capSale che sono le jtext che creo dinamicamente prima
                      *
                     */
                    
                }
            }
        }
     
        
        
        public static void main(String args[]) {
            
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    new FTMaker().setVisible(true);
                    
                }
            });
            
          //QUA SOtTO VA IL MAIN!!!!!!!!!!
            
           
            
        }
        // Variables declaration - do not modify                     
        private javax.swing.JTextField città;
        private javax.swing.JButton creaCienam;
        private javax.swing.JLabel jLabel1;
        private javax.swing.JLabel jLabel2;
        private javax.swing.JLabel jLabel3;
        private javax.swing.JLabel jLabel4;
        private javax.swing.JTextField nomeCinema;
        private javax.swing.JTextField numSale;
        private javax.swing.JPanel pAnagrafica;
        private javax.swing.JPanel pSale;
        private javax.swing.JScrollPane scrollSale;
        private javax.swing.JTextField via;
        // End of variables declaration
    Ciao!!

  6. #6
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da eternauta
    E' vero, potrei caricare l'array tutto d'un fiato alla fine, ma se non capisco impazzisco!!!! E comunque anche se volessi caricare l'array alla fine, come potrei rintracciare le varie jtext?
    Beh, quando sai di dover creare N jtextfield... le metti in un array/collezione, no? Magari una lista dichiarata come attributo della classe e non come variabile locale...
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.