taille - redimensionner imageicon java
Icône JButton à redimensionnement automatique (2)
J'ai donc ce JButtons auquel j'ajoute des icônes. Les icônes sont trop grandes au départ, donc je les redimensionne à l'avance, et ça marche bien. Sauf que quand je redimensionne la fenêtre, les JButtons changent de taille, mais pas les icônes, ce qui est problématique.
Y at-il un moyen d'avoir une icône juste remplir le JButton auquel il est attaché? Un peu de code pour le rendre plus clair:
public JewelClass(){
setBackground (new Color (30,30,30));
addActionListener(this);
setLayout(new GridLayout());
ImageIcon icon = new ImageIcon(src/carre.jpg);
setIcon (resizeIcon(icon,60,60));
}
resizeIcon est une fonction personnelle, qui prend une icône, un paramètre width et un paramètre height, et renvoie une icône redimensionnée (évidemment). J'ai essayé de changer la mise en page, mais cela ne change rien. J'ai essayé d'obtenir la largeur / hauteur du JButton, mais comme ils n'existent pas encore quand l'icône est ajoutée, cela ne fonctionne pas.
Est-ce que vous avez une idée de la façon de passer à travers ça? Il ne doit pas être une icône, tant que mon JButton est rempli avec l'image que je lui donne, c'est génial :)
Merci!
- Remplacer
paintComponent
- Dessinez l'image directement sur son objet
Graphics
Et lorsque vous getWidth()
l'image, fournissez les arguments dimensionnels getWidth()
et getHeight()
. En faisant cela, le redimensionnement sera automatisé. En outre, lors du redimensionnement, vous devrez effectuer un anti-aliasing afin que l'image ne soit pas trop pixellisée.
Vous pouvez ajouter un Component-Listener à ce bouton qui, lors du redimensionnement, redimensionne votre image dans ce bouton.
yourButton.addComponentListener(new ComponentListener() {
@Override
public void componentShown(ComponentEvent e) {
// ignore
}
@Override
public void componentResized(ComponentEvent e) {
resizeIcon(icon, yourButton.getWidth(), yourButton.getHeight());
}
@Override
public void componentMoved(ComponentEvent e) {
// ignore
}
@Override
public void componentHidden(ComponentEvent e) {
// ignore
}
});
J'espère que cela aide!