我希望用户能够点击按钮,然后选择要在屏幕上显示的图像。
这是我写的代码。它似乎不起作用:
uploadBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int retVal = fc.showOpenDialog(EditImage.this);
if(retVal == JFileChooser.APPROVE_OPTION){
File file = fc.getSelectedFile();
try{
Image img = ImageIO.read(file);
if(img==null){
//TODO: THE FILE IS NOT AN IMAGE. ERROR
}
ImageIcon ic = new ImageIcon(img);
JLabel imageLabel = new JLabel(ic);
imagePreview.add(imageLabel);
}
catch(IOException ex){
//TODO: THE FILE COULD NOT BE OPENED.
}
}
}
});
imagePreview
是一个JPanel,我在屏幕上的某个地方。
我做错了什么?
答案 0 :(得分:2)
container.revalidate()
和(Image
,然后需要)container.repaint()
但是这个逻辑是错误的,你不能,为什么要添加/删除JComponent
来显示另一个图像,没有理由,你可以在ImageIcon
之间切换{ {1}} - JLabel
还有另一个问题,JLabel.setIcon(file)
可以增加使用过的JVM内存,在添加到Images
之前必须先调用Icon/ImageIcon.flush()
答案 1 :(得分:0)
当您向其添加JLabel时,imagePreview是否已经可见?如果是这样,您就不能只将组件添加到可见容器中;你必须重新验证它。
答案 2 :(得分:0)
在imagePreview.revalidate(); imagePreview.repaint()
之后调用imagePreview.add(imageLabel);
,如果您将组件添加到可见容器中,则需要这样做。