Quiero abrir una imagen en Java y mostrarla.
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
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(); } } 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();
}
}
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.