Problème popup JCombobox

Résolu
H4rDBuG Messages postés 47 Date d'inscription jeudi 14 janvier 2010 Statut Membre Dernière intervention 26 juillet 2011 - 24 juin 2011 à 16:40
H4rDBuG Messages postés 47 Date d'inscription jeudi 14 janvier 2010 Statut Membre Dernière intervention 26 juillet 2011 - 28 juin 2011 à 09:57
Bonjour,

Je suis actuellement en train de réaliser une application qui utilise des JComboBox.
Mon soucis, c'est que la JComboBox est remplit par une table MySQL par une liste de produit, le nom des produits peu varier de quelques caractères à 30-40 caractères.
Pour les produits à faible nombre de caractères, il n'y a aucun soucis, mais les grands noms de certains produits sont tronqués ...

Voila donc ma question : Comment faire en sorte que le popup de la JComboBox s'adapte au nom du produit sans pour autant changer la taille fixe de la JComboBox ?

enfait je veut un truc dans ce style la :
_____________________________
JComboBox | V |
____________________________________________
item au nom super long |
etc |
etc |
etc |
____________________________________________|

Biensur, j'ai déjà fait pas mal de recherches sur le net et tombé sur le code de Santosh, et sur un sujet déja similaire, ne voulant pas déterrer un sujet résolut depuis longtemps, je me permet de faire une nouvelle demande.

Le code de santosh est sans erreur, mais je n'arrive pas a l'adapter au mien. J'ai créé la classe WideComboBox qui extends de JComboBox, et j'ai bien déclaré ma JComboBox en WideComboBox()

mon code pour plus de précision :
WideComboBox CLibMProd;

CLibMProd = new WideComboBox();
CLibMProd.setPreferredSize(new Dimension(130,20));
CLibMProd.addItemListener(this);


le lien vers le code du sujet déjà traité :
http://www.javafr.com/forum/sujet-JCOMBOBOX-TAILLE-POPUP_1163895.aspx

Voila, j'éspère avoir été assez clair, j'attends vos réponses pour m'aider !

Cordialement,

H4RDBuG

19 réponses

H4rDBuG Messages postés 47 Date d'inscription jeudi 14 janvier 2010 Statut Membre Dernière intervention 26 juillet 2011
28 juin 2011 à 09:57
Je reviens en trombe !

ma toute derniere erreur venait du fait que je n'avait pas instancier mes items ...

Donc maintenant le GroupLayout marche et la WideCombobox aussi !

donc maintenant le plus dur est fait ^^

Je remercie donc GodConan pour toute l'aide apporté !

Don je répète (pour ceux qui pourrait avoir le meme problème que moi :

Le WideComboBox (la combobox perso de santosh) n'a marché dans mon cas qu'avec un GroupLayout ! Pour tout ceux qui aurait des problèmes avec ceci, envoyez moi un mail si vous avez des questions ^^

Bon Courage et merci encore

H4RDBuG
3
H4rDBuG Messages postés 47 Date d'inscription jeudi 14 janvier 2010 Statut Membre Dernière intervention 26 juillet 2011
24 juin 2011 à 16:47
Après publication, je me rends compte que mon dessin est complètement déformé ^^' c'est censé être un carré en dessous de la pseudo JComboBox :/
0
H4rDBuG Messages postés 47 Date d'inscription jeudi 14 janvier 2010 Statut Membre Dernière intervention 26 juillet 2011
24 juin 2011 à 21:11
up please c'est vraiment important !
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
24 juin 2011 à 22:24
Salut,
je viens de tester la class de Santosh et elle fonctionne tres bien...
enleve ton setpreferedsize déjà ;o) car il ne sert à rien ... la meilleur taille est calculé sur la taille du champ le plus large de la liste... ;o)

ensuite le probleme se situe peut etre au remplissage de ta liste??

GodConan ;o)
0

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

Posez votre question
H4rDBuG Messages postés 47 Date d'inscription jeudi 14 janvier 2010 Statut Membre Dernière intervention 26 juillet 2011
24 juin 2011 à 23:00
Justement, pour des raisons d'interface, il faut que je définisse la taille de ma JComboBox, sinon le problème ne se poserais pas ... la valeur la plus grande de ma liste déforme toute l'ihm, c'est pour cela que la taille de la combobox doit etre fixe et la taille du popup doit s'adapter.

Comment as-tu intégré la classe de Santosh ? ta méthode diffère-t-elle de la mienne ?
0
H4rDBuG Messages postés 47 Date d'inscription jeudi 14 janvier 2010 Statut Membre Dernière intervention 26 juillet 2011
24 juin 2011 à 23:08
qui plus est, (désolé du double post), j'ai bien précisé que je ne remettais pas en doute l'éfficacité du code de Santosh, mais je crois que je n'arrive pas a l'intégrer a mes propres besoins ...

