如何从JFileChooser绘制一个Image?

时间:2014-01-15 17:50:40

标签: java swing

我希望用户能够点击按钮,然后选择要在屏幕上显示的图像。

这是我写的代码。它似乎不起作用:

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,我在屏幕上的某个地方。

我做错了什么?

3 个答案:

答案 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);,如果您将组件添加到可见容器中,则需要这样做。