I want to open an image in Java and display it.

andresgc12 Posted messages 3 Status Member -  
andresgc12 Posted messages 3 Status Member -

Hello,

I want to open an image in Java and display it.

How do I open an image after selecting it?
Here is my code:

import java.awt.Desktop; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.image.BufferedImage; import java.io.BufferedReader; import java.io.File; import java.io.FileFilter; import java.io.FileReader; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.JButton; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.filechooser.FileNameExtensionFilter; public class Window extends JFrame implements ActionListener {       public Window() {      super("WINDOW");      setSize(300,200);      pack();      setVisible(true);      {          JFrame frame = new JFrame("Hello World");          JPanel panel = new JPanel();          BufferedImage image = null;          // Define the main menu          JMenuBar menu = new JMenuBar();          JMenu file = new JMenu("File");          JMenu edit = new JMenu("Edit");          JMenu help = new JMenu("Help");                   // Define the submenu for File          JMenuItem newf = new JMenuItem("New");          JMenuItem open = new JMenuItem("Open");            open.addActionListener(new ActionListener() {                public void actionPerformed(ActionEvent e) {                File[] selectedFiles = null;                JFileChooser chooser = new JFileChooser(".");                chooser.showOpenDialog(null);                chooser.setCurrentDirectory(new File("."));                    chooser.setMultiSelectionEnabled(true);                    int option = chooser.showOpenDialog(null);                    if (option == JFileChooser.APPROVE_OPTION)                    selectedFiles = chooser.getSelectedFiles();                                  try {                   BufferedImage imageToOpen = ImageIO.read(chooser.getSelectedFile());                   } catch (IOException e1) {                   // TODO Auto-generated catch block                   e1.printStackTrace();                   }                           }         });                JMenuItem save = new JMenuItem("Save");          file.add(newf);          file.add(save);          file.add(open);                          menu.add(file);          menu.add(edit);          menu.add(help);                          frame.setLayout(new GridLayout(5, 1));          frame.add(menu);          frame.add(panel);          frame.pack();          frame.setSize(300, 200);          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);          frame.setVisible(true);                   } }    public static void main(String[] args) {  new Window();   } public void actionPerformed(ActionEvent e) { System.out.print("test");   } }

3 answers

  1. KX Posted messages 19031 Status Moderator 3 020
     

    Hello,

    I adapted your code to read and display an image, and I took the opportunity to fix a few bugs:

    package ccm.kx; import javax.imageio.ImageIO; import javax.swing.*; import java.awt.*; import java.io.File; import java.io.IOException; public class Fenetre { public Fenetre() { JFrame frame = new JFrame("Hello World"); // Define the main menu JMenuBar menu = new JMenuBar(); JMenu file = new JMenu("File"); JMenu edit = new JMenu("Edit"); JMenu help = new JMenu("Help"); // Define the submenu for File JMenuItem newf = new JMenuItem("New"); JMenuItem ouvrir = new JMenuItem("Open"); JFileChooser chooser = new JFileChooser("."); Component imageComponent = new Component() { @Override public void paint(Graphics g) { super.paint(g); try { File selectedFile = chooser.getSelectedFile(); if (selectedFile != null && selectedFile.exists()) { Image image = ImageIO.read(selectedFile); setSize(image.getWidth(this), image.getHeight(this)); g.drawImage(image, 0, 0, this); } } catch (IOException e1) { e1.printStackTrace(); } } }; ouvrir.addActionListener(e -> { chooser.setCurrentDirectory(new File(".")); int option = chooser.showOpenDialog(null); if (option == JFileChooser.APPROVE_OPTION) { imageComponent.repaint(); } }); JPanel panel = new JPanel(); panel.setLayout(new BorderLayout()); panel.add(imageComponent, BorderLayout.CENTER); JMenuItem save = new JMenuItem("Save"); file.add(newf); file.add(save); file.add(ouvrir); menu.add(file); menu.add(edit); menu.add(help); frame.add(menu, BorderLayout.NORTH); frame.add(panel, BorderLayout.CENTER); frame.setSize(600, 600); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } public static void main(String[] args) { new Fenetre(); } } 

    0
  2. andresgc12 Posted messages 3 Status Member
     

    Hello, thank you for your response. In fact, there are errors when I copied your code, but I have corrected the errors, except that it doesn't work. Here is my code:

    import java.awt.Component;
    import java.awt.Desktop;
    import java.awt.Graphics;
    import java.awt.GridLayout;
    import java.awt.Image;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.image.BufferedImage;
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileFilter;
    import java.io.FileReader;
    import java.io.IOException;

    import javax.imageio.ImageIO;
    import javax.swing.JButton;
    import javax.swing.JFileChooser;
    import javax.swing.JFrame;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.JPanel;
    import javax.swing.filechooser.FileNameExtensionFilter;

    public class Window extends JFrame implements ActionListener {
        
        public Window() {
            super("WINDOW");
            setSize(300,200);
            pack();
            setVisible(true);
            {
                JFrame frame = new JFrame("Hello World");
                JPanel panel = new JPanel();
                BufferedImage image = null;

                // Define the main menu
                JMenuBar menu = new JMenuBar();
                JMenu file = new JMenu("File");
                JMenu edit = new JMenu("Edit");
                JMenu help = new JMenu("Help");
                 
                // Define the submenu for File
                JMenuItem newf = new JMenuItem("New");
                JMenuItem open = new JMenuItem("Open");

                final Component imageComponent = new Component() {
                    
                    public void paint(Graphics g) {
                        super.paint(g);
                        try {
                            JFileChooser chooser = new JFileChooser(".");
                            File selectedFile = chooser.getSelectedFile();
                            if (selectedFile != null && selectedFile.exists()) {
                                Image image = ImageIO.read(selectedFile);
                                setSize(image.getWidth(this), image.getHeight(this));
                                g.drawImage(image, 0, 0, this);
                            }
                        } catch (IOException e1) {
                            e1.printStackTrace();
                        }
                    }
                };
                  open.addActionListener(new ActionListener() {
                      
                      public void actionPerformed(ActionEvent e) {
                          File[] selectedFiles = null;

                          JFileChooser chooser = new JFileChooser(".");
                          chooser.showOpenDialog(null);
                          
                          chooser.setCurrentDirectory(new File("."));
                          int option = chooser.showOpenDialog(null);
                          if (option == JFileChooser.APPROVE_OPTION) {
                              imageComponent.repaint();
                          }

    }}
                   );


                  

                   
                 JMenuItem save = new JMenuItem("Save");

                file.add(newf);
                file.add(save);
                file.add(open);
                 
                menu.add(file);
                menu.add(edit);
                menu.add(help);
                 
                frame.setLayout(new GridLayout(5, 1));

                frame.add(menu);
                frame.add(panel);
                frame.pack();
                frame.setSize(300, 200);
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setVisible(true);
                
            
            
            }


    }
        
    public static void main(String[] args) { 
    new Window();    
    }


    }

    0
    1. KX Posted messages 19031 Status Moderator 3 020
       

      In fact, there are errors when I copied your code, but I fixed the errors, except that it doesn’t work.

      My code works, I tested it; if you have errors, we need to know which ones (are you perhaps using an old version of Java?)

      If you "fix" the errors (in a program that works...) and still have errors, it means the corrections were done poorly.

      0
  3. andresgc12 Posted messages 3 Status Member
     

    Thank you. The problem was the version of Java.

    0