De plus, je ne pense pas que le problème viennent du remplissage, j'ai fait une méthode tout a fait normal (une requete et un curseur qui pour chaque occurence trouvée par la requete, l'ajoute dans la combobox), je posterais le code de ma méthode si besoin est, mais seulement lundi (le projet se trouve sur mon lieu de travail, et oui vendredi soir a 23h, je bosse toujours ^^)
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
25 juin 2011 à 04:31
;o) si cela deforme ton ihm ;o) c est surement qu il y a un probleme de layout ;o) ou que tu as mal recopier le code de santosh ;o), donne le code d implentation de ta combo... et le code des methodes de ta WideCombo ;o) on pourra toujours regarder ca... Sinon! As tu compris ce que faisait le code de santosh?! cela peut t aiguiller!!?

GodConan ;o)
0
H4rDBuG Messages postés 47 Date d'inscription jeudi 14 janvier 2010 Statut Membre Dernière intervention 26 juillet 2011
25 juin 2011 à 10:34
Bonjour,

Actuellement, le code de Santosh est un copié collé dans une nouvelle classe WideComboBox qui extends de JComboBox,je ne pense pas a une mauvaise recopie (j'ai vérifié plusieurs fois), ce que je sais du code de Santosh, c'est qu'il permet d'obtenir ce que je cherche, et je suis ici car je n'arrive pas a le faire ^^'

J'implémente ma WideComBox de la façon suivante :

WideComboBox CLibMProd;

CLibMProd = new WideComboBox();
CLibMProd.setPreferredSize(new Dimension(130,20));
CLibMProd.addItemListener(this);

Cependant, je ne pense pas a un problème de layout, sans définir de taille a ma JComboBox, elle prends par défaut la valeur de l'item le plus grand, ce qui a pour effet d'etendre mon ihm en longueur et dans ce cas ... ce n'est vraiment pas fonctionnel ... (les composants restent a la même place mais ils sont étiré), alors que si je défini la taille de ma JComboBox, l'ihm ne bouge pas mais le popup de la JComboBox a la meme longueur que la JComboBox, ce qui a pour effet de tronquer le nom des grandes valeurs ...

H4rDBuG
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
25 juin 2011 à 11:35
selon les symptomes ;o) c est bien un probleme de layout...
dans mon exemple j utilise un gridbag ou je place ma combo avec donc taille et position definient... ensuite le popup est bien plus grand que ma combo fermé et en fonction de la valeur de champ la plus encombrante ;o)
sinon tu peux aussi utiliser des scrollbar ds ton popup!!?


GodConan ;o)
0
H4rDBuG Messages postés 47 Date d'inscription jeudi 14 janvier 2010 Statut Membre Dernière intervention 26 juillet 2011
25 juin 2011 à 12:00
Donc selon toi sa serait un problème de layout ... je vais me pencher sur le gridbag, mais a ce qu'on m'as dis c'est très difficile de l'approcher ... pourrais-tu s'il tep lait, me montrer comment tu l'utilises avec les JComboBox ?
0
H4rDBuG Messages postés 47 Date d'inscription jeudi 14 janvier 2010 Statut Membre Dernière intervention 26 juillet 2011
25 juin 2011 à 12:08
et autre question, dans le cas ou j'utiliserais le GridBag, serais-je obligé de refaire toute mon interface avec ce layout ? ou seulement mon panel qui contient la JComboBox en question ?
Pour faire simple, j'ai un gros panel(de la taille de ma fenetre) qui est un cardLayout,a l'interieur d'un card, j'ai 4 panel (les différentes options de l'utilisateur) déclaré en GridLayout, et seulement le 2è panel contient la JComboBox, pourrais-je uniquement déclaré ce panel en GridBag ou devrais-je le faire pour tout les panel de l'ihm ?

H4RDBuG
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
25 juin 2011 à 18:15
;o) ...
pourquoi n utilises tu pas un visual editeur ??!!! NetBean ;o) tu te prend pas la tete et ca prend 3 secondes...
quand au nombre de conteneurs que tu peux utiliser ;o) il n y a pas de limite ;o) ... et c est dailleur ce que je conseille : multiplier les JPanel, surtout si l ihm est amener à évoluer... normalement avec une bonne gestion de borderlayout et de de panel ;o) on peu realiser une ihm correct et confortable ;o) (faut aussi gérer les preferred size) ;o)

GodConan ;o)
0
H4rDBuG Messages postés 47 Date d'inscription jeudi 14 janvier 2010 Statut Membre Dernière intervention 26 juillet 2011
25 juin 2011 à 19:18
Justement, je travail sous netbeans 7.0 version windows, seulement, je n'ai appris a faire les ihm que par swing en brut dans le code ... jamais a travers une IDE (ce que je regrette comparé a visual studio), j'ai bien cherché, mais je n'ai jamais trouvé comment intégré le code derrière chaque bouton, mais il est vrai que je trouverais ceci 100x plus puissant :)

