2010-11-03 3 views
1

La taille du JLabel est supérieure à la taille de l'image. Avec le code ci-dessous, la bordure est créée autour du JLabel et non autour de l'image. Comment puis-je créer une bordure sur l'image et Non sur le JLabel?Comment créer une bordure autour d'une image et PAS sur le JLabel?

ImageIcon icon;  
Border border = BorderFactory.createLineBorder(Color.RED,5);  

Image image = icon.getImage().getScaledInstance(widthX,heightY, Image.SCALE_SMOOTH);         
icon.setImage(image);    

JLabel label = new JLabel(icon); 
label.setBorder(border); 

Répondre

1

Créer une BorderedBufferedImage qui accepte un int pour borderThickness, une couleur pour les borderColor, et un BufferedImage. Créez une nouvelle image buffered basée sur la nouvelle taille (avec une taille augmentée de 2 x borderThickness), dessinez la bordure, puis dessinez l'image à l'intérieur.

Utilisez l'élément BorderedBufferedImage pour le JLabel.

1

La taille du JLabel est supérieure à la taille de l'image.

Pourquoi? Est-ce un problème avec votre gestionnaire de disposition? Ou est-ce une exigence bizarre.

Vous ne semblez pas utiliser de texte, juste une image, donc je voudrais simplement ajouter l'étiquette à un autre panneau qui utilise un FlowLayout. De cette façon, si le gestionnaire de disposition redimensionne le composant, seul le panneau sera redimensionné, pas l'étiquette entière.

Si vous avez besoin de plus d'aide alors postez votre SSCCE qui démontre le problème afin que nous puissions mieux comprendre votre besoin.

0

Vous pouvez créer une implémentation de l'interface Icon qui accepte une épaisseur de bordure et une ImageIcon à laquelle un dessin d'image est délégué.

0

Utilisez labelname.setBorder (BorderFactory.createLineBorder (color.BLACK)).

Questions connexes