Je fais un projet où j'ai besoin de composants swing personnalisés. Jusqu'à présent, j'ai créé un nouveau bouton avec une série d'images (le look Java Metal ne correspond pas du tout à mon interface). J'ai implémenté MouseListener
sur ce nouveau composant et c'est là que mon problème se pose. Mon widget change d'image en survol, cliquez sur etc. sauf que mon MouseListener
saisit l'entrée de la souris dans le conteneur GridLayout
au lieu de l'insérer dans l'image. Donc, j'ai une image d'environ 200 * 100 et le conteneur environnant est d'environ 400 * 200 et la méthode mouseEntered
est tirée quand il entre dans cette section GridLayout
(même les parties vides de l'espace) au lieu de sur l'image. Comment puis-je faire en sorte qu'il ne soit tiré que lorsque je survole l'image? J'ai essayé de régler la taille et les limites et d'autres attributs en vain.Java swing JComponent "taille"
EDIT: Voici une démonstration de mon problème. Comme vous pouvez le voir (en quelque sorte, les couleurs sont très similaires), le bouton en bas à droite est mis en évidence juste en entrant sa section du GridlLayout
. Je veux seulement le mettre en surbrillance quand je suis sur l'image réelle, pas la section GridLayout
.
I Will not ajouter les méthodes MouseListener
car ils impliquent simplement passer l'image affichée.
public customWidget()
{
this.setLayout(new FlowLayout());
try {
imageDef=ImageIO.read(new File("/home/x101/Desktop/buttonDef.png"));
imageClick=ImageIO.read(new File("/home/x101/Desktop/buttonClick.png"));
imageHover=ImageIO.read(new File("/home/x101/Desktop/buttonHover.png"));
current=imageDef;
} catch (IOException e)
{
e.printStackTrace();
}
this.addMouseListener(this);
}
protected void paintComponent(Graphics g)
{
super.paintComponents(g);
g.drawImage(current, 0, 0, current.getWidth(), current.getHeight(), null);
}
EDIT: section de code ajouté
veuillez poster un échantillon de code autonome ...Il est plus facile de voir ce que vous essayez de faire ... et plus facile de trouver le problème ... –
Quelle est la superclasse de 'customWidget'? De même, où votre 'conteneur GridLayout' est-il configuré? –
customWidget étend JComponent. Le GridLayout est mis en place dans le programme de test en utilisant pour tester le widget. Va mettre en place une image pour démontrer. – Alex