Par ailleurs, j'ai le bon réflexe, je multiplie les panel (environ 5-6 panel par card sur mon ihm actuel) ^^
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
25 juin 2011 à 19:34
en meme temps ;o) t es pas obligé de suivre le visual ;o) ... envoi moi un mail en message privé je t envoi ma class brouillon qui marche ...

GodConan ;o)
0
H4rDBuG Messages postés 47 Date d'inscription jeudi 14 janvier 2010 Statut Membre Dernière intervention 26 juillet 2011
27 juin 2011 à 10:00
Salut GodConan

J'ai donc essayé ton code (pas un gros copier coller, mais adapter a mes besoin) et ca ne marche toujours pas ... je me suis donc pencher sur le VE de netbeans, mais le soucis c'est que le code n'est pas maintenable par la suite ... ( le projet est ammené a évoluer) donc je suis ne train de me renseigner et je télécharge en ce moment eclipse avec JIgloo qui apparament fait un code assez propre ... as-tu un avis dessus ?
0
H4rDBuG Messages postés 47 Date d'inscription jeudi 14 janvier 2010 Statut Membre Dernière intervention 26 juillet 2011
27 juin 2011 à 11:16
J'ai essayé une autre méthode, qui est de mettre un scrollbar horizontal sur le popup et ca marche ... j'ai inséré ce code dans la classe WideComboBox :

public class WideComboUI extends BasicComboBoxUI
{
protected ComboPopup createPopup()
{
BasicComboPopup popup = new BasicComboPopup(comboBox)
{
protected JScrollPane createScroller()
{
return new JScrollPane( list, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED );
}//end of method createScroller
};
return popup;
}
}

l'affichage est pas une merveille, mais la méthode passe, ce qui est d'autant plus bisard, car si cette méthode passe, la méthode pour avoir un popup plus large devrais passé aussi ... drole d'énigme
0
H4rDBuG Messages postés 47 Date d'inscription jeudi 14 janvier 2010 Statut Membre Dernière intervention 26 juillet 2011
27 juin 2011 à 11:46
(désolé d'avance du triple post mais je trouve pas pour éditer ...)

Bon, après une grosse analyse de tout le code, j'en suis arrivé a 2 hypothèses :

1) le problème vient de la méthode de remplissage du JComboBox (en effet ce n'est pas une liste que je remplis a la création du JComboBox, mais c'est une méthode qui récupère les tuples d'une BDD, je posterais le code de ma méthode si besoin est)

2) le problème vient de l'affichage (j'utilsie un GridLayout, et dans ce cas il faudrait que j'utilise un GroupLayout)

ce sont les 2 seules choses qui diffèrent de ton code et du mien
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
27 juin 2011 à 23:08
si ton model est bien fait ... il n y a pas de raison que cela viennent du "remplissage" !!!

quand au code 'non maintenable' de netbean ;o) c est une ilusion... : une fois ton ihm finalisé et si tu n a pas besoin d y revenir ;o) tu peux tres bien faire comme l exemple que je t ai fournis ...

ceci dit depuis la V6.9 (peut etre avant) il n est vraiment plus necessaire d éditer le code, cela prend quelques minute(voir un peu plus si on fouille) de se familiariser avec l'interface, mais en finale c est bcp de temps gagné et meme si pour integrer mes propres class sswing au visual editor i lm a fallu redémmarer netbean en final cela reste tres confortable et permet une maintenance facile... ;o)

GodConan ;o)
0
H4rDBuG Messages postés 47 Date d'inscription jeudi 14 janvier 2010 Statut Membre Dernière intervention 26 juillet 2011
28 juin 2011 à 09:11
Oui c'est sur, j'ai réalisé mon interface avec netbeans 7.0, le code est vraiment lourd, mais compréhensible.
Par ailleurs mon cas est assez particulier, je développe cette application dans le cadre d'un stage, les besoins ont clairement été définit après un entretien avec la personne qui utilisera l'application, cependant si cette personne voudrait une modification sur le programme, il faut que les autres personnes qui ne sont pas familiarisées avec java puisse effectuer la maintenance après mon départ, il faut donc que le code soit le plus clair possible.
Sinon, l'interface avec netbeans marche pour les combobox, je me suis inspiré du code de l'interface pour l'implanter selon mes propre besoin, mais il me sort une erreur et me dis que mon groupLayout doit etre initialisé non null ... et pourtant, il prends bien des paramètres en compte :

layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap());

il me soulève l'erreur a la premiere ligne (layout.setHorizontalGroup( )
Donc je cherche depuis hier, je vous tiens au courant, mais il semblerais que le problème du popup vient bien du fait que je n'utilise pas un grouplayout ... il me suffit juste a faire marcher ca et mon application sera finit !
0
Rejoignez-nous