jueves, 28 de enero de 2010

COMO CAMBIAR UNA IMAGEN DE FONDO A UN JFRAME DESDE UN BOTON EN JAVA NETBEANS

Pues bien esta tarea es muy interesante ya que en una oportunidad diseñe una aplicacion que mostrara la informacion pintada de fonde en el JFrame, osea un tipo de presentacion power point en java, la cual cambia las imagenes de fondo de un jframe mediane el evento click del mouse en un boton o etiqueta con imagen!!!!

Materiales:

*Se necesita crear un Nueva Aplicacion Java (EJ: Efecto_PowerPoint) --> Menu Nuevo Proyecto, JAva Aplication

*Se necesita crear un nuevo Package imagen dentro del proyecto para manejar las imagenes ademas de copiar dentro de el las imagenes a mostrar de fondo1.jpg, fondo2.jpg, fondo3.jpg,fondo4.jpg.

* Una clase pintar que modifique el el procedimiento de pintura de fondo de tipo publico para modificar el fondo a partir de un contructor (Click Derecho en Package) nueva clase llamada pintar.

* Una clase variables en donde se declaren las funciones mostrar_imagen() y crear_imagen(String fondo), estas dos funciones sirven de contructores que permiten el acceso a variables publicas o globales en java ya que el no maneja variables publicas cuando se desarrollan mas de un archivo, esto quiere decir que si creas un Jframe en java y archivo de clase q lo procese estos no se comunicaran de manera general solo a travez de los llamados contructores que tienen la funcion de meter una variable en una funcion de un archivo de tipo clase o jpanel, jrame, etc y sacarla por medio de return de la memoria ram, no es muy limpio pero funciona y es 1 de los metodos mas comunes para esto (Click Derecho en Package) nueva clase llamada varaibles.

* Un Jframe principal que ejecutara la accion de repintado mediante 2 botones (Incluire 2 etiquetas) para le efecto de siguiente y anterior, en el se declarara un array de valores String(Cadena con la direccion fisica de cada imagen esto nos dara le efecto simple que encierra power point).


Ok comensemos:

Primero la clase variables (Click Derecho en Package) nueva clase llamada varaibles.

Este es el codigo de la clase variables:


package Efecto_PowerPoint;

/**
*
* @author Fernando Perez
*/
public class variables {
private static String Fondo;


public static int mostrar_imagen()
{
return Fondo;

/* Este es el codigo del constructor que obtiene el valor de la variable de acceso global */
}

public static void crear_imagen(String valor)
{
Fondo = valor;

/* Este es el contructor que asigna el valor a la varaible global*/
}

}


Ok ahora el codigo de la clase pintar que obtiene los valores del contructor mostrar_imagen()


package Efecto_PowerPoint;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.ImageIcon;

/**
*
* author Fernando Perez
*/
public class pintar extends javax.swing.JPanel {

public pintar(){

this.setSize(769,627);
}


@Override
public void paint(Graphics g){
String foto=variables.mostrar_imagen();

/*bien primero declaramos una variable foto de tipo String y le asignamos el valor del
constructor que almacena el nombre de la ruta de la imagen seleccionada del formulario*/

Dimension tamanio = getSize();
ImageIcon imagenFondo = new ImageIcon(getClass().getResource(foto));

/* Aca se declaro la ruta de la imagen a partir de la varaialbe local foto*/

g.drawImage(imagenFondo.getImage(),0,0,tamanio.width, tamanio.height, null);
setOpaque(false);
super.paintComponent(g);
}




Ok ahora el JFrame principal que tendra 2 botones Anterior y siguiente ademas de 2 etiquetas
con la misma funcion.


import clases.pintar;
import clases.variables;
import java.awt.BorderLayout;

/**
*
* @author Fernando Perez
*/
public class lienzo extends javax.swing.JFrame {
int cont;
String[] img = {"/imagen/fondo1.jpg",""/imagen/foto2.jpg",""/imagen//foto3.jpg",""/imagen/foto4.jpg"};

/** se crea el Jframe lienzo */
public contenido_11() {
initComponents();
}

/*esta parte no se modifica ya que es creada por NetBeans pero si le dan apie coipa
y pega cone so*/
@SuppressWarnings("unchecked")
//
private void initComponents() {

jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();

setMinimumSize(new java.awt.Dimension(729, 627));
setModalExclusionType(java.awt.Dialog.ModalExclusionType.APPLICATION_EXCLUDE);
setResizable(false);
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowActivated(java.awt.event.WindowEvent evt) {
formWindowActivated(evt);
}
});

jButton1.setText("Anterior");
jButton1.setName("jButton1"); // NOI18N
jButton1.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
jButton1MouseClicked(evt);
}
});

jButton2.setText("Siguiente");
jButton2.setName("jButton2"); // NOI18N
jButton2.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
jButton2MouseClicked(evt);
}
});

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap(565, Short.MAX_VALUE)
.addComponent(jButton1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jButton2)
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap(586, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButton1)
.addComponent(jButton2))
.addGap(18, 18, 18))
);

pack();
}


/*Hasta aca el codigo generedo por NetBeans*/

private void formWindowActivated(java.awt.event.WindowEvent evt) {
String fotos = "";
fotos=img[cont];
/*asignamos la ruta de la imagen desde el array donde la primera imagen esta en la
pocision 0*/
variables.crear_imagen(fotos);
/*Bien asignamos la ruta al contructor que almacena la variable*/
pintar fondo = new pintar();
this.add(fondo , BorderLayout.CENTER);
fondo_siguiente.repaint();

}


private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {
/*Esto es interesante esta el la accion que retrosede la seleccion de imagenes para
el boton anterior*/
if(cont!=0){
cont=cont-1;
String fotos = "";
fotos=img[cont];
variables.crear_imagen(fotos);
pintar fondo_siguiente = new pintar();
this.add( fondo_siguiente , BorderLayout.CENTER);
fondo_siguiente.repaint();
}
}



private void jButton2MouseClicked(java.awt.event.MouseEvent evt) {
if(cont!=img.length){
cont=cont+1;
String fotos = "";
fotos=img[cont];
variables.crear_imagen(fotos);
pintar fondo_anterior = new pintar();
this.add( fondo_anterior , BorderLayout.CENTER);
fondo_anterior.repaint();}
}



/**
* @Este es el main del Jframe
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new lienzo.setVisible(true);

}
});
}

// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
// End of variables declaration

}

No hay comentarios:

Publicar un comentario