rafraichissement jscrollpane - Java - Programmation
Marsh Posté le 26-01-2014 à 10:12:47
jeremyl33240 a écrit : Bonsoir.
|
Bonsoir,
Si j'ai bien compris le problème, les données sont mises à jour dans la BDD mais pas sur l'affichage. Pour mettre à jour la JTable, on peut utiliser après avoir mis à jour les données (Obect[][] data) :
Code :
|
Un petit exemple simple :
Code :
|
Marsh Posté le 27-01-2014 à 20:49:45
Bonsoir.
Tu as tout à fait compris ce que je cherche à faire.
Je vais essayer de mettre en place cette méthode même si je sens que je vais me casser les dents avec mes 4 jtables et 40 boutons^^
En tout cas merci et je laisserai des nouvelles qu'elles soient bonnes ou pas.
Bonne soirée
Marsh Posté le 28-01-2014 à 10:16:41
Bonjour,
J'ai modifié rapidement le code et commenté tout ce qui est bdd mais quelque chose comme ça permet de faire la mise à jour de l'affichage :
Code :
|
Code :
|
Code :
|
Code :
|
Marsh Posté le 28-01-2014 à 13:19:09
Ah oui, t'as beaucoup bossé, merci pour ton temps.
La structure est là, le fonctionnement aussi. Il faut que je retouche l'action pour certain boutons qui ne sont pas bien associé sinon le rafraîchissement est bon.
J'ai remarqué une chose importante à laquelle je pensais que ça se ferait tout seul aussi c'est que quand on ajoute un nageur actif, celui-ci serait automatiquement ajouté d'un l'une des 4 jtable suivant son numéro de ligne hors là il faut quand même que je relance l'appli pour que la correction se fasse.
Cette modif serait faite par une autre appli qui touche la même DB.
A ton avis, est-ce que cela va changer en grande partie la structure de ce programme?
Re-merci à nouveau car je n'ai plus cette grosse épine dans le pied.
Bonne journée.
Marsh Posté le 28-01-2014 à 18:17:59
jeremyl33240 a écrit : Ah oui, t'as beaucoup bossé, merci pour ton temps. |
Si un nageur dans la ligne 1 et avec bonnet=5 n'existe pas dans la BDD il faut rajouter les actions lorsque l'on clique sur le bouton jbutton5 (ajouter une nouvelle ligne dans le tableau général data, mettre à jour la jtable puis tout sauvegarder dans la BDD).
L'architecture générale ne devrait pas trop changer, il faut juste rajouter les actions à réaliser après un appuie sur le bouton correspondant.
Si j'ai bien compris comment doit fonctionner le programme, le code suivant (dans le fichier ModifBoutons.java à la place de l'ancien switch(ligne){}) permet de rajouter automatiquement une ligne dans la jtable si le bonnet n'existe pas :
Code :
|
Le code est long puisqu'il faut réaliser pour chaque bouton l'action correspondante.
Si ce fonctionnement est bon, il faut faire la même chose pour les autres lignes 2,3,4 et sauvegarder dans la BDD s'il le faut, sinon on peut s'inspirer de ce code pour voir comment on rajoute des lignes dans la jtable et le tableau data.
Marsh Posté le 29-01-2014 à 11:15:27
Je vais vous résumer ce le projet sans faire trop compliqué,
il s'agit du pointage de nageurs qui font des longueurs pendant un temps donné (1 ou 2h). Avant il s'agissait de 4 personnes qui stabilotaient sur du papier donc c'est pour ça qu'automatiser ce système m'est venu en tête.
Au final de ce projet, il y aura 3 interfaces dont deux sur le même PC et une autre(celle sur laquelle vous m'aidez en ce moment) sur un autre PC connecté en wifi sur le même réseau.
La base de donnée est crée et fonctionne comme il faut pour le moment. J'ai mis le code de sa création à la fin du message.
Tout d'abord une interface principale qui permettra de créer les nouveaux nageurs dans la BDD mysql lors de leurs inscriptions, faire démarrer les nageurs(un ou plusieurs en même temps) en les mettant en "actif" le tout dans un menu déroulant. La même chose pour les arrêter(un ou tous) avec un menu déroulant avec case à cocher ou à sélectionner. Un dernier point pour cette fenêtre, il faudra aussi à la fin du challenge supprimer tous les nageurs inscrits (un bouton) afin de réutiliser l'application pour le prochain challenge.
Cette partie là n'est pas du tout codée sauf pour les requêtes SQL mais est faite sur le papier si vous voyez ce que je veux dire.
Dans un second temps, il y aura une fenêtre d'affichage qui sera sur le même PC que l'interface principale mais sur un second écran. Cette IHM permettra aux personnes du public de consulter les résultats(le classement des nageurs actif et classement total, les distances, les temps, leur vitesse moyenne). Cette IHM doit se rafraîchir toutes les x secondes pour afficher les données à jour des nageurs, mettre dans la partie "actif" ceux qui sont actif en ajoutant ou supprimant les lignes correspondantes aux nageurs.
J'ai déjà fait cette fenêtre, le rafraîchissement des données se fait mais l'affichage me pose problème pour le moment. C'est pour ça que je suis passé à la dernière IHM dont nous traitons ici.
http://hpics.li/a13e954
Donc sur un autre PC il me faut une appli qui se connecte à la même BDD de l'autre PC et qui se chargera de mettre à jour la distance des nageurs à chaque longueur(piscine de 25m donc le pointage se fait sur un aller-retour). Le pointeur aura sur son IHM les 4 tables qui correspondront aux 4 lignes de la piscine. Pour chaque nageur actif dans telle ligne, un bouton lui sera consacré pour incrémenter sa distance de 50m. Le pointeur pourra voir en direct la distance du nageur chose que vous m'avez résolu hier. Il faut que quand un nageur commence ou s'arrête(fait par l'IHM principale) sa ligne correspondante dans l'une des 4 tables du pointage s'ajoute ou s'efface.
La base de données :
Code :
|
http://hpics.li/e6822bb
J'ai regardé votre code mais je ne l'ai pas implémenté car je ne pense pas qu'il corresponde à ce que je voulais faire au départ. Néanmoins je vais travailler dessus pour voir si je peux l'adapter.
Je vous ai expliqué l'ensemble du projet que je fais à des fins personnelle et pour le club dans lequel je nage.
Il y a encore beaucoup de boulot néanmoins vous m'avez beaucoup aidé. Je vous en remercie.
Si vous avez d'autres questions, posez-les
Bonne journée à vous.
Marsh Posté le 29-01-2014 à 13:25:51
jeremyl33240 a écrit : |
Si j'ai bien compris :
Pour les actions des boutons, vu que le seul traitement au niveau IHM est de mettre à jour la distance il y a déjà un exemple dans le code, il faut juste vérifier que si l'on clique sur jbouton5 il y ait bien un nageur dans la ligne1 avec le bonnet 5 dans la BDD.
N'hésitez pas à poser des questions plus spécifiques sur de nouveaux topics sur ce forum ou ailleurs.
Un truc que je fais souvent, poser la question sur google avec des termes en anglais, les résultats sont beaucoup plus nombreux.
Bon courage pour votre projet.
Marsh Posté le 29-01-2014 à 14:25:09
point numéro 1 : exactement.
numéro 2 : c'est possible, je vais me pencher dessus dès que possible.
numéro 3 : l'heure de départ est notifié dans la BDD lors du démarrage du nageur avec l'heure courante après je ne me suis pas encore penché là dessus.
numéro 4 : ça me parait être la meilleure solution pour éviter le nombre de recherches de mises à jour sur la BDD trop conséquent. Par contre, je n'ai jamais travaillé sur ce genre de solution, il va falloir que je vois aussi.
Pour ce que vous avez souligné juste après, j'ai remarqué qu'il y a des exceptions si on clic sur le bouton d'un nageur qui n'est pas dans la base donc oui il faudra rajouter cette exception sans que celle-ci ne gène trop le pointeur.
Depuis plusieurs semaines, je n'ai jamais autant fait de requêtes Google pour ce projet, que ce soit en français ou anglais
Merci encore pour votre aide et soutien
Marsh Posté le 08-02-2014 à 22:15:02
Bonsoir.
Après avoir penché plusieurs jours sur ces sujets je n'ai pas trouvé grand chose de concret pour résoudre ce problème de mise à jour des lignes des jscrollpane après chaque clic
J'ai regardé les signaux tcp mais vraiment rien qui ne m'interpelle.
Marsh Posté le 10-02-2014 à 13:10:12
jeremyl33240 a écrit : Bonsoir. |
Pour moi, la méthode que je trouve la plus simple à implémenter et d'utiliser un thread (http://docs.oracle.com/javase/tuto [...] hread.html) qui va se connecter toutes les secondes pour rafraichir l'affichage.
Un exemple de l'emploi de thread (premier run()) : toutes les 500ms on affiche l'heure, SwingUtilities.InvokeLater permet d'appeler du code d'affichage à partir d'un autre thread que l'EDT (Event Dispatch Thread)
Code :
|
Sinon avec TCP, je pensais à quelque chose comme une communication client/serveur, une seule direction, où lorsque le client reçoit un message du serveur (ou l'inverse pourquoi pas), le programme se reconnecte à la BDD pour rafraichir l'affichage.
Serveur (affiche ce que lui envoie le client, à la place se reconnecter à la BDD et rafraichir l'affichage ?) :
Code :
|
Client (ici envoie du texte lorsque l'on appuie sur le bouton, à la place envoie un message lorsqu'un nageur est ajouté ?) :
Code :
|
Marsh Posté le 10-02-2014 à 17:29:30
Ah ouais ça va me modifier carrément tout ce que j'ai déjà fait cette histoire.
Ce matin je suis tombé sur ce code qui répond plus simplement à mes attentes. A votre avis il est possible de modifier le main pour qu'au lieu d'utiliser un timer, j'update se fasse sur le clic d'un des boutons?
Code :
|
Marsh Posté le 10-02-2014 à 20:50:33
jeremyl33240 a écrit : A votre avis il est possible de modifier le main pour qu'au lieu d'utiliser un timer, j'update se fasse sur le clic d'un des boutons? |
Oui c'est possible et c'est même plus simple je crois, un bouton pour mettre à jour une JTable même pas besoin de Timer.
Marsh Posté le 10-02-2014 à 21:09:50
d'accord. Je pense même que ça permettra de passer outre la solution que vous m'aviez donné pour l'incrémentation de 50 à chaque clic. La si on update à chaque clic, l'incrémentation et l'affichage se fait grâce à la relecture de la base.
Demain je me penche là dessus en vous tenant au courant.
Merci
Marsh Posté le 12-02-2014 à 07:57:31
C'est bien plus compliqué que je le pensais d'imbriquer toutes ces classes xD
Marsh Posté le 13-02-2014 à 13:16:46
Bonjour.
A chaque essai pour embriquer les différents codes venant du rafraichissement et de la fenêtre, je me trouve en face d'ne problème
GroupLayout layout = new GroupLayout(getContentPane());
getContentPane().setLayout(layout);
dans lequel netbeans ne connait pas getContentPane() alors que tout le reste est bon.
Avez-vous des idées?
Merci
Marsh Posté le 13-02-2014 à 19:51:58
jeremyl33240 a écrit : Bonjour. |
Bonjour,
La méthode qui appelle GetContentPane() appartient bien à une classe qui étend de JFrame ?
Marsh Posté le 14-02-2014 à 11:38:07
En fait la méthode initComponents était en static alors qu'il ne fallait pas mais maintenant ça me bloque dans l'actionperformed quand j'appelle initComponents qui n'est pas static...
J'ai revu encore ce matin mais je pense que je mélange tout car pour le lancement, ça ne me semble pas bon du tout.
Voilà le fouilli comme pourrait dire certain :
UpdateJtable
Code :
|
Ensuite FenPointage avec beaucoup de blabla que j'efface pour ne blesser les yeux à personne
Code :
|
Ensuite la ModifBoutons
Code :
|
Enfin Pointage
Code :
|
Vraiment désolé si ça vous fait pitier de voir ça.
Merci
Marsh Posté le 15-02-2014 à 18:31:46
Pour ne plus avoir d'erreur, il faut utiliser l'attribut fen de la classe ModifBoutons :
Code :
|
Je n'aurais pas utilisé autant le mot clé static (voir ce lien pour plus d'infos sur static : http://java.developpez.com/faq/jav [...] ClesStatic), pour moi seul Connexion est static.
J'utilise static la plupart du temps pour des méthodes où il n'y a pas nécessité qu'une instance soit créée :
Code :
|
Ici, on peut directement faire :
Code :
|
Sans static :
Code :
|
Pour avoir accès aux différentes méthodes il suffit de le passer en paramètre du constructeur comme ici :
Code :
|
Marsh Posté le 24-01-2014 à 18:39:19
Bonsoir.
Jeune développeur novice qui code pendant son temps libre je suis confronté à un problème que je n'arrive pas à résoudre depuis hier.
Le but de ce programme est qu'à chaque fois qu'on clique sur un bouton, cela ajoute 50 à la case distance correspondante.
Celle partie fonctionne très bien et la BDD se met à jour correctement.
Le seul et dernier soucis que je n'arrive pas à résoudre c'est que je voudrai que quand on clique sur l'un des boutons, le jScrollPane se mette à jour avec la nouvelle distance.
Pour voir en détail la fenêtre, elle se trouve ici :
Et sinon pour les classes, les voilàs
Connexion
FenPointage
Pointage
ModifBoutons
Juste pour info, j'ai bien ententu essayé de faire un p.start à la fin du actionPerformed mais résultat, une seconde fenêtre à jour se lance en plus de la première donc ce n'est pas pratique. Il me faut juste la réinitialisation des jScrollPane
Merci à celui ou celle qui pourra résoudre ce soucis qui à l'air simple sur le papier.
Bonne soirée,
Jérémy