envisat
Messages postés3Date d'inscriptionvendredi 2 juillet 2004StatutMembreDernière intervention16 juillet 2004
-
15 juil. 2004 à 19:46
cs_neodante
Messages postés2835Date d'inscriptionlundi 11 août 2003StatutModérateurDernière intervention16 décembre 2006
-
16 juil. 2004 à 13:42
Bonjour à tous.... J'ai besoin d'un coup de pouce SVP
je suis entrain de faire un projet scolaire et je dois utiliser un hastable pour mette des données. Je dois la parcourir et faire afficher les informations dans des JTextField. Je ne sais pas comment y parvenir. Cette partie du programme doit être fait avec des bouttons suivant et précedent....je mets mon code pour voir si qqun peut m'aider.......................Merci à l'avance
public class PanneauMiseaJourClient extends JFrame
{
private JLabel LabelCompte = new JLabel("COMPTE",JLabel.CENTER);
private JLabel LabelNom = new JLabel (" NOM ", JLabel.CENTER);
private JLabel LabelPrenom = new JLabel ("PRÉNOM", JLabel.CENTER);
private JLabel LabelSexe = new JLabel (" SEXE ", JLabel.CENTER);
private JLabel LabelSolde = new JLabel ("SOLDE ", JLabel.CENTER);
private JTextField TFCompte = new JTextField (20);
private JTextField TFNom = new JTextField (20);
private JTextField TFPrenom = new JTextField (20);
private JTextField TFSexe = new JTextField (20);
private JTextField TFSolde = new JTextField (20);
private JButton BtOuvrir = new JButton("Ouvrir Fichier");
private JButton BtSuivant = new JButton("Client Suivant");
private JButton BtFermer = new JButton("Fermer Fichier");
private JButton BtPrecedent = new JButton("Client Précédent");
private JButton BtModifier = new JButton("Modifier Client");
private JButton BtSupprimer = new JButton("Supprimer Client");
private JPanel pane1 = new JPanel();
private JPanel pane2 = new JPanel();
private JPanel panneauMiseaJourClient = new JPanel();
// ajout des éléments au pane1
pane1.setLayout(new GridLayout(5,2));
pane1.setBackground(Color.blue);
pane1.add(LabelCompte);
pane1.add(TFCompte);
pane1.add(LabelNom);
pane1.add(TFNom);
pane1.add(LabelPrenom);
pane1.add(TFPrenom);
pane1.add(LabelSexe);
pane1.add(TFSexe);
pane1.add(LabelSolde);
pane1.add(TFSolde);
// ajout des éléments au pane2
pane2.setLayout(new GridLayout(2,3));
pane2.setBackground(Color.blue);
pane2.setForeground(Color.white);
pane2.add(BtOuvrir);
pane2.add(BtSuivant);
pane2.add(BtPrecedent);
pane2.add(BtModifier);
pane2.add(BtSupprimer);
pane2.add(BtFermer);
//ajout des pane 1 et 2 au panneauAjoutClient
panneauMiseaJourClient.add (pane1, BorderLayout.CENTER);
panneauMiseaJourClient.add (pane2, BorderLayout.SOUTH);
cs_neodante
Messages postés2835Date d'inscriptionlundi 11 août 2003StatutModérateurDernière intervention16 décembre 200611 15 juil. 2004 à 20:15
:big) Neodante :big)
Pour parcourir une hashtable comme pour parcourir n'importe quelle collection de JFC (Java Framework Collection ... un truc comme ça !) tu utilises les Iterator ... ce qui as un avantage considérable ... mais tu découvriras ça plus tard !
Iterator it = hashtable.iterator();
while (it.hasNext()){
TotoClasse titi = (TotoClasse)it.next();
// Utilisation de l'objet ...
}
Voilà tu vas pouvoir parcourir ta hashtable ...
@+
gmi19oj19
Messages postés545Date d'inscriptionlundi 10 mai 2004StatutMembreDernière intervention28 septembre 20112 15 juil. 2004 à 20:41
Neodante, je ne critiquerai pas le point de vue sur les iterator car je le partage (meme si j'utilise plus des Enumeration, tout aussi utile, pour des Vector)
Mais, pour le principe, au vu de son problème, je dirai qu'il doit gérer un compteur pour le rang, du fait qu'il cherche à pouvoir reculer, et non qu'avancer dans la HashTable.
Car je ne crois pas qu'il y est de méthode pour récuperer l'élément précédent (à vérifier).
cs_neodante
Messages postés2835Date d'inscriptionlundi 11 août 2003StatutModérateurDernière intervention16 décembre 200611 15 juil. 2004 à 21:33
:big) Neodante :big)
Y a pas de mal ... en plus tu ne critiques (à moins que ce soit vraiment dans ton idée ... je sais je joue les psycho à 2 balles de temps en temps !! lol) .... tu complètes sur ce que j'ai dit et c'est vrai que j'étais un peu à côté de la plaque !!!! lol
M'enfin je vais me rattrapper (j'espère !). C'est vrai les iterator() ne permettent pas de revenir en arrière et là n'est pas leur but ....
En revanche pourquoi utilises-tu une hashtable ??? Ne pourrais tu pas utilisé une LinkedList ... que tu dériverais en y ajoutant des méthodes pour parcourir ta chaine ... bon d'accord ca demande de regarder un peu les sources de Java (y a juste à décompresser le sources.zip du JDK) et de faire un héritage ... mais cela reste simple ...
Car pour ton problème la structure de données la plus adpatée est sans aucun doute la liste chainée ... ici double puisque tu as besoin de parcourir dans n'importe quel sens celle-ci !
Voilà ! J'espère mettre un peu rattrappé même si cela peut te paraitre obscur ... j'espère que non !
@+
cs_neodante
Messages postés2835Date d'inscriptionlundi 11 août 2003StatutModérateurDernière intervention16 décembre 200611 16 juil. 2004 à 09:37
:big) Neodante :big)
Bon alors ... réfléchissons ... il existe une méthode get() qui te renvoie l'objet en fonction de sa clé ... il suffirait en fait que lorsque tu ajoutes des objets tu mettes une clé de type Integer (par int mais Integer i = new Integer(1) par ex !) et que ensuite tu demandes maHashTable.get(new Integer(maSelection)) ... tout simplement ...
Sinon pour ton prob d'ajout de personne ... tu ajoutes l'objet client directement dans ta hashtable ... la hashtable ne prend pas que des String comme objet mais n'importe quel objet.
Je crois que tu n'as pas bien compris le fonctionnement de la hashtable ... la méthode put() ne prend que 2 arguments, la clé et l'objet que tu veux stocker ... regarde la JavaDoc si tu veux tout de suite démistifier cette classe : http://java.sun.com/j2se/1.4.2/docs/api/java/util/Hashtable.html ou dans la javadoc à télécharger à part du JDK.
De toute manière pour programmer en Java, la javadoc est indispensable ... sinon on rame et on arrive à rien ! En plus on ne progresse !
@+
[Responsable www.neogamedev.com]
Vous n’avez pas trouvé la réponse que vous recherchez ?
kirua12
Messages postés1155Date d'inscriptionsamedi 17 janvier 2004StatutMembreDernière intervention29 avril 20117 16 juil. 2004 à 10:14
Salut,
pour parcourir ta hashtable tu peux utiliser la méthodes values() qui te renvoie une collection des valeurs. Seul problème c'est qu'elle n'est pas ordonnée (tu ne retrouveras pas les éléments dans l'ordre dans lequel tu les as rentré). Ensuite pour parcourir dans les 2 sens tu peux utiliser ListIterator mais qui est définit sur List et non sur Collection.
donc il faut faire un truc du genre
cs_neodante
Messages postés2835Date d'inscriptionlundi 11 août 2003StatutModérateurDernière intervention16 décembre 200611 16 juil. 2004 à 11:23
:big) Neodante :big)
J'y avais pensé (lol) mais puisqu'il doit se servir de la hashtable uniquement et pas d'autres choses ... sinon il aurait surement utilisé autre chose ... un HashMap ou une LinkedList custom ou effectivement un ArrayList ... mais bon l'école reste l'école ... lol ... je sais j'y suis encore à moitié ! C'est triste quand même que lorsque tu veuilles faire différemment (et souvent mieux !) tu ne puisses pas ...
@+ everybody
envisat
Messages postés3Date d'inscriptionvendredi 2 juillet 2004StatutMembreDernière intervention16 juillet 2004 16 juil. 2004 à 00:15
malheureusement je dois absolument utiliser una hashtable dûes aux contraintes imposées par le professeur...je rappelle que c'est un projet scolaire...Est-ce possible de ramener la hashtable dans une autre forme et ensuite ramener les données voulues
mon problème de code se situe au niveau du
else if (e.getSource() == BtSuivant)
{
if(courant == htable.size()-1)
{
JOptionPane.showMessageDialog(null,"Vous êtes au dernier élément du tableau");
}
else
{
courant++;
temp = (Client) htable.elementAt(courant);
TFCompte.setText(String.valueOf(temp.getCompte()));
TFNom.setText(temp.getNom());
TFPrenom.setText(temp.getPrenom());
TFSexe.setText(String.valueOf(temp.getSexe()));
TFSolde.setText(String.valueOf(temp.getSolde()));
}
}
else if (e.getSource() == BtPrecedent)
{
if(courant == 0)
{
JOptionPane.showMessageDialog(null,"Vous êtes au premier élément du tableau");
}
else
{
courant--;
temp = (Client) htable.elementAt(courant);
TFCompte.setText(String.valueOf(temp.getCompte()));
TFNom.setText(temp.getNom());
TFPrenom.setText(temp.getPrenom());
TFSexe.setText(String.valueOf(temp.getSexe()));
TFSolde.setText(String.valueOf(temp.getSolde()));
}
}
envisat
Messages postés3Date d'inscriptionvendredi 2 juillet 2004StatutMembreDernière intervention16 juillet 2004 16 juil. 2004 à 00:19
dans un autre ordre d'idée... j'ai 5 JTextField à mettre dans la hashtable comment faire sans perdre de données...
le code suivant n'est pas valide, je ne sais que faire...
kirua12
Messages postés1155Date d'inscriptionsamedi 17 janvier 2004StatutMembreDernière intervention29 avril 20117 16 juil. 2004 à 11:31
c'est clair que pour stocker une liste d'objet la hashtable n'est pas le meilleur choix mais ne pas avoir la possibilité d'utiliser quelquechose pour améliorer ça c'est vraiment pénible. Comme tu dis "l'école c'est l'école" et je suis bien content d'en être sorti et de pouvoir faire ce que je veux :)