Foros del Web » Programación para mayores de 30 ;) » Java »

Pintar Forma después de presionar botón.

Estas en el tema de Pintar Forma después de presionar botón. en el foro de Java en Foros del Web. Pintar Forma después de presionar botón. Cordial Saludo Aunque esta pregunta tiene el mismo fin que otra pregunta formulada por mí, cambia la forma de ...
  #1 (permalink)  
Antiguo 19/05/2010, 20:18
 
Fecha de Ingreso: febrero-2007
Ubicación: Barranquilla, Colombia
Mensajes: 181
Antigüedad: 17 años, 10 meses
Puntos: 3
De acuerdo Solucionado:Pintar Forma después de presionar botón.

Pintar Forma después de presionar botón.

Cordial Saludo
Aunque esta pregunta tiene el mismo fin que otra pregunta formulada por mí, cambia la forma de implementar el objetivo.

Primero declaro una clase:
Código Java:
Ver original
  1. class Object2D {
  2.   Color mc;
  3.   int TipoObjeto;
  4.   static int mLINE = 1;
  5.   static int mRECT = 2;
  6.   int X0,Y0, X1,Y1;
  7.   float ms;
  8.   Graphics mg;
  9.  
  10.   Object2D (Graphics g, Color c, int t, int x0, int x1, int y0, int y1, float s){
  11.     mg = g;     mc = c;
  12.     ms = s;      TipoObjeto = t;
  13.     X0 = x0;    Y0 = y0;
  14.     X1 = x1;    Y1 = y1;
  15.   }
  16.  
  17.   void ViewObject2D(){
  18.     Graphics2D g2d = (Graphics2D)mg;
  19.     g2d.setColor(mc);
  20.     g2d.setStroke(new BasicStroke(ms));
  21.     g2d.setPaintMode();
  22.     if (TipoObjeto==mLINE){
  23.       g2d.draw(new Line2D.Double(X0, X1, Y0, Y1));
  24.     }
  25.     if (TipoObjeto==mRECT){
  26.       g2d.draw(new Rectangle2D.Double(X0, Y0, X1, Y1));
  27.     }
  28.   }
  29. }

