1

我正在尝试将图像加载到JPanelusing 中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

4 回答 4

2

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

您可以将您正在做的事情与这个使用两个面板的完整示例进行比较:左侧的文件选择器和右侧的显示面板。

于 2012-04-28T10:33:40.400 回答
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);
于 2012-06-09T07:28:14.350 回答
0

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

imagePanel.invalidate()

在重绘调用之前强制它重绘。

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

frame.pack();

方法来让框架重新计算其组件大小。

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

于 2012-04-28T09:28:01.807 回答
0

你为什么不尝试使用油漆组件?

class imagePanel extends JPanel
{ 
  BufferedImage image;
  public void paintComponent(Graphics g)
  {
    super.paintComponent(g);
    if(image != null)
    {
      g.drawImage(image, 0, 0, this);
    }
  }
}
于 2012-04-28T09:22:15.103 回答