使用JFileChooser选择目录中的文件

时间:2014-09-27 15:48:50

标签: java actionlistener jfilechooser

我正在尝试使用Java创建UI,以便用户只需使用JButton就可以浏览目录中的图像。但是,每当我使用JFileChooser选择新图像时,图像会相互附加。如何删除上一张图片并显示新图片?

我也试图通过点击下一个/上一个按钮来弄清楚如何继续浏览目录中的下一个/上一个图像。我如何实现这一目标?下面是我的ButtonListener的代码:

private class ButtonListener implements ActionListener
{
    public void actionPerformed(ActionEvent e)
    {
        if(e.getSource() == chooseBtn)
        {
            JFileChooser fileChooser = new JFileChooser();
            int returnValue = fileChooser.showOpenDialog(null);
            fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);

            if (returnValue == JFileChooser.APPROVE_OPTION) 
            {
                File selectedFile = fileChooser.getSelectedFile();
                String fileName = selectedFile.toString();
                image = new JLabel(new ImageIcon(fileName));
                imgPanel.add(image);
                frame.add(imgPanel, BorderLayout.WEST);
                frame.repaint();
                frame.validate();
            }
        }
        else if(e.getSource() == nextBtn)
        {
            System.out.println("Next");
        }
        else if(e.getSource() == prevBtn)
        {
            System.out.println("Previous");
        }
    }
}

1 个答案:

答案 0 :(得分:2)

这是问题。你创建新标签并添加到面板。这就是为什么图像附加到面板

  if (returnValue == JFileChooser.APPROVE_OPTION) {
                File selectedFile = fileChooser.getSelectedFile();
                String fileName = selectedFile.toString();
                image = new JLabel(new ImageIcon(fileName));
                imgPanel.add(image);
                frame.add(imgPanel, BorderLayout.WEST);
                frame.repaint();
                frame.validate();
     }

每次都不要创建标签。只需一次,并在选择图像时更改图像图标

////don't repeate this code block
image = new JLabel();
imgPanel.add(image);
frame.add(imgPanel, BorderLayout.WEST);
frame.repaint();
frame.validate();
/////////

  if (returnValue == JFileChooser.APPROVE_OPTION) {
                File selectedFile = fileChooser.getSelectedFile();
                String fileName = selectedFile.toString();
                image.setIcon(new ImageIcon(fileName )); 
                //repaint
                frame.repaint();

   }