Aktualizacja obrazu zawartego w JLabel - problemy
Częścią aplikacji, z którą obecnie mam problemy z dostaniem się do pracy, jest możliwość przewijania i wyświetlania listy obrazów pojedynczo. Dostaję katalog od użytkownika, buforuje się przez wszystkie pliki w tym katalogu, a następnie ładuję tablicę tylko plików JPEG i PNG. Następnie chcę zaktualizować etykietę JLabel za pomocą pierwszego obrazu i udostępnić poprzednie i następne przyciski, aby przewijać i wyświetlać każdy obraz po kolei. Kiedy próbuję wyświetlić drugi obraz, nie jest on aktualizowany ... Oto co mam do tej pory:
<code>public class CreateGallery { private JLabel swingImage; </code>
Metoda, której używam do aktualizacji obrazu:
<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>
Następnie w mojej metodzie createAndShowGUI, która włącza swingImage ...
<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>
Jeśli dotarłeś tak daleko, pierwszym obrazem jest mój plik default.jpg, a gdy już dostanę katalog i zidentyfikuję pierwszy obraz w tym katalogu, to tam się nie powiedzie, gdy próbuję zaktualizować swingImage. Teraz spróbowałem swingImage.setVisible () i swingImage.revalidate (), aby spróbować zmusić go do ponownego załadowania. Zgaduję, że to moja tempImage = nowa JLabel, która jest główną przyczyną. Ale nie jestem pewien, jak przekonwertować moje BufferedImage lub Image na JLabel, aby po prostu zaktualizować swingImage.