Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/11/2010, 14:30
peter_21
 
Fecha de Ingreso: mayo-2010
Mensajes: 71
Antigüedad: 14 años, 7 meses
Puntos: 1
abrir imagen con FileChooser y que se mantenga

Hola,

en mi aplicacion, en una ventana determina, tengo la posibilidad de poner una imagen en un jDesktopPane mediante un FileChooser.

Eso lo he logrado poniendo el codigo que veis abajo, en el boton que quiero para abrir la imagen.
Pero si cierro dicha ventana, al volverla abrir, la imagen ya no aparece, logicamente. Me gustaria que dicha imagen se mantenga durante la aplicacion, hasta que o bien se cierre la aplicacion, o bien se abra otra imagen en otra futura ejecucion. Como lo puedo hacer?



Código:
 
File fileImagen;
private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        
        JFileChooser fileChooser = new JFileChooser();
        int status = fileChooser.showOpenDialog(null);
        if(status==JFileChooser.APPROVE_OPTION){
            File file=fileChooser.getSelectedFile();
            if(file!=null){
                fileImagen = fileChooser.getSelectedFile();
                cargarImagen(this.jDesktopPane1,fileImagen);
             }
       }
    } 

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");
        }
    }
Y aqui os dejo la clase pinta imagen:

Código:
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; }
}