Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di cerza
    Registrato dal
    Oct 2009
    Messaggi
    310

    Individuare i componenti JTextField

    Ciao,
    ho una JDialog in cui ho diverse JTextField, aventi un nome univoco, costruite dinamicamente. Vorrei recuperare tra i vari componenti che compongono la mia JDialog solo alcune JTextField di cui conosco il nome, ho provato a fare questo

    codice:
    public void verifyComponent(){		
    		//Prendiamo tutti i componenti della JDialog
    		Component[] allComponent= this.getComponents();
    		
    		//Selezioniamo i soli componenti di tipo JTextField
    		for(Component c: allComponent){
    			
    			if(c.getClass().isInstance(JTextField)){
    				
    				
    			}
    			
    			
    		}
    		
    	}
    Ma non riesco a capire come verificare se il componente scandito sia proprio di tipo JTextField.
    Potreste darmi una mano?
    Grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da cerza Visualizza il messaggio
    ho una JDialog in cui ho diverse JTextField, aventi un nome univoco, costruite dinamicamente. Vorrei recuperare tra i vari componenti che compongono la mia JDialog solo alcune JTextField di cui conosco il nome, ho provato a fare questo

    Ma non riesco a capire come verificare se il componente scandito sia proprio di tipo JTextField.
    Se vuoi testare se un oggetto (in modo specifico un Component) rispetta la relazione "è-un" (IS-A) JTextField, ci sono due modi:

    1) con l'operatore instanceof:

    if (comp instanceof JTextField)

    2) tramite la reflection con il isInstance di Class. Ma devi prestare attenzione al isInstance! La documentazione chiarisce, perché va scritto:

    if (JTextField.class.isInstance(comp))

    isInstance() è l'equivalente "dinamico" del instanceof del linguaggio. E' l'argomento del isInstance che viene testato per verificare se è-un JTextField (non il contrario!)


    P.S. non so esattamente cosa hai fatto ma non è detto che devi per forza spazzolare tutti i componenti in un contenitore. E' possibile/probabile che ci siano strade migliori.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di cerza
    Registrato dal
    Oct 2009
    Messaggi
    310
    Grazie per la risposta,

    se invece facessi questo
    codice:
    for(Component c: allComponent){
    			if(c.getClass().getName().equals("Nome Campo")){
    				
    			}
    		}
    potrebbe essere migliore come scelta oppure è più corretto fare prima un controllo sul tipo di componente?
    Grazie ancora

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da cerza Visualizza il messaggio
    codice:
    			if(c.getClass().getName().equals("Nome Campo")){
    No, getName() di Class ti dà il nome completamente qualificato della classe. Non ti serve (non così).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  5. #5
    Utente di HTML.it L'avatar di cerza
    Registrato dal
    Oct 2009
    Messaggi
    310
    Quote Originariamente inviata da andbin Visualizza il messaggio
    No, getName() di Class ti dà il nome completamente qualificato della classe. Non ti serve (non così).
    Grazie per la riposta, quindi non usando il getName di Class, in questo altro modo dovrebbe andare bene, giusto?

    codice:
    if(c.getName().equals("field_5")
    Grazie

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da cerza Visualizza il messaggio
    in questo altro modo dovrebbe andare bene, giusto?

    codice:
    if(c.getName().equals("field_5")
    "nì" ... sì e no. Allora: i componenti AWT/Swing hanno i getName/setName. Questo name NON è il nome di un campo/variabile che tu metti nella classe (es. private JTextField textField1; ).

    Se vuoi sfruttare il name dei componenti, puoi farlo, ma devi settargli tu un nome.


    P.S. non è che stai cercando di fare qualcosa di "troppo" articolato?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  7. #7
    Utente di HTML.it L'avatar di cerza
    Registrato dal
    Oct 2009
    Messaggi
    310
    Quote Originariamente inviata da andbin Visualizza il messaggio
    "nì" ... sì e no. Allora: i componenti AWT/Swing hanno i getName/setName. Questo name NON è il nome di un campo/variabile che tu metti nella classe (es. private JTextField textField1; ).

    Se vuoi sfruttare il name dei componenti, puoi farlo, ma devi settargli tu un nome.


    P.S. non è che stai cercando di fare qualcosa di "troppo" articolato?
    Grazie per la risposta,
    non so se è articolato, solo un programmatore guardando il mio codice potrebbe dirlo

    Comunque ogni JTextField ha un nome; altrimenti come potrei recuperare esattamente la JTextField per la quale devo controllore se il contenuto è corretto rispetto alle direttive fornitemi?

    Grazie ancora

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 © 2024 vBulletin Solutions, Inc. All rights reserved.