我正在尝试使用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();
}
}
}
有人能说清楚这个吗?
答案 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();
让帧重新计算其组件大小的方法。
或者您可以尝试强制标签的大小(设置其最小尺寸)以确保它有足够的空间来显示图像。