我正在开发一个程序,该程序会将图像文件夹读入JList,并将在JList中选择的图片绘制到JPanel中。我有两个类:ImageViewerPanel
,它创建显示所选图片的面板。然后,我有了ImageViewerUI
将绘制JList,并且ImageViewerPanel
将添加到ImageViewerUI
类中。这是ImageViewerPanel
类中的相关代码。
public ImageViewerPanel() {
initComponents();
}
public void setImage(BufferedImage image) {
this.image = image;
repaint();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (scaled == false) {
g.drawImage(image, 0, 0, null);
}else if(scaled == true) {
g.drawImage(image, 0, 0, 80, 80, null);
}
以下是
ImageViewerUI
类中的代码,用于用图像刷新面板: ImageViewerPanel imagePanel = new ImageViewerPanel();
BufferedImage displayedImage;
BufferedImage originalImage;
public ImageViewerUI() {
initComponents();
loadListWithImageFilenames();
updateImagePanel();
updateThumbnailImagePanel();
}
public final void updateImagePanel() {
try {
String currFile = (String) ("Images/" + imageList.getSelectedValue());
displayedImage = ImageIO.read(new File(currFile));
imagePanel.setImage(displayedImage);
} catch (IOException ex) {
Logger.getLogger(ImageViewerUI.class.getName()).log(Level.SEVERE, null, ex);
}
public final void updateThumbnailImagePanel() {
try {
String currFile = (String) ("Images/" + imageList.getSelectedValue());
originalImage = ImageIO.read(new File(currFile));
imagePanel.setScaled(true);
imagePanel.setImage(originalImage);
imageViewerPanel1.add(imagePanel);
imagePanel.repaint();
} catch (IOException ex) {
Logger.getLogger(ImageViewerUI.class.getName()).log(Level.SEVERE, null, ex);
}
}
我遇到的问题是面板中没有显示图像。有人知道为什么吗?
最佳答案
imageViewerPanel1.add(imagePanel);
imagePanel.repaint();
将组件添加到可见的GUI时,代码应为:
imageViewerPanel1.add(imagePanel);
//imagePanel.repaint();
imageViewerPanel1.revalidate();
imageViewerPanel1.repaint();
创建的所有零部件的大小均为(0,0),因此无需绘制任何内容。 revalidate()调用布局管理器,该管理器又为组件提供大小。
如上所述,您还需要覆盖imagePanel的getPreferredSize()方法,以便布局管理器可以确定面板的适当大小。