Ver Mensaje Individual
  #1 (permalink)  
Antiguo 19/05/2010, 20:18
joseluisbz
 
Fecha de Ingreso: febrero-2007
Ubicación: Barranquilla, Colombia
Mensajes: 181
Antigüedad: 17 años, 9 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