Ahora detallo la forma en que uso la clase:
Creo un vector del tipo de la clase llamado ObjectVector
Creo un método que llena el vector con dos objetos
Creo un método que muestre el contenido del vector
Código Java:
Ver original
  1. public class Graficador extends javax.swing.JFrame {
  2.     /** Creates new form Graficador */
  3.   Vector<Object2D> ObjectVector = new Vector<Object2D>();
  4.   Graphics g1d;
  5.  
  6.   ...
  7.  
  8.   public void FillVector(Graphics g){
  9.     //Crea dos objetos uno tipo Linea y otro tipo Rectangulo
  10.     ObjectVector.addElement(new Object2D (g,new Color(0,0,255),Object2D.mLINE,100,100,200,200,1.0f));
  11.     ObjectVector.addElement(new Object2D (g,new Color(0,255,0),Object2D.mRECT,150,150,200,200,1.5f));
  12.   }
  13.  
  14.   public void DrawVector(){
  15.     //Dibuja el contenido del vector
  16.     if(!VectorObjeto.isEmpty()){
  17.       for (int i = 0; i<ObjectVector.size();i++){
  18.         ObjectVector.elementAt(i).ViewObject2D();
  19.       }
  20.     }
  21.   }
  22.   ...

Explicación de lo anterior..
El método paint obtiene un objeto de tipo Graphics
Inicializa una variable de tipo Graphics llamada g1d ..esto con el objetivo de usarlo posteriormente
llena el vector con dos objetos FillVector(g); y luego dibuja el vector DrawVector();...
Código Java:
Ver original
  1. public void paint(Graphics g) {
  2.     this.g1d = g;
  3.     super.paint(this.g1d);
  4.     FillVector(g);
  5.     DrawVector();
  6.   }
  7.   private void jbDibujarActionPerformed(java.awt.event.ActionEvent evt) {  
  8.     FillVector(this.g1d);
  9.     repaint();
  10.   }

Pregunta:
¿Habrá alguna forma de que después de presionar el botón jbDibujar se dibuje realmente lo requerido y no cuando se llame paint()?;

Es decir que paint solo serviría para inicializar el objeto graphics y dibujar los objetos contenidos en el vector ObjectVector.
Código Java:
Ver original
  1. public void paint(Graphics g) {
  2.     this.g1d = g;
  3.     super.paint(this.g1d);
  4.     DrawVector();
  5.   }


¿Será posible de hacer lo requerido así sea usando otro método?
Gracias...
__________________
Jose Luis Bernal Zambrano
Please response to:
[email protected]

Última edición por joseluisbz; 23/05/2010 a las 00:16 Razón: Solucionado
  #2 (permalink)  
Antiguo 21/05/2010, 00:27
 
Fecha de Ingreso: febrero-2007
Ubicación: Barranquilla, Colombia
Mensajes: 181
Antigüedad: 17 años, 10 meses
Puntos: 3
Respuesta: Pintar Forma después de presionar botón.

Solución Encontrada
__________________
Jose Luis Bernal Zambrano
Please response to:
[email protected]

Última edición por joseluisbz; 22/05/2010 a las 23:47
  #3 (permalink)  
Antiguo 23/05/2010, 00:04
 
Fecha de Ingreso: febrero-2007
Ubicación: Barranquilla, Colombia
Mensajes: 181
Antigüedad: 17 años, 10 meses
Puntos: 3
De acuerdo Solución: Pintar Forma después de presionar botón.

Ahora veremos la solución:

La clase inicial que antes se llamaba Objeto2D ahora se llama Object2D:
Código Java:
Ver original
  1. class Object2D {
  2.   Color mc;
  3.   int TipoObjeto;
  4.   static int mLINE = 1;
  5.   static int mRECT = 2;
  6.   int X0,Y0, X1,Y1;
  7.   float ms;
  8.   Object2D(Color c, int t, int x0, int x1, int y0, int y1, float s){
  9.     TipoObjeto = t;
  10.     mc = c;
  11.     ms = s;
  12.     X0 = x0;
  13.     Y0 = y0;
  14.     X1 = x1;
  15.     Y1 = y1;
  16.   }
  17.   void ViewObject2D(BufferedImage bi){
  18.     Graphics2D g2d = bi.createGraphics();
  19.     g2d.setColor(mc);
  20.     g2d.setStroke(new BasicStroke(ms));
  21.     g2d.setPaintMode();
  22.     if (TipoObjeto==mLINE){
  23.       g2d.draw(new Line2D.Double(X0, X1, Y0, Y1));
  24.     }
  25.     if (TipoObjeto==mRECT){
  26.       g2d.draw(new Rectangle2D.Double(X0, Y0, X1, Y1));
  27.     }
  28.     g2d.dispose();
  29.   }
  30. }

Uso de la clase:
Hago uso de un vector tipo BufferedImage llamado bImage, así se "comunica" la clase contenedora con la contenida para pasarle el objeto de referencia para dibujar, éste es inicializado en el constructor de la clase Graficador.
Código Java:
Ver original
  1. public class Graficador extends javax.swing.JFrame {
  2.     /** Creates new form Graficador */
  3.   Vector<Object2D> ObjectVector  = new Vector<Object2D>();
  4.   BufferedImage bImage;
  5.   public Graficador() {
  6.     super( "Dibujo de figuras en 2D" );
  7.     setVisible(true);
  8.     initComponents();
  9.     bImage = new  BufferedImage(super.getWidth(),super.getHeight(),BufferedImage.TYPE_INT_RGB);
  10.   }

Solo cambia algunas cosas, ya no hay objeto Graphics como referencia de dibujo, sino BufferedImage, ahhh y también cambié los nombres de algunos métodos..para poder hacer preguntas con mi código en foros ingleses.
Código Java:
Ver original
  1. public void DrawVector(){
  2.     if(!ObjectVector.isEmpty()){
  3.       for (int i = 0; i<ObjectVector.size();i++){
  4.         ObjectVector.elementAt(i).ViewObject2D(bImage);
  5.       }
  6.     }
  7.   }
  8.  
  9.   public void FillVector(){
  10.     ObjectVector.addElement(new Object2D(new Color(0,255,255),Object2D.mLINE,250,300,500,90,0.6f));
  11.     ObjectVector.addElement(new Object2D(new Color(255,255,0),Object2D.mRECT,250,250,150,50,0.1f));
  12.   }

El método paint queda más sencillo, al final todos los cambios hechos se reflejarán al final al llamar g.drawImage(bImage, 0, 0, this);
Código Java:
Ver original
  1. public void paint(Graphics g) {
  2.     super.paint(g);
  3.     DrawVector();
  4.     g.drawImage(bImage, 0, 0, this);
  5.   }

El método que es llamado cuando es presionado el botón jbDibujar
Código Java:
Ver original
  1. private void jbDibujarActionPerformed(java.awt.event.ActionEvent evt) {  
  2.       FillVector();
  3.       repaint();
  4.     }

Espero les sea de ayuda...
__________________
Jose Luis Bernal Zambrano
Please response to:
[email protected]

Última edición por joseluisbz; 23/05/2010 a las 00:15

Etiquetas: paint, repaint, update
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:28.