Probleme avec les interfaces graphiques

cs_coltman Messages postés 97 Date d'inscription jeudi 3 janvier 2008 Statut Membre Dernière intervention 10 février 2009 - 12 nov. 2008 à 14:32
dvoraky Messages postés 744 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 9 mai 2010 - 13 nov. 2008 à 07:57
Voilà en fait mon problème c'est que je ne comprends pas pourquoi
lorsque je crée un projet sur netbeans que je fais mes classes etc. je
rencontre un souci avec l'interface graphique.

En fait, après avoir créé mes classes, je crée une nouvelle GUI
Class (générée automatiquement par netbeans). Il me sort donc une page
avec deux onglet (Design et Code).

Le souci en fait est en deux parties :

- d'abord, je n'arrive pas à modifier le generated code pour modifier la méthode initComponents

- je n'arrive pas à ajouter des composant à l'interface à partir de
ma classe main ... en fait dans la classe main de mon projet si je veux
ajouter un ScrollPane à mon interface, le programme compile s'execute
mais ne m'ajoute pas le scrollpane à l'interface ...

merci pour vos reponses !
A voir également:

18 réponses

dvoraky Messages postés 744 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 9 mai 2010 8
12 nov. 2008 à 15:18
Salut,

Ne connaissant pas NetBeans je ne vais répondre qu'à ta deuxieme question.

Dis moi, comment tu utilises ton JScrollPane?

<hr width="100%" size="2" />
 C'est après des heures de codage que j'ai compris pourquoi les créateurs de Java ont choisi une tasse de café comme logo...
0
cs_coltman Messages postés 97 Date d'inscription jeudi 3 janvier 2008 Statut Membre Dernière intervention 10 février 2009
12 nov. 2008 à 15:26
ben en fait mon JScrollPane est la pour que je mette dedans un JTree, quand ce dernier est trop grand, je pourrais le parcourir avec les ascenceurs du JScrollPane.

pour l'utiliser je tappe ca :

JTree MonArbre = new JTree();
.....
.....
.....
JScrollPane ScrollTree = new JScrollPane(MonArbre);

maFrame.add(ScrollTree);
0
dvoraky Messages postés 744 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 9 mai 2010 8
12 nov. 2008 à 15:51
Oui c'est bien ce qu'il me semblait.

Il ne faut pas faire comme ceci.

JTree MonArbre = new JTree();
JPanel panneau = new JPanel();
panneau.add(MonArbre);
.....
.....
JScrollPane ScrollTree = new JScrollPane();
ScrollTree.setViewportView(panneau);

maFrame.getContentPane().add(ScrollTree);

Avec ceci tu devrais avoir tes deux petits ascenseurs

<hr width="100%" size="2" />
 C'est après des heures de codage que j'ai compris pourquoi les créateurs de Java ont choisi une tasse de café comme logo...
0
cs_coltman Messages postés 97 Date d'inscription jeudi 3 janvier 2008 Statut Membre Dernière intervention 10 février 2009
12 nov. 2008 à 16:07
ok donc là je suis un peu à côté de la plaque ...

(je sais que ce que propose ici dans mes questions ne marche pas mais je veux conmprendre pourquoi je me trompe ...)

du coup j'aurais quelques questions :

le viewport du scrollpane est en quelque sorte la partie du scrollpane où l'on peut mettre un composant ... pourquoi ne pas mettre directement le jtree dedans comme ce que j'ai fait ScrollTree.setViewportView(MonArbre) ?

pourquoi as tu fais intervenir un jpanel ??? et pourquoi y avoir mis le jtree enfin ca s'emele trop .. pour moi ce sont des sortes de boite : la frame contient le jscrollpane qui lui contient le jtree ... non ??

quelle est la difference entre faire  maFrame.getContentPane().add(component) et  maFrame.add(component) ??
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dvoraky Messages postés 744 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 9 mai 2010 8
12 nov. 2008 à 16:16
J'ai utilisé un JPanel parce que je trouve que c'est mieux de manipuler des Panel, comme ça on peut avoir plusieurs choses à l'intérieur, maintenant tu fais comme tu veux...
Pareil pour le getContentPane(), j'ai toujours appris comme ça et je trouve plus logique de récupérer d'abord le contenu et d'y rajouter quelques choses. Je n'ai pas d'explications pure et dure, désolé...

