1

我正在制作一个小型 Java 应用程序,它必须在名为 picLabel 的 JLabel 中显示一些图像。

我有一个照片对象的 JList(包含从数据库读取的图像的 InputStream)。

下面是 JList ValueChanged 事件监听器的代码:

private void photoListValueChanged(javax.swing.event.ListSelectionEvent evt) {     
    if (evt.getValueIsAdjusting() == false && photoList.getSelectedIndex() != -1) {
        photo = (Photo) photoList.getSelectedValue();
        BufferedImage image = ImageIO.read(photo.getContent()) ;
        if(image != null) {
            picLabel.setIcon(new ImageIcon(image));
        }
}

它在我第一次从列表中选择每个元素时完美运行。但是,如果我再次选择一个已经被选中的元素(并且图像已经显示),它根本不会显示图像,而让 JLabel 保持以前的状态。

我错过了什么吗?

4

1 回答 1

4

一旦您从输入流中读取了一次图像,该流就在其末尾,并且第二次读取将不会读取任何内容。Photo 类应该从流中读取并将读取的所有内容存储为字节数组,或者直接存储为 BufferedImage 或 ImageIcon。

于 2012-11-17T13:43:31.543 回答