problème avec JTabbedPane [Résolu] - Java - Programmation
Marsh Posté le 13-03-2003 à 19:48:49
tu as essaye d'afficher juste ton composant recherchePane[0], sans tab ?
Marsh Posté le 13-03-2003 à 20:34:14
pour le premier, oui...
pour la première image
Code :
|
pour la seconde
Code :
|
Marsh Posté le 14-03-2003 à 01:01:26
Ben, essaye de retirer des fonctionnalités de ton composants pour voir si c'est ça qui gène. Mais comme ça à l'intuition, moi y a rien qui me vient à l'idée
Marsh Posté le 14-03-2003 à 09:49:25
je vais essayer...
je finirai bien par trouver la solution, mais comme tous les problèmes que j'ai eu liés à Swing, je ne saurai jamais comment je l'ai résolu...
Marsh Posté le 14-03-2003 à 10:37:03
C'est bizarre, ton truc!! Essaie ce bout de code là :
Code :
|
et dis moi ce que ça donne...
Et...recherchePane[0], c'est quoi, comme truc??
Marsh Posté le 14-03-2003 à 11:18:42
Code :
|
voilà des infos sur ma classe RecherchePane
c'est un JPanel qui contient un JScrollPane.
ce JScrollPane contient un JPanel.
et le dernier JPanel contient tous les composants de la recherche
JTextField
plusieurs JButton
et d'autres trucs pour le mode avancé, mais il n'apparaissent pas à l'affichage au début.
Marsh Posté le 14-03-2003 à 11:22:42
sur le RecherchePane
getPreferredSize() me retourne une valeur correcte
getSize() me retourne 0x0
Marsh Posté le 14-03-2003 à 11:29:43
gfive a écrit : C'est bizarre, ton truc!! Essaie ce bout de code là : |
RAS, ça fonctionne correctement
voilà le code de la fonction createLayout() de la class RecherchePane :
Code :
|
et ça marche toujours pas
recherchePane[0].getPreferredSize() = java.awt.Dimension[width=161,height=29]
recherchePane[0].getSize() = java.awt.Dimension[width=0,height=0]
Marsh Posté le 14-03-2003 à 11:53:47
bon, j'ai trouvé d'où vient le problème, mais j'ai toujours pas compris pourquoi ça foire
Code :
|
quand j'ajoute recherchePane[0], ça marche pas, et quand j'ajoute temp, ça marche
quelqu'un sait pourquoi le tableau foire ?
Marsh Posté le 14-03-2003 à 12:00:23
Il serait pas null, des fois, ton recherchePane[0]???
Enfin, normalement, si nbRecherches ne vaut pas 0, ça devrait marcher (donc, au passage, nbRecherches ne vaut pas 0, sinon, tu aurais un ArrayIndexOutOfBoundsException....
Et ton typeFormulaire, tu es sûr que ça marche comme il faut??
Ca m'intrigue, ton machin, parce que t'as pas l'air d'avoir fait d'erreur...Ou alors, comme souvent quand on se fait des noeuds au cerveau en cherchant un bug, t'as une grosse bourde de base sous le nez, et tu la vois pas! D
C'est pour ça, a la limite, fait péter plus de code (là au besoin : gfive@altern.org) : vu que je connais pas ton code, s'il y a un truc douteux qui te choque pas parce tu le vois tous les jours, je le verrai peut-être..
Marsh Posté le 14-03-2003 à 12:05:23
gfive a écrit : Il serait pas null, des fois, ton recherchePane[0]??? |
bah non il est pas null, sinon j'aurais un NullPointerException en faisant un getPreferredSize() dessus
j'ai essayé d'utiliser des ArrayList, ça foire aussi
Marsh Posté le 14-03-2003 à 12:13:06
si quelqu'un comprend pourquoi ce code marche :
Code :
|
et pas celui-ci :
Code :
|
je suis preneur parce que là, je suis perdu
Marsh Posté le 14-03-2003 à 12:17:13
Euuuh....Attends, tu as le code du constructeur que tu appelles comme ça :
new RecherchePane(this,typeFormulaire)
Parce que le fait que ça marche pas dans une boucle, et qu'il y ait un "this" dans les arguments, ça m'inspire que ton problème pourrait être dans ce coin là, en fait!
Marsh Posté le 14-03-2003 à 12:20:32
Code :
|
j'ai essayé en forçant, mais ça marche pas non plus :
Code :
|
Marsh Posté le 14-03-2003 à 12:25:43
Et ça :
fieldListener = new RechercheFieldListener(this);
Ca fait quoi??
Parce que bon, avant ça, ton RecherchePane, il est vide....
Marsh Posté le 14-03-2003 à 12:42:18
on s'en fout de fieldListener
c'est un truc que je dois changer en class anonyme de toute façon...
en gros c'est un actionListener qui possède ue référence vers son RecherchePane et qui lance une action...
j'ai enlevé du constructeur le code qui crée le layout, vu qu'il n'est pas en cause, car il se sert pas de la reference...
Marsh Posté le 14-03-2003 à 12:59:17
ben, justement, le comportement que tu obtiens me fait pesner que le code de remplissage du RecherchePane pourrait être en cause : enfin, indirectement : il marche pour une instance de recherchePane, mais il plante si tu l'appelle ensuite sur un deuxième (à cause du this, en fait)....A moins que tu n'y fasse que des 'new machin' a l'intérieur....Parce que sinon, vraiment, ça m'étonne!
Marsh Posté le 14-03-2003 à 13:53:21
en fait, nbRecherche = 1, donc dans tous les cas, il n'y a qu'un seul tour de boucle (c'est juste un prévision pour le futur)
mais ce problème apparait sur tous les panel que je crée en boucle (j'ai un autre objet du même type qui a le même comportement, mais qui lui ne créer acuun listener avec this en paramètre)
c'est vraiment louche...
j'essaye d'enlever le new listener, mais j'ai des doutes...
Marsh Posté le 14-03-2003 à 13:58:12
voilà le nouveau code du constructeur, j'ai laissé le reste (la boucle et la création d'un seul RecherchePane) tel quel
Code :
|
le résultat est toujours le même...
Marsh Posté le 14-03-2003 à 14:08:37
ça remplit le panel
de plus en plus étrange :
Code :
|
ça m'ajoute bien un panel de nom "0", mais le panel recherchePane.get(0) ne s'affiche toujours pas
Marsh Posté le 14-03-2003 à 14:13:25
ben...il doit être vide, ton panel, je vois que ça!! C'est createLayout() qui fait pas bien son boulot.....
Essaie un truc :
Code :
|
avec un import java.awt.*; au début....Si quand tu cliques sur l'onglet '0', tu vois un machin rouge, ben c'est que c'est ça!
Marsh Posté le 14-03-2003 à 14:14:47
mais non ! puisque quand j'ajoute un RecherchePane en dehors de la boucle il s'affiche bien.
si c'était aussi simple que ça, j'aurai trouvé depuis longtemps...
Marsh Posté le 14-03-2003 à 14:15:46
ben, pas forcément....Si dans createLayout(), tu utilises ref, qui est le même pointeur pour tous les éléments de ta boucle, ça peut planter!
Marsh Posté le 14-03-2003 à 14:20:25
bon, voici le dernier code (j'ai mis nbRecherches = 3 pour faciliter) :
Code :
|
alors avec ça, tabbedPane.getTabCount() = 6
je fais un screenshot de ce pas pour montrer le résultat...
Marsh Posté le 14-03-2003 à 14:25:03
Essaie de faire un System.out.println(current.getTabName()) dans la boucle...Si ça se trouve, il est null, le nom..
Marsh Posté le 14-03-2003 à 14:32:19
Pinaize!!!!! Mais c'est dingue, ce truc!!!
Si tu veux un regard extérieur (et puis aussi, ça me prend la tête, ton machin! ) tu peux m'envoyer le code là : gfive@altern.org, que je regarde ça.
Promis, je suis pas un méchant pirate!
Marsh Posté le 14-03-2003 à 14:37:00
c'est pas le problème d'être un méchant pirate, c'est que le code de la classe InterfaceApplet est assez conséquent, et je peux pas te l'envoyer sans t'envoyer 2000 packages avec
j'essaye d'épurer la classe RecherchePane et de créer une nouvelle applet, et je t'envoie le tout...
Marsh Posté le 14-03-2003 à 14:46:26
bien spur ça marche quand c'est épuré...
Code :
|
Code :
|
Marsh Posté le 14-03-2003 à 15:34:50
j'ai trouvé d'où vient le problème
on ne peut pas ajouter un seul JPanel dans 2 JTabbedPane, sinon il s'enlève du premier. Code qui prouve :
Code :
|
Code :
|
moi qui croyais que tout n'était que référence en Java...
c'est quand même foireux, on l'ajoute au second, il disparait du premier, mais il reste dans sa liste ! (le getTabCount() donne toujours 6)
un grand merci à gfive qui m'a accompagné dans cette opération prise de tête... merci copaing
Marsh Posté le 14-03-2003 à 15:46:26
Ah ouais!! Subtil, en effet, mais relativement normal, pour une UI , en fait....
Enfin, félicitation!!
Marsh Posté le 14-03-2003 à 15:52:53
gfive a écrit : Ah ouais!! Subtil, en effet, mais relativement normal, pour une UI , en fait.... |
je ne fais du Swing que depuis 6 mois, mais moi ça me parait normal de pouvoir afficher le même composant depuis plusieurs endroits différents...
si on me dit le contraire, ben je veux bien, mais dans ce cas, que ce soit cohérent. un tabbedPane qui renvoit une taille de 6 alors qu'il n'affiche que 3 formulaires, c'est chelou
à bientôt pour de nouvelles aventures !!!
Marsh Posté le 14-03-2003 à 16:03:43
Predicator a écrit : |
Ben en fait dans certains cas, les DataModel te permettent de lier plusieurs composants a des memes donnees.
Par contre reutiliser un meme composant graphique, je sais pas si c'est tres "bien".
Mais c'est vrai que ça pourrai sembler pratique ... ça se discute
Marsh Posté le 14-03-2003 à 17:24:50
en y réfléchissant, c'est vrai que ça peut pas marcher...
sinon getParent() s'emballe
mais quand même, ne pas mettre à jour les données, on m'enlèvera pas de la tête que c'est chelou
Marsh Posté le 13-03-2003 à 18:11:00
voilà, quand j'essaye d'afficher un composant Recherche de ma composition, qui dérive de JPanel, et qui contient un JScrollPane, voilà ce que j'ai :
jusque là rien d'étrange, mais quand j'essaye de le mettre dans un JTabbedPane, ben ça passe plus
voilà le code qui me génère ce tabbedPane :
je plus étrange est que getTabCount() me retourne 2
vous savez d'où ça pourrait venir ?
merci
### EDIT
dsl si les images s'affichent pas, mais fucking hébergeur inside
en gros, dans la première image, il y a un joli Panel de recherche (champ de recherche, bouton de mode avancé et tout le tralala)
dans la deuxième image, il y a un JTabbedPane avec un premier tab nommé "buzz" et qui affiche "bozzo le clown", mais il n'y a pas de deuxième tab...
Message édité par Predicator le 14-03-2003 à 15:35:17