38 votes

Comment créer un composant Swing personnalisé

J'ai toujours voulu créer des composants personnalisés en Java, ou personnaliser des composants existants, mais mes recherches n'ont jamais abouti à quelque chose d'utile. J'ai donc décidé de poser la question à la communauté StackOverflow :

Où puis-je trouver des informations sur la personnalisation des composants Java GUI en général ?

Et quand je parle de personnalisation, je ne parle pas de changer les couleurs, les polices, etc. Je veux dire vraiment les personnaliser. Voici deux exemples de composants en maquette :

Custom Components Mockup

Notes
J'ai commencé cette question principalement pour trouver comment créer les deux composants personnalisés ci-dessus. Mais je me suis ensuite rendu compte qu'il n'y avait pas de question générale sur le piratage des composants swing. J'ai donc pensé qu'il serait préférable d'avoir une liste de ressources.

Au cas où vous vous demanderiez comment fonctionnent les deux composants de la maquette, voici ce qu'il en est :

Un JScrollPane personnalisé qui comporte deux barres de défilement pour chaque orientation. Chaque barre de défilement peut agir différemment. Par exemple, les barres extérieures défilent normalement et les barres intérieures déplacent la vue dans une direction plus Picasa -de la même manière. J'ai en fait obtenu une réponse qui fonctionne ( !) dans les groupes Google. aquí mais ce n'était qu'un code.

Le second est une JComboBox personnalisée qui, lorsque la liste popup est développée, comporte un JComponent à la fin. Cela peut être n'importe quoi, d'un simple JLabel avec une icône, à un JButton qui manipule la liste d'une certaine manière.

Mais cette question ne porte pas sur ces composants spécifiques. Il s'agit de trouver des ressources (sites web, livres, articles, etc.) pour apprendre à les créer .

13 votes

Je viens de remarquer que la capture d'écran indique "jbomponent"... :P

18voto

John K Points 695

Cet article, Comment écrire un composant Swing personnalisé devrait être très utile. Il s'agit de reproduire une commande de curseur Windows qui possède à la fois des étapes discrètes et une plage continue.

3 votes

Ce lien est obsolète. Bien que la page actuelle existe toujours, vous constaterez que les images et les liens dans la page sont tous manquants. Quelqu'un a-t-il un lien mis à jour ? De plus, en général, sur SO nous mettons le contenu pertinent du lien dans la réponse précisément pour des cas comme celui-ci où le lien devient obsolète.

15voto

alphazero Points 17514

Le JDK est une source ouverte. Pour comprendre comment écrire un composant Swing, il n'y a pas de meilleur endroit où regarder que les sources des composants Swing. En général, lorsque vous créez des composants personnalisés, vous êtes intéressé par un ou plusieurs des éléments suivants : {sémantique d'interaction, représentation visuelle, structure de composition}.

Commencez par les cas les plus simples :

Composants passifs : JLabel
Composants interactifs : JButton

JLabel démontrera l'extension de base de JComponent pour le dessin personnalisé d'un composant ; dans ce cas, il dessine la valeur de la chaîne "text" comme sa représentation.

JButton démontrera l'extension de base pour l'interaction avec l'utilisateur en plus de dessiner le composant.

6 votes

Quelques mises en garde à garder à l'esprit lorsque vous lisez le code Swing : il y a beaucoup de code pour la rétrocompatibilité ; la plupart du code graphique réel se trouve dans les classes UI ; les classes Swing ont " évolué " et ne sont pas nécessairement représentatives des meilleures pratiques.

0 votes

Adresse web du code du composant

10voto

Amanda S Points 1441

Des clients très riches est un excellent livre, très lisible, sur ce sujet. Il s'agit davantage d'améliorer l'aspect et la convivialité des composants Swing que d'en créer de nouveaux, mais il aborde les fondements de Swing et fournit de nombreux exemples pratiques.

0 votes

Oui, j'ai lu ce livre. C'est un très bon livre mais, comme vous l'avez dit, il s'agit surtout d'améliorer l'aspect et la convivialité.

4voto

ninesided Points 12355

C'est une question assez ouverte, la réponse courte et simple est que vous sous-classez JComponent ou l'un de ses descendants et ajoutez la fonctionnalité dont vous avez besoin. Évidemment, selon ce que vous voulez faire, la difficulté peut varier. Pour commencer, je vous recommande de lire le document de Sun intitulé tutoriel sur l'utilisation des composants Swing où il y a des exemples sur la façon d'utiliser volets de défilement y menus contextuels . Une fois que vous les aurez lues et expérimentées, vous aurez peut-être des questions plus spécifiques auxquelles il sera plus facile d'apporter des réponses réfléchies.

Si les deux composants de votre maquette sont tout ce que vous voulez mettre en œuvre, donnez-nous une meilleure idée de la façon dont vous voulez qu'ils fonctionnent et vous obtiendrez de meilleures réponses.

0 votes

J'ai lu le tutoriel Java (et je le fais toujours lorsqu'il s'agit de Swing), mais il ne va pas aussi loin que je le voudrais.

0 votes

Pouvez-vous être plus précis en expliquant ce dont vous avez besoin ? Voulez-vous savoir spécifiquement comment réaliser la fonctionnalité que vous avez simulée dans la question ou la question se veut-elle plus générale ?

1voto

dhiller Points 2046

Lire Swing Hacks : Conseils et outils pour créer des interfaces graphiques géniales (Marinacci, Adamson) . A mon avis, un livre essentiel pour travailler efficacement avec le swing en général.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X