Taille Java ImageIcon
J'ai téléchargé une image dans mon interface graphique qui s'affiche sur un JLabel. L'étiquette dimension est situé à seulement 100,100, tandis que le tableau est beaucoup plus grand, donc quand je le télécharge sur le label qu'il se développe.
Est-il de toute façon à la rendre automatique le redimensionner à la taille de l'étiquette?
Ci-dessous est l'action d'un écouteur pour l'Upload de l'Image JButton
class UploadHandler implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
int returnVal = fc.showOpenDialog(frame2);
file = fc.getSelectedFile();
pathname = file.getPath();
icon = new ImageIcon(pathname);
lblDisPic.setIcon(icon);
}
}
btnUpload = new JButton("Upload Picture");
lblDisPic = new JLabel();
lblDisPic.setBorder(raisedetched);
lblDisPic.setPreferredSize(d);
btnUpload.addActionListener(new UploadHandler());
source d'informationauteur sutoL
Vous devez vous connecter pour publier un commentaire.
Donné l'exemple de code, une approche consiste à redimensionner l'image à afficher sur l'
JLabel
avant lasetIcon
méthode est appelée.Une façon peut être de changer le
actionPerformed
méthode, de sorte que l'image sera chargé à partir du fichier spécifié, en utilisantImageIO.lire
méthode de lecture de l'image, puis le redimensionnement de l'image avant unImageIcon
est créé.Ensuite, le chargement de l'image peut être redimensionnée à la dimension de l'
JLabel
à l'aide dede l'Image.getScaledInstance
.Maintenant, on pourrait créer un
ImageIcon
à utiliser sur leJLabel
.La limitation de cette méthode est que, si la
JLabel
est redimensionnée dans tous les sens, puis dans l'image contenue par laJLabel
ne sera pas redimensionnée. Cependant, comme leJLabel
va utiliser une échelle réduite de l'image de l'original, ce qui signifie que la quantité de mémoire requise serait réduit (si intérêt) et de l'image d'origine n'aurait pas à être redimensionnée à chaque fois que l'image est affichée, comme ce serait le cas de la substitution de lapaintComponent
méthode.La méthode préférée de réalisation de la tâche à accomplir est va dépendre des exigences de savoir si l'image d'origine est nécessaire à un moment plus tard ou pas.
Sûr, il suffit de remplacer le
paintComponent
méthode et vous pouvez mettre à l'échelle et de la peinture comme vous le souhaitez.Source de ici.
MODIFIER
À ajouter à votre changement de code:
:
Vous pourriez remplacer le
paintIcon
méthode sur l'icône elle-même -Edit -
J'ai réalisé que la taille d'origine de l'image est pris en compte lors de l'Étiquette décide de l'endroit où placer le x, y de l'emplacement de l'icône. Vous aurez besoin de remplacer le getIconWidth() et getIconHeight() les méthodes.
Cependant, il n'y a pas une bonne façon de remplacer ces de retour de la taille de l'étiquette, comme il n'y a aucune référence sur le composant lui-même à l'intérieur de ces méthodes.
Une approche serait de créer une nouvelle classe qui étend la classe
ImageIcon
et passer à l'élément - pas un grand choix, car cela rompt avec le "réutilisables entre de nombreux composants" aspects d'une Icône.Une autre serait de simplement remplacer ces méthodes dans l'intérieur de la classe comme ci-dessus, mais mettre un standard de référence pour la composante d'un champ d'objet, ou comme un
final
variable locale. Encore une fois, cela rompt avec le "réutilisables entre de nombreux composants", et il semble un peu "hacky" en général, mais comme c'est un one-off intérieur de la classe, cela peut être autorisée.Si vous pouvez modifier l'image dans la peinture, puis définissez sa taille en conséquence dans la peinture, puis cliquez sur enregistrer puis de la même taille que l'image viendra à votre application JAVA.