2014-09-27 87 views
0

我正尝试在Java中创建一个UI,以便用户只需使用JButton即可浏览目录中的图像。但是,无论何时使用JFileChooser选择新图像,图像都会相互追加。我如何删除以前的图片并显示新图片?使用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"); 
     } 
    } 
} 
+3

你为什么要创建新的标贴..change的ImageIcon代替 – 2014-09-27 15:51:13

+0

有什么问题吗? – ControlAltDel 2014-09-27 15:53:12

回答

2

这里是problem.you创造新的标签,并添加到面板。那就是为什么图像追加到面板

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(); 

    } 
+0

谢谢!它的工作.. – jl90 2014-09-27 16:04:29

+0

@ jl90祝你好运! – 2014-09-27 16:05:07

相关问题