I want to open an image in Java and display it.
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
-
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(); } }
-
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();
}
}-
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.
-
-