刚开始使用Java并且是初学者。我尝试创建一个照片查看器,可以在目录中搜索图像并打开图像,但我的程序不会显示图像。
当我运行程序时,它打开并显示一个菜单栏,我用它来搜索我的目录,但即使我选择了一个图像,它也不会显示。 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);
}
});
}
}
答案 0 :(得分:2)
您没有对所选文件执行任何操作。如果您的JLabel
中有空JPanel
,则只需为该组件设置Icon
:
imageView.setIcon(new ImageIcon(eg.getPath()));
答案 1 :(得分:0)
它没有对图像做任何事情,因为你从未告诉过它。在您的动作侦听器中,您已经创建了一个文件选择器并获得了所选文件,但您从未对其执行任何操作。您只需将其定义为动作侦听器中的局部变量,然后在侦听器退出时立即将其销毁。
你应该做的是,在你的动作监听器内部,进行一个函数调用,在你检索用户选择的文件后实际显示你的图像。
此外,ICS是一个可怕的名字。当你的程序变大并且你想要记住所做的一切时,你应该描述你的类名,以供你自己参考和理智。