【发布时间】:2012-04-07 04:04:19
【问题描述】:
我目前在开始工作时遇到问题的应用程序部分是能够滚动并显示图像列表,一次一个。我从用户那里得到一个目录,通过该目录中的所有文件进行后台处理,然后加载一个仅包含 jpeg 和 png 的数组。接下来,我想用第一张图像更新 JLabel,并提供上一个和下一个按钮来滚动并依次显示每个图像。当我尝试显示第二张图片时,它没有得到更新......这是我到目前为止所得到的:
public class CreateGallery
{
private JLabel swingImage;
我用来更新图像的方法:
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;
}
然后在我的 createAndShowGUI 方法中将 swingImage 放在...
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();
}
});
}
如果你已经走到这一步,第一张图片是我的 default.jpg,一旦我获得目录并识别该目录中的第一张图片,当我尝试更新 swingImage 时它就会失败。现在,我尝试使用 swingImage.setVisible() 和 swingImage.revalidate() 来强制它重新加载。我猜这是我的 tempImage = new JLabel 的根本原因。但我不确定如何将我的 BufferedImage 或 Image 转换为 JLabel 以便更新 swingImage。
【问题讨论】:
-
我添加了一些信息,说明为什么您的
setVisible()/revalidate()呼叫在这种情况下无法正常工作。希望这会让整个事情更清楚一点,至于为什么你会出现这种意外行为:-) -
我之前尝试过不同的 setVisible(false) 组合,而不是在 swingImage = tempImage; 之后将其设置回 true;并且还尝试在 setVisible(true) 之前和之后使用 .revalidate()。但我开始相信是新的 JLabel(new ImageIcon(scaledImage) 导致了问题......仍在寻找它并试图弄清楚......