Aktualisieren eines in einem JLabel enthaltenen Bildes - Probleme

Der Teil der Anwendung, bei dem ich momentan Probleme habe, zur Arbeit zu kommen, besteht darin, nacheinander durch eine Liste von Bildern zu scrollen und diese anzuzeigen. Ich erhalte ein Verzeichnis vom Benutzer, spule durch alle Dateien in diesem Verzeichnis und lade dann ein Array mit nur den JPEGs und PNGs. Als Nächstes möchte ich ein JLabel mit dem ersten Bild aktualisieren und die Schaltflächen Zurück und Weiter bereitstellen, um nacheinander durch jedes Bild zu scrollen und es anzuzeigen. Wenn ich versuche, das zweite Bild anzuzeigen, wird es nicht aktualisiert.

<code>public class CreateGallery
{
    private JLabel swingImage;
</code>

Die Methode, mit der ich das Image aktualisiere:

<code>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;
}
</code>

Dann in meiner createAndShowGUI-Methode, die das swingImage auf ... setzt

<code>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);
</code>
<code>public static void main(String[] args) 
{
    SwingUtilities.invokeLater(new Runnable() 
    {
        public void run() 
        {
            UIManager.put("swing.boldMetal", Boolean.FALSE);
            new CreateGalleryXML().createAndShowGUI();
        }
    });
}
</code>

Wenn Sie so weit gekommen sind, ist das erste Bild meine default.jpg, und wenn ich das Verzeichnis und das erste Bild in diesem Verzeichnis gefunden habe, schlägt dies fehl, wenn ich versuche, das swingImage zu aktualisieren. Jetzt habe ich versucht, swingImage.setVisible () und swingImage.revalidate () zum erneuten Laden zu zwingen. Ich vermute, es ist mein tempImage = new JLabel, das die Grundursache ist. Ich bin mir jedoch nicht sicher, wie ich mein BufferedImage oder Image in ein JLabel konvertieren soll, um nur swingImage zu aktualisieren.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage