Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1529 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Bien développer sa GUI

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

Bien développer sa GUI

n°1080629
c0wb0y
:d
Posté le 12-05-2005 à 11:19:52  profilanswer
 

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
mood
Publicité
Posté le 12-05-2005 à 11:19:52  profilanswer
 

n°1081006
c0wb0y
:d
Posté le 12-05-2005 à 15:54:58  profilanswer
 

up :]
 
j'ai changé le titre qui était peut etre un peu trop repoussant ^^

n°1081132
la viper
Posté le 12-05-2005 à 16:59:59  profilanswer
 

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

n°1081288
Chronoklaz​m
Posté le 12-05-2005 à 18:29:11  profilanswer
 

Ptit site sympa : http://www.dil.univ-mrs.fr/~garreta/java/EdiPol/


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
n°1081402
EpoK
Let's burn
Posté le 12-05-2005 à 20:05:40  profilanswer
 

m'intéresse beaucoup également, notamment des infos sur l'analyse, la modélisation , le prototypage, l'ergonomie etc...


Message édité par EpoK le 12-05-2005 à 20:07:18
n°1081948
c0wb0y
:d
Posté le 13-05-2005 à 10:49:45  profilanswer
 

Personne pour apporter une contribution ? Je doute qu'il n'y ait aucun ici qui aurait déja developper une gui en java  :p  

n°1081959
Cherrytree
cn=?
Posté le 13-05-2005 à 10:54:34  profilanswer
 

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.


---------------
Le site de ma maman
n°1081986
c0wb0y
:d
Posté le 13-05-2005 à 11:11:57  profilanswer
 

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 :
  1. private javax.swing.JProgressBar jProgressBar1;


 
Quand le thread demare (appel de run())
j'instancie jProgressBar1 = new javax.swing.JProgressBar(0,100); et j'affiche mainFrame.

Code :
  1. public void run() {     
  2.        new MainFrame().setVisible(true);
  3.        jProgressBar1 = new javax.swing.JProgressBar(0,100);
  4.     }


 
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 :
  1. public void updateJProgressBar(int i, int max){
  2.         jProgressBar1.setValue((int)((float)i/(float)max)*100); 
  3.         jProgressBar1.updateUI();
  4.     }


 
 
Ensuite, dans la classe FrameManager
J'ai une methode qui fait le lien entre la frame et l'application :  

Code :
  1. public synchronized static void updateProgressBar(int i, int max){
  2.         mainFrame.updateJProgressBar(i,max);
  3.     }


