2013-03-24 119 views
0

刚开始使用Java并且是初学者。我试图创建一个照片查看器,可以搜索图像的目录并打开图像,但我的程序不会显示图像。图像将不会显示在JPanel上

当我运行程序,它打开了,并表示这是我用来搜索我的目录菜单栏,但即使我选择的图像也不会显示。 TIA。

import java.awt.*; 
import java.awt.event.*; 
import java.awt.image.BufferedImage; 
import java.io.*; 
import javax.swing.*; 
import javax.swing.event.*; 
import javax.swing.filechooser.FileNameExtensionFilter; 
import javax.imageio.ImageIO; 

public class ICS 
{ 
private JPanel gui; 
private JFileChooser fileChooser; 
FilenameFilter fileNameFilter; 
private JMenuBar menuBar; 
DefaultListModel model; 
public ICS() { 
    gui = new JPanel(new GridLayout()); 

    final JLabel imageView = new JLabel(); 
    gui.add(imageView); 

    fileChooser = new JFileChooser(); 
    String[] imageTypes = ImageIO.getReaderFileSuffixes(); 

    menuBar = new JMenuBar(); 
    JMenu menu = new JMenu("GET PHOTO HERE"); 
    menuBar.add(menu); 
    JMenuItem browse = new JMenuItem("browse"); 
    menu.add(browse); 

    browse.addActionListener(new ActionListener(){ 
      public void actionPerformed(ActionEvent ae) { 
       int result = fileChooser.showOpenDialog(gui); 
       if (result==JFileChooser.APPROVE_OPTION) { 
        File eg = fileChooser.getSelectedFile(); 
       } 
      } 
     }); 
} 

public void loadImages(File directory) throws IOException { 
    File[] imageFiles = directory.listFiles(fileNameFilter); 
    BufferedImage[] images = new BufferedImage[imageFiles.length]; 
} 

public Container getGui() { 
    return gui; 
} 

public JMenuBar getMenuBar() { 
    return menuBar; 
} 

public static void main(String[] args) { 
    SwingUtilities.invokeLater(new Runnable(){ 
      public void run() { 
       ICS imageList = new ICS(); 

       JFrame f = new JFrame("Image Browser"); 
       f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
       f.add(imageList.getGui()); 
       f.setJMenuBar(imageList.getMenuBar()); 
       f.setLocationByPlatform(true); 
       f.pack(); 
       f.setSize(800,600); 
       f.setVisible(true); 
      } 
     }); 
} 

}

回答

2

你没有做你选择的文件进行任何操作。鉴于您在JPanel有一个空JLabel,你可以简单地设置Icon该组件:

imageView.setIcon(new ImageIcon(eg.getPath())); 
+0

是否有我需要添加的特定位置? – user2205330 2013-03-24 20:42:23

+0

虽然乍一看这似乎是正确的,我就从只是说:“这是它是如何做”,并让他学会自己思考,不会犯同样的错误,至少让公众知道他做错了解释避免再次。 – SevenBits 2013-03-24 20:42:43

+0

在检索您选择的文件之后立即进入动作侦听器,就像我说的回答。 – SevenBits 2013-03-24 20:43:43

0

它没有做任何事情与形象,因为你从来没有告诉它。在你的动作监听器中,你创建了一个文件选择器并获得了选定的文件,但是你从来不会对它做任何事情。您只需将其定义为动作侦听器中的局部变量,然后在侦听器退出时立即销毁它。

你应该是做什么的,你的动作侦听器内,进行函数调用您检索文件选择的用户后实际显示图像。

此外,ICS是一类可怕的名字。当你的程序变大时,你应该描述你的类名作为自己的参考和理智,并且你试图记住一切都做了什么。