Bien développer sa GUI - Java - Programmation
Marsh Posté le 12-05-2005 à 15:54:58
up :]
j'ai changé le titre qui était peut etre un peu trop repoussant ^^
Marsh Posté le 12-05-2005 à 16:59:59
j'ai ma propre xp sur le dev de GUI/Swing à base de design patterns.. mais effectivement, j'suis à l'affut d'un site de reference si possible en français
Marsh Posté le 12-05-2005 à 18:29:11
Ptit site sympa : http://www.dil.univ-mrs.fr/~garreta/java/EdiPol/
Marsh Posté le 12-05-2005 à 20:05:40
m'intéresse beaucoup également, notamment des infos sur l'analyse, la modélisation , le prototypage, l'ergonomie etc...
Marsh Posté le 13-05-2005 à 10:49:45
Personne pour apporter une contribution ? Je doute qu'il n'y ait aucun ici qui aurait déja developper une gui en java
Marsh Posté le 13-05-2005 à 10:54:34
De ce que je comprends de ton explication, tu utilises le pattern mediator pour centraliser autour de ton FrameManager les traitements et les accès à l'UI. C'est, je pense, un bon moyen d'éviter le couplage fort entre écrans de ton UI.
Pour ton problème de threads, un peu de code serait le bienvenu.
Marsh Posté le 13-05-2005 à 11:11:57
Heu, j'utilise pas de "pattern mediator" (pas trouvé dans la doc java) mais l'idée c'est ca oui.
Je poste ce qu'il faut pour comprendre le probleme avec la progressBar par exemeple :
Dans la classe MainFrame, je déclare l'objet (c'est du netbeans, d'ou l'utilisation de javax.swing...)
Code :
|
Quand le thread demare (appel de run())
j'instancie jProgressBar1 = new javax.swing.JProgressBar(0,100); et j'affiche mainFrame.
Code :
|
Toujours dans la classe MainFrame, j'ai une methode qui est censée me permettre de mettre a jour la valeur de la progresBar:
Code :
|
Ensuite, dans la classe FrameManager
J'ai une methode qui fait le lien entre la frame et l'application :
Code :
|
(c'est cette methode qu'on appellera depuis les autres classes car elle est statique)
Dans la classe Traitement
j'ai une methode lancerAnalyse() qui contient un boucle, ou j'effectue mes opérations.
Code :
|
(i est bien initialisé / incrémenter, et imMoy.getNbFichier() retourne bien une valeur)
Le problème : la JProgressBar ne se met pas à jour
Merci de l'aide que vous pourrez m'apporter ^^
Marsh Posté le 13-05-2005 à 11:16:50
Mediator est une façon de faire OO.
Ton problème est bien exposé. Mais je ne connais pas la solution.
Marsh Posté le 13-05-2005 à 12:01:48
J'ai déjà eu le problème avec la JProgressBar, j'avais pas eu le temps de résoudre le pb (c'était un projet à la con et il y avait plus important que la barre de progression) mais il me semble qu'il fallait faire un thread dédié à la MAJ de la progression de la barre ( )
mais java et moi ça fait 2
Marsh Posté le 13-05-2005 à 14:12:06
J'ai déja utiliser un jProgressBar pourtant, mais le programme était vraiment mal conçu (oui oui, c'est moi qui l'avait développé ). Tout les attributs étaient "public static" et il n'y avait pas 2 grammes de poo dedans
Bref, je mettais donc directement à jour mon jpb depuis la méthode de traitement en y accedant explicitement (static partout roulaize . (ou pas))
La gui était la classe principale, et elle lançait le thread de traitement. Le jpb était donc dans la gui,sans thread à part, mais ca marchait =/
Enfin, vu le code, c'est clairement pas un bon exempmle
Marsh Posté le 13-05-2005 à 17:13:53
tu peux deja regarder ici
http://java.sun.com/docs/books/tut [...] gress.html
Marsh Posté le 13-05-2005 à 17:25:39
Citation : |
décidément, toi
Marsh Posté le 13-05-2005 à 22:32:04
-- : Ce que je veux dire, c'est que lorsqu'on utilise netbeans pour developper l'interface graphique en visuel (en ajoutant visuellement les components au container) netbeans ne fais pas les imports nécessaires, mais à la place, il prefixe toute les classes avec javax.swing.JButton par exemple.
C'est peut etre configurable, à vrai dire je n'ai pas cherché, ca ne me pose pas problème
Par contre, si tu vois ou se trouve mon problème, ca me serait beaucoup plus utile
Marsh Posté le 13-05-2005 à 22:33:35
beemer : déjà lu cette page, je vois pas ce que je fais mal dans mon code par rapport à ce qu'il propose :\
Marsh Posté le 13-05-2005 à 22:41:30
Ha pour casser y sont là les warlord du java, mais quand il est question de donner des conseils constructifs ya plus personne
Marsh Posté le 13-05-2005 à 22:43:01
c0wb0y a écrit : -- : Ce que je veux dire, c'est que lorsqu'on utilise netbeans pour developper l'interface graphique en visuel (en ajoutant visuellement les components au container) netbeans ne fais pas les imports nécessaires, mais à la place, il prefixe toute les classes avec javax.swing.JButton par exemple. |
ha autant pour moi
Marsh Posté le 13-05-2005 à 22:48:03
black_lord a écrit : J'ai déjà eu le problème avec la JProgressBar, j'avais pas eu le temps de résoudre le pb (c'était un projet à la con et il y avait plus important que la barre de progression) mais il me semble qu'il fallait faire un thread dédié à la MAJ de la progression de la barre ( ) |
google + swingworker, ça répond à 90% des cas où les gens veulent une barre de progression.
Marsh Posté le 13-05-2005 à 22:52:47
au fait nraynaud, j'ai une question pour toi
(à laquelle je trouverais surement la réponse en mattant un peu les docs en question)
j'ai un TableModel qui met du temps à se remplir . qu'est-ce que je peux faire de malin pour pas que mon appli bloque apres le click dans le menu qui va afficher la table?
Marsh Posté le 13-05-2005 à 22:59:12
the real moins moins a écrit : au fait nraynaud, j'ai une question pour toi |
tu remplis les cases une par une ? dans ce cas, vire le tablemodel de la jtable, remplis-le et remets-le, parce que la propagation des évènements case par case doit bouffer de la ressource.
Marsh Posté le 13-05-2005 à 23:22:47
non non, mais il est rempli par une requete sql qu'est pas hyper rapide quoua
Marsh Posté le 13-05-2005 à 23:42:28
the real moins moins a écrit : non non, mais il est rempli par une requete sql qu'est pas hyper rapide quoua |
tu fais un swingworker avec une barre de progression (attention, il faut quand même détacher le tablemodel comme j'ai dit avant si tu fais ça, et les opérations d'attachement/détachement doivent être faites dans le thread de swing) ?
sinon, tu peux bloquer swing en mettant un curseur d'attente ?
mais c'est incompressible, donc tu dois faire patienter l'utilisateur non ? j'ai mal compris ?
Marsh Posté le 13-05-2005 à 23:45:10
oui, le faire patienter mais pas en bloquant tout le bordel quoi. la barre de progression est sans doute la way to go, mais je ne sais pas estimer quand j'aurai fini.. enfin.
attachement/detachement = setTableModel(..) ?
donc le swingworker charge les données, construit le tablemodel, et me le laisse dispo quelque part, et je fais le setTM qque part en dehors du SW ?
Marsh Posté le 14-05-2005 à 00:02:38
Code :
|
un exemple avec une barre et un swingworker inutile :
http://java.sun.com/products/jfc/t [...] mple1.java
Marsh Posté le 14-05-2005 à 00:04:43
ah oui, il faut afficher la barre avant tout ça.
Marsh Posté le 14-05-2005 à 00:10:57
ReplyMarsh Posté le 14-05-2005 à 00:18:21
t'es pas obligé de faire aussi laid hein, j'ai tout emboité parce que comme ça le code apparaît dans l'ordre dans lequel il sera exécuté.
je t'ai montré les méthodes auto-protectrices ?
Code :
|
Marsh Posté le 14-05-2005 à 00:23:21
ayan
bon, tuto, merde, et je veux bien faire éditeur, pour partager les sous parce qu'on le vendra bien sur
Marsh Posté le 14-05-2005 à 00:27:44
je t'ai dit aussi que dans jcoincoin y'a pas de panneau de config dans les sources ?
(la classe ConfigurationGui est en fait une factory statique )
Marsh Posté le 14-05-2005 à 04:07:03
comme c'est joli : les warlords java spamment/squattent les topics
Marsh Posté le 14-05-2005 à 13:49:45
nraynaud a écrit : je t'ai dit aussi que dans jcoincoin y'a pas de panneau de config dans les sources ? |
euh url ?
Marsh Posté le 14-05-2005 à 14:09:15
the real moins moins a écrit : euh url ? |
http://nraynaud.com/jcoincoin/jcoincoin.jnlp l'application (options->open configuration)
http://opensvn.csie.org/jcoincoin/ [...] onGui.java la factory (bien dégueu, mais je manque de courage pour intervenir dessus tellement c'est le bordel)
http://opensvn.csie.org/jcoincoin/ [...] ibune.java une classe configurable.
Marsh Posté le 14-05-2005 à 14:15:54
ha mais les trucs dégueux ça m'interesse pas
je crois que je 'lavais déjà vue, dans cette état
Marsh Posté le 18-05-2005 à 15:54:59
up ^^
(toujours pas réussi a faire fonctionner ces conneries -_-)
Est ce qu'utilise que des JFrame et donc aucun JPanel peut poser ce genre de problèmes ?
Sinon j'essayerai bien de creer la JFrame, puis de faire un JPanel qui prend toute la JFrame, et d'ajouter mes components dedans ?
Marsh Posté le 18-05-2005 à 16:16:35
c0wb0y a écrit : |
Tu peux aussi faire plein de JPanel et les rajouter dans ta JFrame ... je veux dire que t'est pas obligé de mettre tout d'abord dans un JPanel puis ce JPanel dans la JFrame.
Marsh Posté le 18-05-2005 à 18:05:03
Mais d'un point de vue pratique, ca pourrait corriger mon probleme de progress bar qui progresse pas ? (:
(parceque bon, ca va me prendre du temps a tester, donc si c'est pour rien, le bad quoi )
Marsh Posté le 18-05-2005 à 18:09:23
ReplyMarsh Posté le 24-05-2005 à 15:15:17
Hop là
je réup (au lieu de créer un topic a chaque fois )
J'ai créé une Frame contenant 3 JComboBox
Ceux-ci sont instancié, vide, lors de l'appel de la méthode init() qui se charge de placer les Component.
Ensuite, l'utilisateur doit charger un fichier, puis j'en extrait des trajectoires.
Ces trajectoires je voudrais les mettre des les ComboBox (juste un label quoi)
Comme ya pas de methode addItem(Vector<?> V) j'ai réinstancier le ComboBox :
Code :
|
Après l'opération, je peux afficher en console le contneu du ComboBox (avec getItemAt()) mais dans la GUI, on ne voit pas les éléments :x
j'ai maté sur le net, et je pense qu'il faut mettre a jour la liste, mais je ne sais pas du tout comment le faire.
Marsh Posté le 24-05-2005 à 15:44:33
C'est au niveau du model qui tu dois travailler. Laisse la vue tranquille, mais donne-lui un model de bonne facture, typiquement un DefaultComboBoxModel ou apparenté.
Marsh Posté le 24-05-2005 à 15:53:38
Tiens, un exemple :
Code :
|
Marsh Posté le 12-05-2005 à 11:19:52
Bonjour,
Voila, je bosse sur l'interface graphique de mon projet de java, que je réalise avec swing. Mais en cours je n'ai jamais vraiment vu comment developper des gui, donc les tp qu'on a fait sont bien trop légers pour aborder le problème correctement.
Je voudrais savoir quelles sont selon vous les trucs à faire pour avoir une gui utilisable et facile a developper?
Personenellement, je developpe chaque frame séparemment. J'ai ensuite une classe qui fait le traitment demandé par le logiciel (classe qui travaille avec le noyau de l'application). Et j'ai une classe 'FrameManager' qui fait le lien entre le traitement et les frame. Dans cette classe j'ai des méthodes (statique) qui me permette d'acceder au TextArea de la fenêtre principale par exemple, ou d'essayer de mettre a jour la ProgressBar.
Je dis essayer car en fait, ca ne fonctionne pas :\
Ya pas d'erreur de compil' ni d'execution, mais rien n'apparait dans les frames. Le frame manager se charge de lancer 2 threads (Traitement et MainFrame). C'est peut etre ca qui pose probleme ? Comme ma gui est dans un thread, j'y ai pas acces?
Merci de votre aide
Message édité par c0wb0y le 12-05-2005 à 15:54:41