Utiliser l'apparence d'un ComboButton

Shuffle777 - 6 nov. 2012 à 10:39
 Shuffle777 - 6 nov. 2012 à 11:53
Bonjour,

J'ai créé un composant personnalisé qui mime en partie un JComboBox. (En fait, la partie visuelle est identique (sauf la popup), par contre pour le modèle c'est une table et non une liste).
Je souhaite que, graphiquement, il apparaisse exactement comme un JComboBox. C'est à dire un éditeur/renderer et un bouton à flèche.

Mon problème est le suivant : je veux avroi la même apparence qu'un JComboBox, et ceci indépendamment du Look'n'Feel (LAF) utilisé.

Pour l'instant, j'ai essayé par trois moyens :[list][*]créer un JComboBox (un vrai), récupérer l'instance de son bouton et l'utiliser directement

--> le bouton est lié à la JComboPopup "classique", que je n'utilise pas -> exceptions et tout le tralala

[*]créer un JComboBox (pareil), récupérer la classe de son bouton et en créer une nouvelle instance

--> toutes les classes n'ont pas un constructeur par défaut (en fait, la plupart n'en ont pas, et dépendent d'une classe liée au LAF, donc pas glop)

[*]créer un JComboBox (toujours), récupérer l'instance de son bouton et l'encapsuler dans une classe perso, qui fait simplement appel aux méthodes paint() et paintComponent() du vrai bouton

--> rien n'est dessiné (la zone n'est pas peinte)
/list

Avez-vous des idées ? (Sachant qu'il faut également que je conserve la réactivité native du bouton -> hover et tout, mais si besoin je peux faire comme dans mon dernier cas et transférer les évènements de souris, ça doit suffire)

5 réponses

Note de dernière minute :

Pour l'instant, j'utilise un BasicArrowButton en direction Sud. Ça marche. Mais c'est vraiment moche...

(PS : Comment on fait pour éditer son message ici ? )
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
6 nov. 2012 à 10:46
Salut,

Oui, oubli ça et utilise un JComboBox non ?

Je ne vois pas ce que tu espères faire avec ton composant...
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
6 nov. 2012 à 11:32
Pour être un peu plus précis dans ma réponse, tu créés une nouvelle classe qui étend JCombobox (extends JComboBox) et là, tu adaptes ta conboBox pour que le modèle soit une table. C'est le plus simple selon moi.

Mais quel est ton but ? Si c'est mettre les données d'une table dans une JComboBox, tu peux facilement créer un module qui adapte les données non ?

Et pour éditer ta réponse : c'est impossible.
0
Re,

En fait, et j'aurais dû commencer par là, c'est pour reproduire le comportement des ComboBoxes de VB, avec une seule valeur affichée dans l'éditeur (notion de "colonne liée", "bound column" pour les anglophiles), mais plusieurs colonnes dans la popup, avec les largeurs de colonne paramétrables et les valeurs alignées.

Donc je vois pas trop comment faire autrement, mais si tu as une idée avec un JComboBox, je suis preneur ! (Enfin j'avoue que je serais dégoûté, vu le temps que j'ai déjà passé pour faire le composant en lui-même ! )

Ok, j'avoue que l'apparence du bouton, c'est du bonus. Mais c'est mon sens du détail ;-)

Ps : j'avais pensé à faire, comme j'ai pu le lire sur le net, un renderer différent pour les cellules de la popup, qui irait lire les valeurs du tableau. Mais c'est presque aussi lourd (à cause surtout des largeurs de colonne) et pas très propre conceptuellement.
0

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

Posez votre question
(post croisé avec Julien39)

Oui, le extends, c'est ce que j'ai tenté en premier. Sauf que rien n'est compatible au niveau de l'API standard. C'est fait pour gérer en interne une liste, pas une table.

En fait, le faire revient pratiquement au même que de faire mon composant, sauf que le extends me fait hériter des méthodes pour la liste, qui n'ont pas toujours de sens dans mon cas.

Merci, en tous cas, de t'intéresser à mon problème
0
Rejoignez-nous