我正在制作一个小型 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 保持原样。
我错过了什么吗?
最佳答案
一旦您从输入流中读取了一次图像,该流就结束了,第二次读取将不会读取任何内容。 Photo 类应该从流中读取并将读取的所有内容存储为字节数组,或者直接存储为 BufferedImage 或 ImageIcon。
关于Java 图标不会显示两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13430976/