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

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. Moderator

    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
    1. 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. Moderator

        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
    2. Thank you. The problem was the version of Java.

      0