Pour moi, un JscrollPane, c'est pas un container... Mais plutot quelque chose qui va s'appliquer sur un Container (même si un JPanel n'est pas un Container mais bien un JComponent)

Je ne pense pas que cela s'emmele, pas encore quoi... Ca ne fait juste que faire un escalier :
"Dans la frame je rajoute un JScrollPane qui est une vue tronquée du JPanel qui contient le JTree"

<hr width="100%" size="2" />
 C'est après des heures de codage que j'ai compris pourquoi les créateurs de Java ont choisi une tasse de café comme logo...
0
cs_coltman Messages postés 97 Date d'inscription jeudi 3 janvier 2008 Statut Membre Dernière intervention 10 février 2009
12 nov. 2008 à 16:28
ah je vois je vois donc jscrollpane c'est une sorte de calque qui au cas ou te permet de naviguer dans un composant trop grand ... ok i got it ;)

sinon tu me dis que c'est plus logique d'utiliser un getContentPane() mais tu ne l'as pas fait pour le panneau ... c'es ta dire tu n'as pas fait panneau.getContentPane().add(MonArbre) ... je ne suis pas convaincu de l'utilité de la chose ...
0
dvoraky Messages postés 744 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 9 mai 2010 8
12 nov. 2008 à 16:33
Si je ne fais pas de getContentPane() sur le panel, c'est tout simplement parce que c'est pas possible, il n'y a pas de méthode "getContentPane()" pour la classe JPanel...
Ensuite, oui, le JScrollPane, il faut que tu le vois comme une fenetre avec un grand paysage derrière. Au travers de ta fenêtre tu ne peux pas voir tout le paysage mais, si tu veux, tu peux déplacer la fenêtre pour découvrir un peu plus de paysage. Tu l'auras compris, le paysage est le JPanel qui est dans "setViewportView(panneau)".
Voilà, après, il faudrait poser une question pour savoir quel est le mieux : avec ou sans le getContentPane...

<hr width="100%" size="2" />
 C'est après des heures de codage que j'ai compris pourquoi les créateurs de Java ont choisi une tasse de café comme logo...
0
dvoraky Messages postés 744 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 9 mai 2010 8
12 nov. 2008 à 16:36
Pour info, je viens de faire une rapide recherche google sur le getContentPane.
Alors en fait, avant le JDK 1.5, il FALLAIT faire maFrame.getContentPane.add(...)

Mais maintenant, ils ont créé une méthode qui fait tout seul la même chose, donc en fait depuis le 1.5 :
maFrame.add(...) = maFrame.getContentPane().add(...)
Voilà, donc ta méthode ou la mienne marchent

<hr width="100%" size="2" />
 C'est après des heures de codage que j'ai compris pourquoi les créateurs de Java ont choisi une tasse de café comme logo...
0
cs_coltman Messages postés 97 Date d'inscription jeudi 3 janvier 2008 Statut Membre Dernière intervention 10 février 2009
12 nov. 2008 à 16:50
yes mister j'ai fait une recherche google et j'ai quand meme voulu savoir pourquoi tu l'utilisais parce que bon chacun ses habitudes et ses astuces ;) mais bon là ya pas d'astuces apparentes c'est juste une évolution ... parcontre j'ai vu ya une methode qui est pareil que le getcontentpane qui s'appelle getlayeredpane qui offre un tout petit chouia de plus que getcontentpane ...

par contre je bug un peu la ... ton analogie avec le paysage et la fenetre est parfait, sauf que voila il souleve une petite interrogation :

 je met mon arbre dans le contentpane --> ca c'est ok ... par contre pourquoi je vais mettre une fenetre (jscrollpane) au niveau du paysage (panneau) puisque je ne veux que l'arbre ... pourquoi donc ne pas appliquer le jscrollpane au jtree en faisant :

ScrollTree.setViewportView(MonArbre) ...
0
dvoraky Messages postés 744 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 9 mai 2010 8
12 nov. 2008 à 16:59
Non, non tu peux très bien faire ce que tu dis. Tu peux très bien appliquer le JScrollPane uniquement sur le JTree.
Moi je l'ai appliqué à un JPanel et j'ai rajouté le JTree dans ce JPanel juste par soucis d'évolution de ton code, on ne sait jamais peut etre que tu auras à rajouter des trucs à coté de ton JTree.
Mais un JScrollPane s'applique sur tous les composants!

<hr width="100%" size="2" />
 C'est après des heures de codage que j'ai compris pourquoi les créateurs de Java ont choisi une tasse de café comme logo...
0
cs_coltman Messages postés 97 Date d'inscription jeudi 3 janvier 2008 Statut Membre Dernière intervention 10 février 2009
12 nov. 2008 à 17:36
ok mister dvoraky merci pour tes réponses et ta réactivité ! top !
0
cs_coltman Messages postés 97 Date d'inscription jeudi 3 janvier 2008 Statut Membre Dernière intervention 10 février 2009
12 nov. 2008 à 21:57
RE !

j'avais pas mon code sous les yeux mais je viens de voir que j'ai fait à peu de choses près ce que tu m'as proposé mais ça m'affiche rien ! :( :s
0
cs_coltman Messages postés 97 Date d'inscription jeudi 3 janvier 2008 Statut Membre Dernière intervention 10 février 2009
12 nov. 2008 à 22:18
en fait plus généralement, aucune modification n'est faite !!! je m'explique :

j'ai ma classe Main et ma classe Interface.
Dans ma classe interface j'implémente les trucs de bases de l'application et dans la classe Main j'opère des modifications ...

J'ai fait une petite manipulation et voici les resultats de mes "tests" :

- je crée une instance de mon Interface.

Interface MonProgramme = new Interface();

->> résultat : à l'execution rien ne se passe !! je ne vois aucune fenetre !

- suite à ce dernier test je rajoute cette ligne

MonProgramme.main(args)

->> résultat : cette fois la fenêtre s'affiche d'où la question : pourquoi faut-il que j'appelle la fonction main? je m'auto réponds (et corrige moi si c'est faux) : parce que c'est dans le main qu'il y a la fonction run...
->> au passage; le compilateur me demande de plutot faire ceci : Interface.main(args) ... pourquoi donc ?

- quand je veux modifier le titre dans la classe main je fais

MonProgramme.setTitle("Mon programme qui me fair galérer un peu");

->> résultat : pas de changements ... la fenetre reste telle qu'elle est et comme elle a été définie dans la classe Interface ... la question est : why ?
0
dvoraky Messages postés 744 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 9 mai 2010 8
12 nov. 2008 à 23:10
???
Mais comment construis tu tes interfaces graphiques?
Ah oui, avec netbeans... Bon c'est bien ce que je disais, c'est vraiment nul

Non, mais là je peux pas t'aider, moi, je ne fais pas du tout comme ça.
D'habitude, je créé une classe avec un constructeur et tout qui va construire la fenêtre et tous les composants graphiques.
Ensuite, dans une autre classe dites "d'utilisation", je vais appeler ma classe Interface Graphique précédemment écrite.
En fait, dans ma classe d'utilisation, dans le public static void main(...) je n'aurais qu'un appel au constructeur graphique :
new Interface();

et Paf tout se construit et voilou...
C'est ma manière de faire, elle peut être critiquée, je le sais. De temps en temps, j'agrémente cette manière en y rajoutant un Design Pattern Singleton, mais c'est pour le fun

 C'est après des heures de codage que j'ai compris pourquoi les créateurs de Java ont choisi une tasse de café comme logo...
0
cs_coltman Messages postés 97 Date d'inscription jeudi 3 janvier 2008 Statut Membre Dernière intervention 10 février 2009
12 nov. 2008 à 23:36
bah en fait NetBeans ou Eclipse ou JBuilder normalement ça doit pas changer grand chose je pense ... ça reste après tout des IDE pour les avantages et les incovénients je ne pense pas que j'ai le niveau pour choisir ... mais bon n'empeche que les gens que je croise et qui ont l'habitude avec les deux mettent NetBeans à un niveau supérieur à celui d'Eclipse ... anyway ...

je vais faire une dernière manip et je te dirai si j'ai fais une gaffe ...
0
cs_coltman Messages postés 97 Date d'inscription jeudi 3 janvier 2008 Statut Membre Dernière intervention 10 février 2009
12 nov. 2008 à 23:56
mais juste une question au passage comme ça ... pourquoi le fait de mettre un deuxieme public static void main dans le projet est permis ??? je l'ai dans ma classe main et ma classe interface ...
0
cs_coltman Messages postés 97 Date d'inscription jeudi 3 janvier 2008 Statut Membre Dernière intervention 10 février 2009
13 nov. 2008 à 01:31
ça marche toujours pas j'ai tout retapé dans la classe interface et maintenant il me sort des erreurs de nulle part !!!!

   at java.awt.Container.addImpl(Container.java:1015)
        at java.awt.Container.add(Container.java:928)
        at javax.swing.JFrame.addImpl(JFrame.java:480)
        at java.awt.Container.add(Container.java:351)
        at javaapplication4.NewJFrame.(NewJFrame.java:26)
        at javaapplication4.Main.main(Main.java:24)
0
dvoraky Messages postés 744 Date d'inscription dimanche 1 avril 2007 Statut Membre Dernière intervention 9 mai 2010 8
13 nov. 2008 à 07:57
Je n'ai qu'un seul et unique public static void main.
Là, de ce que tu me dis, Netbeans te génère une manière de créer une interface graphique qui, à moi, ne me convient pas, c'est tout, je suis difficile
Vu, l'erreur, le programme a l'air d'aller trop vite en besogne et un Container ne serait pas initialisé avant d'être utilisé...
Je ne sais pas trop quoi te dire...
Envoi moi ta vrai adresse par MP, on va continuer par mail.
++

 C'est après des heures de codage que j'ai compris pourquoi les créateurs de Java ont choisi une tasse de café comme logo...
0
Rejoignez-nous