El ejemplo demostracion trata sobre:
“Selecionar un archivo imagen (.jpg, .gif, .png) y luego tendremos q
visualizar dicha imagen” aqui la ventana ilustrativa.
Lo Primero q tendremos q hacer es dibujar
nuestra interface grafica de usuario(GUI) en este caso “WindowDemoFile”,
lo unico nuevo en esta clase es el “JFileChooser”
Esta demas decir q la imagen se visualizara dentro de un “JDesktopPane”, aqui en fuente:public JFileChooser jfcExaminarEntrada; jfcExaminarEntrada = new JFileChooser();
import javax.swing.*; public class WindowDemoFile extends JFrame { public WindowDemoFile() { initComponents(); } private void initComponents() { setTitle("DEMO POR INFORUX"); setResizable(false); jfcExaminarEntrada = new JFileChooser(); jPanel1 = new JPanel(); jtfRutaEntrada = new JTextField(); jbExaminar = new JButton(); jbLoad = new JButton(); jPanel3 = new JPanel(); jDesktopPane1 = new JDesktopPane(); setDefaultCloseOperation( WindowConstants.EXIT_ON_CLOSE); getContentPane().setLayout(null); jPanel1.setBorder( BorderFactory.createTitledBorder("Ubica el Archivo Imagen")); jPanel1.setLayout(null); jPanel1.add(jtfRutaEntrada); jtfRutaEntrada.setBounds(20, 30, 350, 19); jbExaminar.setText("..."); jPanel1.add(jbExaminar); jbExaminar.setBounds(400, 30, 50, 25); jbLoad.setText("load"); jPanel1.add(jbLoad); jbLoad.setBounds(460, 30, 70, 25); getContentPane().add(jPanel1); jPanel1.setBounds(30, 30, 550, 70); jPanel3.setBorder( BorderFactory.createTitledBorder("Imagen Cargada")); jPanel3.setLayout(null); jPanel3.add(jDesktopPane1); jDesktopPane1.setBounds(20, 30, 530, 340); getContentPane().add(jPanel3); jPanel3.setBounds(20, 110, 570, 390); java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); setBounds((screenSize.width-618)/2, (screenSize.height-542)/2, 618, 542); /*declaramos una referencia a nuestra clase control de eventos*/ ControlaEventos controlaEventos =new ControlaEventos (this); jbExaminar.addActionListener(controlaEventos); jbLoad.addActionListener(controlaEventos); } public static void main(String args[]) { new WindowDemoFile().setVisible(true); } public JFileChooser jfcExaminarEntrada; public JButton jbExaminar; public JButton jbLoad; public JDesktopPane jDesktopPane1; public JPanel jPanel1; public JPanel jPanel3; public JTextField jtfRutaEntrada;
}La segunda clase es de nombre “ControlaEventos”, su mismo nombre lo dice, controla todos los eventos producidos por el usuario. solo controlaremos los 2 botones con nombres q muestran “…” y “load”.
La novedad de esto, es q al producirse el evento en el boton q llama al “JFileChoose”. este mostrara un dialogo y dentro de el, estara el componente. Para decirle cual de lo 2 tipos (open y/o save), utilizamos los metodos showOpenDialog o showSaveDialog, segun nuestras necesidades.
donde “d” es el frame, internalFrame, mejro dicho es la ventana donde se sobrepondra, ademas esta llamada no entrega nada hasta que el usuario ha aceptado un archivo o cancelado la entrada de ldialogo. El valor de retorno es:int result = d.showOpenDialog(ventana para seleccionar un archivo); int result =d.showSaveDialog(ventana para guardar un archivo);
JFileChooser.APROVE_OPTION (si haces click en entrar o gravar)
JFileChooser.CANCEL_OPTION. ( si hay evento en el boton cancelar del JFileChooser.)
Aqui el fuente:
import java.awt.event.*; import java.io.File; import java.awt.image.BufferedImage; import javax.imageio.ImageIO; public class ControlaEventos implements ActionListener{ WindowDemoFile ventana; File fileImagen; public ControlaEventos(WindowDemoFile objeto){ ventana = objeto; } public void actionPerformed(ActionEvent evento) { if (evento.getSource()==ventana.jbExaminar){//si hay evento en el boton examinar int returnVal = ventana.jfcExaminarEntrada.showOpenDialog(ventana);//mostramos el jFileChooser if (returnVal == ventana.jfcExaminarEntrada.APPROVE_OPTION) {//nos aseguramos q haya selecionado algun archivo fileImagen = ventana.jfcExaminarEntrada.getSelectedFile();//obtenemos el archivo selecionado ventana.jtfRutaEntrada.setText(fileImagen.toString()); }}//mostramos la ruta del archivo en la caja de texto if (evento.getSource()==ventana.jbLoad){//si hay evento en el boton load if ( fileImagen != null) { cargarImagen(ventana.jDesktopPane1,fileImagen);}} } /*este metodo recibe el jdeskopPane y el archivo imagen*/ public void cargarImagen(javax.swing.JDesktopPane jDeskp,File fileImagen) { try{ BufferedImage image = ImageIO.read(fileImagen); jDeskp.setBorder(new PintaImagen(image)); } catch (Exception e){ System.out.println("No cargo imagen, sorry"); } } }
La ultima clase, es la misma a la entrada anterior, ahy se explica la clase “PintaImagen”Atravez de esta clase convertirlos el “File” a una imagen para pintarse en un JDesktopPane.
de todas formas aqui el fuente:
import java.awt.Component; import java.awt.Graphics; import java.awt.Insets; import java.awt.image.BufferedImage; import javax.swing.border.Border; public class PintaImagen implements Border{ private BufferedImage image ; public PintaImagen(BufferedImage image ) { this.image=image;} public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { int x0 = x+ (width-image.getWidth())/2; int y0 = y+ (height-image.getHeight())/2; g.drawImage(image,x0,y0,null); } public Insets getBorderInsets(Component c) { return new Insets(0,0,0,0);} public boolean isBorderOpaque() { return true; } }
Aqui el pantallazo
No hay comentarios:
Publicar un comentario