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!


  1. Remplacer paintComponent
  2. 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!







imageicon