我正在制作一个小型Java应用程序,必须在名为picLabel的JLabel中显示一些图像。
我有一个Photo对象的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保留为之前的状态。
我错过了什么吗?
答案 0 :(得分:4)
一旦从输入流中读取了一次图像,流就会结束,而第二次读取则不会读取任何内容。 Photo类应该从流中读取并存储作为字节数组读取的所有内容,或者直接存储为BufferedImage或ImageIcon。