Quiero abrir una imagen en Java y mostrarla.

andresgc12 Mensajes publicados 3 Estado Miembro -  
andresgc12 Mensajes publicados 3 Estado Miembro -

Hola,

Quiero abrir una imagen en Java y mostrarla.

¿Cómo abrir una imagen después de seleccionarla?
Aquí está mi código:

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 Ventana extends JFrame implements ActionListener { public Ventana() { super("VENTANA"); setSize(300,200); pack(); setVisible(true); { JFrame frame = new JFrame("Hello World"); JPanel panel = new JPanel(); BufferedImage imagen = null; // Definir el menú principal JMenuBar menu = new JMenuBar(); JMenu file = new JMenu("Archivo"); JMenu edit = new JMenu("Edición"); JMenu help = new JMenu("Ayuda"); // Definir el submenú para Archivo JMenuItem nuevo = new JMenuItem("Nuevo"); JMenuItem abrir = new JMenuItem("Abrir"); abrir.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 imagenAbrir = ImageIO.read(chooser.getSelectedFile()); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } }); JMenuItem guardar = new JMenuItem("Guardar"); file.add(nuevo); file.add(guardar); file.add(abrir); 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 Ventana(); } public void actionPerformed(ActionEvent e) { System.out.print("test"); } }

3 respuestas

KX Mensajes publicados 19031 Estado Moderador 3 020
 

Hola,

He adaptado tu código para leer y mostrar una imagen, aproveché para corregir algunos errores:

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("Hola Mundo"); // Definir el menú principal JMenuBar menu = new JMenuBar(); JMenu file = new JMenu("Archivo"); JMenu edit = new JMenu("Edición"); JMenu help = new JMenu("Ayuda"); // Definir el submenú para Archivo JMenuItem newf = new JMenuItem("Nuevo"); JMenuItem abrir = new JMenuItem("Abrir"); 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(); } } }; abrir.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("Guardar"); file.add(newf); file.add(save); file.add(abrir); 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
andresgc12 Mensajes publicados 3 Estado Miembro
 

Hola, gracias por tu respuesta. De hecho, hay errores cuando copié tu código, pero he corregido los errores, aunque no funciona. Aquí está mi código:

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 Ventana  extends JFrame implements ActionListener {
    
    public Ventana() {
        super("VENTANA");
        setSize(300,200);
        pack();
        setVisible(true);
        {
            JFrame frame = new JFrame("Hola Mundo");
            JPanel panel = new JPanel();
            BufferedImage image = null;

            // Definir el menú principal
            JMenuBar menu = new JMenuBar();
            JMenu file = new JMenu("Archivo");
            JMenu edit = new JMenu("Edición");
            JMenu help = new JMenu("Ayuda");
             
            // Definir el submenú para Archivo
            JMenuItem newf = new JMenuItem("Nuevo");
            JMenuItem abrir = new JMenuItem("Abrir");

            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();
                    }
                }
            };
              abrir.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 guardar = new JMenuItem("Guardar");

            file.add(newf);
            file.add(guardar);
            file.add(abrir);
             
            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 Ventana();    
}


}
 

0
KX Mensajes publicados 19031 Estado Moderador 3 020
 

De hecho, hay errores cuando copié tu código, pero he corregido los errores, aunque no funciona.

Mi código funciona, lo he probado, si tienes errores sería bueno saber cuáles (¿tal vez usas una versión antigua de Java?).

Si "corriges" los errores (de un programa que funciona...) y sigues teniendo errores, es que está mal corregido.

0
andresgc12 Mensajes publicados 3 Estado Miembro
 

Gracias. El problema era la versión de Java.

0