Mise à jour d'une image contenue dans un JLabel - problèmes

La partie de l'application que je suis en train de la difficulté à se rendre au travail est d'être capable de faire défiler et afficher une liste d'images, une à la fois. Je suis un répertoire de l'utilisateur, de bobinage, par le biais de tous les fichiers dans ce répertoire, puis de le charger un tableau de seulement le jpeg et png. Ensuite, je veux mettre à jour un JLabel avec la première image, et de fournir les boutons précédent et suivant pour faire défiler et afficher chaque image à son tour. Lorsque j'essaie d'afficher la deuxième image, il n'est pas mis à jour... Voici ce que j'ai obtenu jusqu'à présent:

public class CreateGallery
{
    private JLabel swingImage;

La méthode que j'utilise pour mettre à jour l'image:

protected void updateImage(String name) 
{
    BufferedImage image = null;
    Image scaledImage = null;
    JLabel tempImage;

    try
    {
        image = ImageIO.read(new File(name));
    } catch (IOException e)
    {
        //TODO Auto-generated catch block
        e.printStackTrace();
    }

    //getScaledImage returns an Image that's been resized proportionally to my thumbnail constraints
    scaledImage = getScaledImage(image, THUMB_SIZE_X, THUMB_SIZE_Y);
    tempImage = new JLabel(new ImageIcon(scaledImage));
    swingImage = tempImage;
}

Ensuite dans mon createAndShowGUI méthode qui met l'swingImage sur...

private void createAndShowGUI() 
{
    //Create and set up the window.
    final JFrame frame = new JFrame();

    //Miscellaneous code in here - removed for brevity

    // Create the Image Thumbnail swingImage and start up with a default image
    swingImage = new JLabel();
    String rootPath = new java.io.File("").getAbsolutePath();
    updateImage(rootPath + "/images/default.jpg");

    //Miscellaneous code in here - removed for brevity

    rightPane.add(swingImage, BorderLayout.PAGE_START);
    frame.add(rightPane, BorderLayout.LINE_END);
public static void main(String[] args) 
{
    SwingUtilities.invokeLater(new Runnable() 
    {
        public void run() 
        {
            UIManager.put("swing.boldMetal", Boolean.FALSE);
            new CreateGalleryXML().createAndShowGUI();
        }
    });
}

Si vous êtes arrivé jusqu'ici, la première image est mon default.jpg et une fois que je reçois le répertoire et d'identifier la première image dans ce répertoire, c'est là où il échoue lorsque j'essaie de mettre à jour le swingImage. Maintenant, j'ai essayé de swingImage.setVisible() et swingImage.revalidate() pour essayer de le forcer à recharger. Je devine que c'est mon tempImage = new JLabel qui est la cause de racine. Mais je ne suis pas sûr de savoir comment convertir mes BufferedImage ou une Image à un JLabel dans le but de simplement mettre à jour swingImage.

J'avais ajouté un peu d'information concernant les raisons de votre setVisible()/revalidate() appels a jamais travaillé dans cette situation. J'espère que ça va mettre un peu de lumière sur l'ensemble de ce truc un peu plus, pourquoi vous obtenir ce comportement inattendu 🙂
J'avais essayé différentes combinaisons de setVisible(false) avant que le paramètre de retour à la réalité après la swingImage = tempImage; et j'ai aussi essayé de l'utiliser .revalidate() avant et après le setVisible(true). Mais je commence à croire que c'est le new JLabel(new ImageIcon(scaledImage) qui est à l'origine du problème... Encore en train de regarder et d'essayer de comprendre....

OriginalL'auteur Osh | 2012-04-07