使用JFileChooser在JPanel中进行ImageLoading

时间:2012-04-28 09:14:26

标签: java swing jlabel jfilechooser imageicon

我正在尝试使用JPanel将图片加载到JFileChooser。但是当我尝试运行程序并加载选定的图像时,JPanel没有任何反应。我在这里附上源代码片段:

JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);  
FileFilter filter = new FileNameExtensionFilter("Image files","jpeg","jpg");  
fileChooser.setFileFilter(filter);  
int result = fileChooser.showOpenDialog(null);    
if(result == fileChooser.APPROVE_OPTION){  
imgFile = fileChooser.getSelectedFile();//imgFile is File type    
try{  
    myPicture = ImageIO.read(imgFile);//myPicture is BufferedImage  
    JLabel picLabel = new JLabel(new ImageIcon( myPicture )) ;  
    imagePanel.add( picLabel );  
    imagePanel.repaint();  
    System.out.println("You have selected "+imgFile);  
    }catch(Exception e){  
         e.printStackTrace();  
    }  
    }  

}

有人能说清楚这个吗?

4 个答案:

答案 0 :(得分:2)

  

问题是我在我的框架中添加了两个面板。

您可以将使用两个面板的完整example进行比较:左侧是文件选择器,右侧是显示面板。

答案 1 :(得分:1)

我认为这可能对你有帮助......

Object selectedItem = jComboBox14.getSelectedItem(); 
ImageIcon picturetoInsert = new ImageIcon(selectedItem.toString()); 
JLabel label = new JLabel("", picturetoInsert, JLabel.CENTER); 
JPanel panel = new JPanel(new GridLayout(1, 1));
panel.add(label, BorderLayout.CENTER); 
jInternalFrame22.getContentPane(); 
jInternalFrame22.setContentPane(panel); 
jInternalFrame22.setVisible(true);

答案 2 :(得分:0)

为什么不尝试使用paintcomponent?

class imagePanel extends JPanel
{ 
  BufferedImage image;
  public void paintComponent(Graphics g)
  {
    super.paintComponent(g);
    if(image != null)
    {
      g.drawImage(image, 0, 0, this);
    }
  }
}

答案 3 :(得分:0)

这可能有几个原因。你可以试试

imagePanel.invalidate()

在重新调用之前强行重绘。

或者标签可能很小并且需要调整大小,因为以前可能没有图像。您可以尝试调用

frame.pack();

让帧重新计算其组件大小的方法。

或者您可以尝试强制标签的大小(设置其最小尺寸)以确保它有足够的空间来显示图像。