imagen con JFilechooser
que tal amigos alguna sugerencia para mi problema.... la idea es mostrar una imagenque selecciono con un jfilechosser el porblema es que no lo hace , si pongo la imagen fuera del boton si lo hae laguna sugerencia,
import java.awt.*;
import javax.swing.*;
import java.io.FileFilter;
import java.io.*;
public class Interfaz
{
private JFrame frame;
JPanel panel,dos;
private JScrollPane scrollpane;
private JButton pic;
private JButton audio;
private JButton salir;
public Interfaz()
{
frame = new JFrame("JAVA MULTIMEDIA ");
frame.setVisible(true);
panel=new JPanel();
panel.setLayout(null);
panel.setVisible(true);
frame.add(panel);
//--------------------> contenido del marco <--------------------
pic=new JButton("Imagen");
pic.setBounds(10,50,100,30);
panel.add(pic);
//-------------------> fin boton pic <---------------------------
audio=new JButton("Audio");
audio.setBounds(10,130,100,30);
panel.add(audio);
//-------------------> fin boton audio <---------------------------
salir=new JButton("Salir");
salir.setBounds(10,200,100,30);
panel.add(salir);
/* ImageIcon imagen = new ImageIcon("Dirk-Nowitzki1.jpg");
JLabel etiqueta = new JLabel(imagen);
etiqueta.setBounds(20,30,60,36);
panel.add(etiqueta);*/
frame.setBounds(200,300,600,360);
frame.setResizable(false);
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
pic.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
JFileChooser selector=new JFileChooser();
selector.setFileFilter(new FiltroJava());
int estado=selector.showOpenDialog(null);
File archivoelegido=selector.getSelectedFile();
String ruta=archivoelegido.getPath();
if(archivoelegido.exists())
System.out.println("bien");
else
System.out.println("no bien");
if(estado==JFileChooser.APPROVE_OPTION);
{
ImageIcon imagen = new ImageIcon("ruta");
JLabel etiqueta = new JLabel(imagen);
etiqueta.setBounds(20,30,60,36);
panel.add(etiqueta);
}
}
});//boton
salir.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
});
}//constructor
}//clase
<\code>
- Inicie sesión o regístrese para enviar comentarios
JFilechooser
Por que asi?
Y no asi:
Deberias de checar si la ruta esta bien:
System.out.print(ruta);
Ahora creo esto resolvera tu duda:
JFileShooser ImageIcon
Saludos.
si ya habia checado ese link
si ya habia checado ese link y no le habia entendido, pero ya o soluciones efectivamente debe ser (ruta) y no "ruta" la solucion era sencilla el orden en que estaban las cosas ;
{
ImageIcon imagen = new ImageIcon(ruta);
JLabel etiqueta = new JLabel(imagen);
panel.add(etiqueta);
etiqueta.setBounds(20,30,60,36);
}
gracias por la ayuda
Pues yo hice esto...
Weno chavo, aunque no le entendí muy bien a tu explicación creo que anda mas o menos por esto;
A mi se me ocurrió hacerlo de esa forma, vi que lo estas haciendo diferente por eso escogí otra forma, para que te basaras en ella.
La cosa esta en que no le entendía muy bien a tu código y por eso tarde bastante jeje.
Solo como consejo, trata de redactar mejor tus preguntas, eso te ayuda a ti, para que formules bien la cuestión y a los demás para que puedan ayudarte a resolverla.
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.filechooser.FileNameExtensionFilter;
public class Imagen implements ActionListener
{
private JFrame frame;
private JLabel labelImagen;
private JButton boton;
private JPanel panelComponentes, panelImagen;
private JFileChooser fileChooser;
public static void main(String arg[])
{
//Bloque try-catch para atrapar los errores
try
{
//Look and Feel para la aplicacion dependiendo del sistema operativo
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch (Exception e)
{
e.printStackTrace();
}
//Inicia la aplicacion
new Imagen();
}
//Construtor de la clase
public Imagen()
{
//Creando frame principal y obteniendo un Contenedor y un manejador BorderLayout
frame = new JFrame("Abrir imagenes");
frame.getContentPane().setLayout( new BorderLayout() );
/**Creacion de componentes*/
//Label
labelImagen = new JLabel();
//Boton
boton = new JButton("Abrir archivo");
//Seteando la propiedad actionCommand
boton.setActionCommand("abre");
//Creando paneles y añadiendolos al frame principal
panelComponentes = new JPanel();
panelComponentes.setLayout( new BorderLayout() );
panelComponentes.add(boton, BorderLayout.CENTER);
panelComponentes.setBorder( BorderFactory.createTitledBorder ("Abre la imagen...") );
frame.add(panelComponentes, BorderLayout.NORTH);
panelImagen = new JPanel();
panelImagen.setLayout( new BorderLayout() );
panelImagen.setBorder( BorderFactory.createTitledBorder ("Visualizacion de la imagen") );
panelImagen.add( labelImagen, BorderLayout.CENTER);
frame.add( panelImagen ,BorderLayout.CENTER );
//Estableciendo visibilidad, tamaño y cierrre de la aplicacion
frame.setVisible(true);
frame.setBounds(500,200, 400, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Agregando un escuchador al boton
boton.addActionListener(this);
//Creando FileChooser
fileChooser = new JFileChooser();
//Añadiendole un filtro
FileNameExtensionFilter filter = new FileNameExtensionFilter("JPG & PNG", "jpg", "png");
fileChooser.setFileFilter(filter);
}
//Metodo de accion para el boton
public void actionPerformed(ActionEvent e)
{
if("abre".equals( e.getActionCommand() ) )
{
//Valor que tomara el fileChooser
int regresaValor = fileChooser.showOpenDialog(null);
//Accion del fileChooser
if(regresaValor == JFileChooser.APPROVE_OPTION)
{
//Crear propiedades para ser utilizadas por fileChooser
File archivoElegido = fileChooser.getSelectedFile();
//Obteniendo la direccion del archivo
String direccion = archivoElegido.getPath();
//Bloque try-catch para errores
try
{
//Obtiene la direccion del archivo y lo instancia en icon
ImageIcon icon = new ImageIcon( direccion );
//Setea el labelImagen con el archivo obtenido
labelImagen.setIcon( icon );
}
catch(Exception es)
{
JOptionPane.showMessageDialog(null, "Upss!! error abriendo la imagen "+ es);
}
}
}
}
}
Aquí unos pantallazos de la aplicación.
El inicio

Abriendo la imagen

Colocando la imagen en el label

Espero que te sirva a ti o por lo menos a alguien. Aunque a mi me sirvió de practica :D
Oscar si ves mi código, no me regañes que aun no me acostumbro a escribirlo de el modo estándar u.u
ya se de donde saque esa costumbre, del libro de Deitel...
Solo quedaría...
Ahora solo te faltaría modificar la imagen obtenida para que se vea y se ajuste a tu gusto o necesidades.
Y agregarle los componentes restantes. Que por cierto, yo leo mangas(comics japoneses) y aunque tengo una aplicación para leerlos( Comix ) me gustaría crear una propia :D
Haber si en esta semana hago una especie de prototipo o algo así...
Saludos!!
pues ya es algo ke tenemos en
pues ya es algo ke tenemos en comun la lectura de mangas :)........... y gracias por la sugerencia aunque ya lo habia solucionado, y respecto a mi codigo no es tan dificil d entender lo que varia del tuyo es que los eventos los manejo en una clase interna(inner class) , una vez que ya tenia la imagen le agrege un scrollpane para irlarecorriendo.... aunque mi problema ahora es que no se actualiza la imagen , es decir selecciona la primera, seleciono la segunda y la muestra pero al recorrer el scroll regresa a la primera.
Un saludo y gracias por la otra alternativa sera una buena opcion para mi y mi novia jejejje
¿Y por que no le seguimos? Si
¿Y por que no le seguimos?
Si hay errores, habria que intentar corregirlos, coloca lo que llevas del programa, o si sigues con el mismo codigo solo postea lo que cambiaste.
Pues con el codigo que pongo
Pues con el codigo que pongo a continuacion ya me pone la imagen en el scroll , el problema es que la segunda la pone pero en el momento de poner la segunda y mover el scroll regresa a la primera , y por ahi hay unas variable spara audio pero en eso apenas empezare a trabajar ,.....
jajaja no habia checado que sigue siendo el mismo codigo pense que ayer no habia llegado hasta aca,t pido d favor que omitas leer este otra vez mejor mañana lo posteo cuando ya tenga lo de audio y haya corregido lo de la imagen ..... gracia por la ayuda
import javax.swing.*;
import java.io.*;
import javax.sound.sampled.*;
public class Interfaz
{
private JFrame frame;
private JPanel panel;
private JScrollPane scrollpane;
private JButton pic;
private JButton audio;
private JButton salir;
private JLabel etiqueta;
private ImageIcon imagen;
private JFileChooser selector;
private File archivoelegido;
Clip clip;
public Interfaz()
{
frame = new JFrame("JAVA MULTIMEDIA ");
frame.setVisible(true);
panel=new JPanel();
panel.setLayout(null);
panel.setVisible(true);
frame.add(panel);
//--------------------> contenido del marco <--------------------
pic=new JButton("Imagen");
pic.setBounds(10,50,100,30);
panel.add(pic);
//-------------------> fin boton pic <---------------------------
audio=new JButton("Audio");
audio.setBounds(10,130,100,30);
panel.add(audio);
//-------------------> fin boton audio <---------------------------
salir=new JButton("Salir");
salir.setBounds(10,200,100,30);
panel.add(salir);
// scrollpane.setBounds(160,50,400,200);
frame.setBounds(200,300,600,360);
frame.setResizable(false);
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
pic.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
String ruta;
try
{
selector=new JFileChooser();
selector.setFileFilter(new FiltroJava());
int estado=selector.showOpenDialog(null);
archivoelegido=selector.getSelectedFile();
ruta=archivoelegido.getPath();
if(estado==JFileChooser.APPROVE_OPTION);
{
imagen = new ImageIcon(ruta);
etiqueta = new JLabel(imagen);
scrollpane=new JScrollPane(etiqueta);
panel.add(scrollpane);
scrollpane.setBounds(160,10,410,300);
scrollpane.setViewportView(etiqueta);
}
}
catch( Exception npe )
{
}
}
});//boton
salir.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
});
audio.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
}
});
}//constructor
El problema debe de estar en
El problema debe de estar en como y/o donde estas creando el
JScrollPane
Por ejemplo en mi código, basto colocar estas lineas:
Primero reservar el objeto scroll
private JScrollPane scroll;
Despues crearlo y pasarle labelImagen
scroll = new JScrollPane( labelImagen );
Ahora que
scroll
contiene alabelImagen
solo hay que agregarlo al panel. Nota que lo agrego al panel que antes contenía alabelImagen
.panelImagen.add( scroll , BorderLayout.CENTER );
Y no presenta el problema que mencionas de que ves la imagen anterior.
Saludos!