Apprenez à étendre l'AWT avec vos propres boutons d'image, JavaWorld
Vous pouvez le prendre pour acquis que chaque boîte à outils graphique moderne a un support propre pour les icônes et boutons d'icône, mais ne soyez pas si prompt à assumer - Résumé fenêtrage Toolkit Java (AWT) ne vit pas à cette attente. Oui, l'AWT contient une classe Button, mais parce que le bouton est mis en œuvre grâce à des composants de l'interface graphique en fonction de la plate-forme, vous ne pouvez pas tirer dans un bouton et attendez votre image pour afficher correctement, le cas échéant.
Mise en route avec la classe ImageButton
Notre première étape vers la création de boutons d'image est de mettre en œuvre une nouvelle classe qui fonctionne dans l'environnement Java et prend également en charge le dessin. Pour vous assurer que notre nouvelle classe (que nous appellerons
) Fonctionne dans l'environnement Java, nous sous-classer à partir d'un composant AWT existant. Le AWT contient deux candidats -
-- que le dessin de support. Bien que nous pourrions utiliser soit la classe,
a des capacités supplémentaires que nous ne avons pas besoin, nous irons donc avec
La détermination des états de bouton
Notre bouton d'image doit prendre en charge un certain nombre de différents états: non armés, PLUS, ARMÉS et HANDICAPÉS. Jetons un regard sur les caractéristiques de chaque état.
Lorsque l'utilisateur n'interagit avec le bouton de quelque façon, le bouton est dans son état sans défense. Pour suivre cet exemple avec de nombreuses applications, telles que Internet Explorer et le nouveau Netscape Navigator 4.0 préversion, nous allons mettre en œuvre un état OVER, qui mettra en évidence un bouton que l'utilisateur déplace la souris dessus. L'état ARMÉ, que nous représentons en montrant un bouton enfoncé, se produit lorsque l'utilisateur clique et détient sur un bouton. Si l'utilisateur relâche la souris tandis que le bouton est dans l'état ARMÉ, l'action correspondante sera effectuée; cependant, les utilisateurs peuvent revenir à l'état DÉSARMÉ en déplaçant la souris hors du bouton sans relâcher la souris. Le dernier état que nous soutiendrons est désactivé, ce qui est mis en œuvre à travers l'interface de programmation ImageButton en appelant la fonction désactivée AWT. Un bouton désactivé ne doit pas répondre à toute action de l'utilisateur. Nous allons utiliser un effet grisées pour indiquer un bouton désactivé.
Notre bouton d'image soutiendra un seul état à la fois (un bouton ne peut pas être très bien armé et non armé en même temps, peut-il?). Nous représentons les quatre états en un seul int. avec quatre constantes, comme indiqué ici:
définir les frontières
composant est complètement vide par défaut, et il ne fournit pas de support intégré pour dessiner une bordure autour de la zone rectangulaire qu'elle englobe.
À l'heure actuelle, le genre le plus populaire de la frontière est la frontière ombrée de style 3D. Nous pouvons effectivement utiliser ce style de frontière pour deux de nos états du bouton: Pour indiquer un bouton est désarmé, nous allons utiliser ce style avec des bords supérieur et gauche bords bas et à droite plus foncé et plus léger; pour indiquer un bouton est armé (déprimé), nous allons utiliser ce style avec des bords supérieur et gauche plus sombre et le fond plus léger et bords droits.
Différents styles pour différents états
De retour dans la classe ImageButton, un bouton a besoin de maintenir les variables pour, potentiellement, quatre frontières différentes et quatre images différentes pour chacun des quatre états du bouton. Depuis que nous avons déjà défini les états comme des entiers 0 à 3, nous pouvons utiliser ces valeurs comme des indices dans les tableaux suivants:
La construction du bouton d'image
Nous en avons terminé avec tous les trucs de fond, nous pouvons maintenant aller au cœur de la question - la création du bouton d'image. Comme les programmeurs d'applications, nous créons un bouton image de la même façon que nous créons un composant de bouton - en appelant
Les constructeurs sont deux impliqués - on n'a pas de paramètres, et l'autre prend une image à utiliser comme image à mains nues. Voici les constructeurs:
Réglage des images et des frontières
Pour mettre à jour le tableau d'images et de charger les images dans un MediaTracker, qui est utilisé pour démarrer et gérer le chargement des images dans un fil d'arrière-plan, nous allons utiliser une méthode privée,
qui est appelé par la