Newsgroup: it.comp.java
Titolo: JTextField dinamica

Ciao a tutti,
provengo da un altro linguaggio e da poco uso java.
Per evitare di scrivere parecchio codice in diverse JDialog volevo
rendere alcuni metodi molto flessibili per quanto riguarda la gestione
degli JTextField. Con questo codice arrivo ad individuare il
componente che mi interessa ma non riesco ad utilizzare il metodo
setText():
 x = 0;
 for (Component c : this.getContentPane().getComponents()) {
     if (c.getName().contains("fld_")) {
     ((JTextField) this.getContentPane().getComponent(x)).setText
("pippo");
}
                x++;
            }
il sistema mi dice
Exception: java.awt.TextField cannot be cast to javax.swing.JTextField
L'ideale era avere un metodo GetComponent(String nameTextField) per
puntare direttamente all'oggetto.
Qualcuno ha suggerimenti?
Grazie, Biagio

 ha scritto nel messaggio 
news:ba4c15fa-0178-458d...@c14g2000yqm.googlegroups.com...

Sei gi� messo a buon punto. Usando il ciclo che hai postato, puoi facilmente 
scrivere un metodo
getComponentByName(String name):
public Component getComponentByName(String name) {
    for (Component c : this.getContentPane().getComponents()) {
          String name = c.getName();
          if (c != null && c.equalsIgnoreCase(name))
             return c;
    }
   return null;
}
Se il componente restituito pu� essere null se il nome non viene trovato;
ricorda che devi fare anche un cast esplicito ed essere sicuro che il 
componente
sia un'istanza di JTextField: l'errore che hai riportato mostra che tu hai 
usato
java.awt.TextField e non JTextField. Sono due oggetti diversi.
Scorpio.

 Scorpio.
Grazie Scorpio,
ma non mi funziona, mi mancano dei passaggi.
Se copio il tuo metodo il compilatore mi segnala che:
1) "name" is already definited in getComponentByName(java.lang.String)
2) cannot find symbol equalsIgnoreCase(java.lang.String) location
java.awt.Component
forse non ho tutte le librerie collegate correttamente. Nel mio
sorgente ho il seguente import:
import java.awt.Component;
import java.sql.ResultSet;
import java.util.Properties;
import javax.swing.JTextField;
Quando utilizzerò il componente c dici che riuscirò ad usare i metodi
setText() per assegnare una stringa al TextField ?
Biagio


Allora, ho modificato il codice in questa maniera :
con questa porzione di codice processo una lista ... (codice non
completo ma che mi serve a capire se la soluzione funziona) .....
for(int i = 0; i<campiGet.size(); i++) {
                ((JTextField) this.getComponentByName
("fld_Nome")).setText("pippo");
            }
il codice suggerito da Scorpio l'ho modificato così:
public Component getComponentByName(String nameFld) {
        for (Component c : this.getContentPane().getComponents()) {
            String name = c.getName();
            if (c != null && name.compareToIgnoreCase(nameFld)==0) {
                return c;
            }
        }
        return null;
    }
però resta il problema che a runtime mi viene segnalato che:
Exception: java.awt.TextField cannot be cast to javax.swing.JTextField
insomma, non riesco a far apparire all'interno del JTextField la
stringa "pippo".
Suggerimenti ...


Risolto ...
((TextField) this.getComponentByName
("fld_Nome")).setText("pippo");  // funziona !!!!!
Grazie Scorpio ... senza il tuo aiuto non ci sarei riuscito :-)

Grazie Scorpio ... senza il tuo aiuto non ci sarei riuscito :-)
Prego, anche se secondo me hai fatto praticamente tutto tu. Sorry per gli 
errori nel codice
che ho postato, di solito sono pi� indicazioni che codice compilabile....
Scorpio