(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 :
  1. while((fileName = listeImage.readLine()) != null){
  2.    ...
  3.    FrameManager.updateProgressBar(i,imMoy.getNbFichier());
  4.    ...
  5. }


 
(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 ^^

n°1081992
Cherrytree
cn=?
Posté le 13-05-2005 à 11:16:50  profilanswer
 

Mediator est une façon de faire OO.
 
Ton problème est bien exposé. Mais je ne connais pas la solution.


---------------
Le site de ma maman
n°1082061
black_lord
Truth speaks from peacefulness
Posté le 13-05-2005 à 12:01:48  profilanswer
 

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 ( :sweat: )
 
mais java et moi ça fait 2


Message édité par black_lord le 13-05-2005 à 12:02:12

---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
mood
Publicité
Posté le 13-05-2005 à 12:01:48  profilanswer
 

n°1082236
c0wb0y
:d
Posté le 13-05-2005 à 14:12:06  profilanswer
 

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é  :D ). Tout les attributs étaient "public static" et il n'y avait pas 2 grammes de poo dedans  :ange:  
 
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  :ange:

n°1082588
beemer
Posté le 13-05-2005 à 17:13:53  profilanswer
 
n°1082596
the real m​oins moins
Posté le 13-05-2005 à 17:25:39  profilanswer
 

Citation :


(c'est du netbeans, d'ou l'utilisation de javax.swing...)


décidément, toi http://simogeo.free.fr/hfr/pingouino_zytrafumai.gif


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1082824
c0wb0y
:d
Posté le 13-05-2005 à 22:32:04  profilanswer
 

--  : 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  :D

n°1082827
c0wb0y
:d
Posté le 13-05-2005 à 22:33:35  profilanswer
 

beemer : déjà lu cette page, je vois pas ce que je fais mal dans mon code par rapport à ce qu'il propose :\

n°1082839
push
/dev/random
Posté le 13-05-2005 à 22:41:30  profilanswer
 

Ha pour casser y sont là les warlord du java, mais quand il est question de donner des conseils constructifs ya plus personne  :o

n°1082841
the real m​oins moins
Posté le 13-05-2005 à 22:43:01  profilanswer
 

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 :D


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1082844
nraynaud
lol
Posté le 13-05-2005 à 22:48:03  profilanswer
 

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 ( :sweat: )


google + swingworker, ça répond à 90% des cas où les gens veulent une barre de progression.


---------------
trainoo.com, c'est fini
n°1082846
the real m​oins moins
Posté le 13-05-2005 à 22:52:47  profilanswer
 

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?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1082850
nraynaud
lol
Posté le 13-05-2005 à 22:59:12  profilanswer
 

the real moins moins a écrit :

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?


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.


---------------
trainoo.com, c'est fini
n°1082881
the real m​oins moins
Posté le 13-05-2005 à 23:22:47  profilanswer
 

non non, mais il est rempli par une requete sql qu'est pas hyper rapide quoua


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1082911
nraynaud
lol
Posté le 13-05-2005 à 23:42:28  profilanswer
 

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 ?


---------------
trainoo.com, c'est fini
n°1082917
the real m​oins moins
Posté le 13-05-2005 à 23:45:10  profilanswer
 

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 ?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1082927
nraynaud
lol
Posté le 14-05-2005 à 00:02:38  profilanswer
 

Code :
  1. // pouet pouet dans le handler de l'évènement qui déclenche l'action
  2. final TableModel m = jTable.getModel();
  3. jTable.setModel(null);
  4. new Thread("updater de table", new Runnable() {
  5.   public void run(){
  6.     <ajouter une ligne à m>
  7.     <updater la barre avec swingutilities.invokelater()>
  8.     <ajouter une ligne>
  9.     ...
  10.     SwingUtilities.invokeLater(new Runnable() {
  11.       public void run() {
  12.         jTable.setModel(m);
  13.         <virer la barre qui sert plus>
  14.       }
  15.     });
  16. }).start();


 
un exemple avec une barre et un swingworker inutile :
http://java.sun.com/products/jfc/t [...] mple1.java


---------------
trainoo.com, c'est fini
n°1082928
nraynaud
lol
Posté le 14-05-2005 à 00:04:43  profilanswer
 

ah oui, il faut afficher la barre avant tout ça.


---------------
trainoo.com, c'est fini
n°1082933
the real m​oins moins
Posté le 14-05-2005 à 00:10:57  profilanswer
 

nom de dieu


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1082938
nraynaud
lol
Posté le 14-05-2005 à 00:18:21  profilanswer
 

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 :
  1. public void calledFromAnywhere() {
  2.   if (!SwingUtilities.isEventDispatchThread()) {
  3.      SwingUtilities.invokeLater(new Runnable() {
  4.        public void run() {
  5.          calledFromAnywhere();
  6.        } 
  7.      });
  8.      return;
  9.   }
  10.   <travailler sur swing>
  11. }


 
[:dawa]


---------------
trainoo.com, c'est fini
n°1082940
the real m​oins moins
Posté le 14-05-2005 à 00:23:21  profilanswer
 

ayan [:dawa]
 
bon, tuto, merde, et je veux bien faire éditeur, pour partager les sous parce qu'on le vendra bien sur


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1082946
nraynaud
lol
Posté le 14-05-2005 à 00:27:44  profilanswer
 

je t'ai dit aussi que dans jcoincoin y'a pas de panneau de config dans les sources ? [:dawa]
 
(la classe ConfigurationGui est en fait une factory statique :o)


---------------
trainoo.com, c'est fini
n°1082987
beemer
Posté le 14-05-2005 à 04:07:03  profilanswer
 

comme c'est joli :  les warlords java spamment/squattent les topics :D


Message édité par beemer le 14-05-2005 à 04:11:46
n°1083155
the real m​oins moins
Posté le 14-05-2005 à 13:49:45  profilanswer
 

nraynaud a écrit :

je t'ai dit aussi que dans jcoincoin y'a pas de panneau de config dans les sources ? [:dawa]
 
(la classe ConfigurationGui est en fait une factory statique :o)


euh url ?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1083171
nraynaud
lol
Posté le 14-05-2005 à 14:09:15  profilanswer
 


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.


---------------
trainoo.com, c'est fini
n°1083176
the real m​oins moins
Posté le 14-05-2005 à 14:15:54  profilanswer
 

ha mais les trucs dégueux ça m'interesse pas :o
je crois que je 'lavais déjà vue, dans cette état


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1088050
c0wb0y
:d
Posté le 18-05-2005 à 15:54:59  profilanswer
 

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 ?

n°1088106
Chronoklaz​m
Posté le 18-05-2005 à 16:16:35  profilanswer
 

c0wb0y a écrit :


Sinon j'essayerai bien de creer la JFrame, puis de faire un JPanel qui prend toute la JFrame, et d'ajouter mes components dedans ?


 
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.


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
n°1088270
c0wb0y
:d
Posté le 18-05-2005 à 18:05:03  profilanswer
 

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 :( )

n°1088273
Cherrytree
cn=?
Posté le 18-05-2005 à 18:09:23  profilanswer
 

ça n'a pas de rapport.


---------------
Le site de ma maman
n°1095091
c0wb0y
:d
Posté le 24-05-2005 à 15:15:17  profilanswer
 

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 :
  1. jComboBox1 = ComboBox(new Vector<Trajectoire>(listeTrajectoire)); //liste trajcectoire est une ArrayList


 
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.

n°1095139
Cherrytree
cn=?
Posté le 24-05-2005 à 15:44:33  profilanswer
 

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é.


---------------
Le site de ma maman
n°1095157
Cherrytree
cn=?
Posté le 24-05-2005 à 15:53:38  profilanswer
 

Tiens, un exemple :
 

Code :
  1. package swingdemo;
  2. import javax.swing.*;
  3. import java.awt.*;
  4. import java.awt.event.ActionListener;
  5. import java.awt.event.ActionEvent;
  6. public class ComboBoxDemo extends JFrame implements ActionListener {
  7.     private DefaultComboBoxModel comboBoxModel;
  8.     private JButton button;
  9.     private JComboBox comboBox;
  10.     public ComboBoxDemo() {
  11.         Container contentPane = getContentPane();
  12.         contentPane.setLayout(new FlowLayout());
  13.         comboBoxModel = new DefaultComboBoxModel(new String[] {"Element #0"});
  14.         comboBox = new JComboBox(comboBoxModel);
  15.         contentPane.add(comboBox);
  16.         button = new JButton("Button" );
  17.         button.addActionListener(this);
  18.         contentPane.add(button);
  19.     }
  20.     public void actionPerformed(ActionEvent e) {
  21.         Object source = e.getSource();
  22.         if (source == button) {
  23.             comboBoxModel.addElement("Element #" + comboBoxModel.getSize());
  24.             comboBox.setSelectedIndex(comboBox.getItemCount() - 1);
  25.         }
  26.     }
  27.     public static void main(String[] args) {
  28.         JFrame frame = new ComboBoxDemo();
  29.         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  30.         frame.pack();
  31.         frame.setVisible(true);
  32.     }
  33. }


---------------
Le site de ma maman
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Bien développer sa GUI

 

Sujets relatifs
code C dans une GUIPetit site -> bien ou pas ?
[Reglé] Prob de tableaux sous IE (mais pas sous Firefox bien sur)Sun Java Studio Creator, c'est bien ?
Créer un Thread, c'est bien et le fermer...?On me dit ... le javascript, c'est pas bien ...
OK avec Firefox, pas bien avec IE, pb dreamweaver menu déroulantsCmt savoir si PHP a bien load MySQL ?!
Developper une application windows.... 
Plus de sujets relatifs à : Bien développer sa GUI


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR