Ver Mensaje Individual
  #8 (permalink)  
Antiguo 17/05/2010, 11:50
joseluisbz
 
Fecha de Ingreso: febrero-2007
Ubicación: Barranquilla, Colombia
Mensajes: 181
Antigüedad: 17 años, 3 meses
Puntos: 3
Respuesta: setXORMode, setPaintMode, Borrar una gráfica de muchas

Para evitar eso que me dices....
Cita:
Iniciado por chuidiang Ver Mensaje
Sí, pero queda el segundo tema que te dije. Si al borrar hay dos puntos de la gráfica que coinciden sobre el mismo pixel, no se borrará dicho pixel, ya que el primer xor lo borra, pero el segundo vuelve a pintarlo.

Se bueno.

He cambiado el funcionamiento del método paint...
No estoy seguro de si llamar al método super.paint(g1d);..
Luego paint "configura" los vectores llamando al método dibujar(g1d);
Llama al método MisGraficos.graficar(g1d); para mostrar los datos detallados en el método dibujar...

Código Java:
Ver original
  1. public void paint(Graphics g) {
  2.     g1d = g;
  3.     super.paint(g1d);
  4.     dibujar(g1d);  //Si saco esto de aca no realiza los cambios en los vectores
  5.     if (MisGraficos!=null){
  6.       MisGraficos.graficar(g1d);
  7.     }
  8.   }

El método dibujar hace todos los cambios (agregar variable, borrarla, visualizarla, ocultar todas las variables, o visualizarlas, etc..) que el usuario de la clase quiere hacer en los vectores de las variables.
Código Java:
Ver original
  1. public void dibujar(Graphics g){
  2.     // super.paint( g);
  3.     double misT[] = {100,120,140,160,180,200,220,240};
  4.     double misX[] = {120,120,160,160,160,140,140,140};
  5.     double misY[] = {140,140,120,120,120,160,160,160};
  6.     double misZ[] = {160,160,140,140,140,120,120,120};
  7.     double misP[] = {200,200,220,220,240,240,260,260};
  8.     double misQ[] = {260,260,240,240,220,220,200,200};
  9.     MisGraficos = new GTrama(10,10,400,400);
  10.     MisGraficos.addVble(g,"a", misT, misX, Color.RED, (float)1, false);
  11.     MisGraficos.addVble(g,"b", misT, misY, Color.GREEN, (float)1,false);
  12.     MisGraficos.addVble(g,"c", misT, misZ, Color.BLUE, (float)1, false);
  13.     MisGraficos.addVble(g,"d", misT, misP, Color.LIGHT_GRAY, (float)2, false);
  14.     MisGraficos.addVble(g,"e", misT, misQ, Color.DARK_GRAY, (float)2,false);
  15.     MisGraficos.ViewAll();
  16.     MisGraficos.HideAll();
  17.     MisGraficos.ViewVble("e");
  18.     MisGraficos.ViewVble("d");
  19.     MisGraficos.delVble("c");
  20.   }

El método graficar revisa el contenido del Vector nVector (que contiene el nombre de las variables) y verifica si el vVector correspondiente de la variable es visible o no (true->Visible, false->Oculto), Si es visible llama al método grafica para visualizar la variable en cuestión, pasándole el objeto Graphics, el Indice de referencia (así se cargan los datos de los vectores de la variable) y la Palabra "View".
Código Java:
Ver original
  1. void graficar(Graphics g){
  2.     if (!nVector.isEmpty()){
  3.       for (int Indice = 0; Indice<nVector.size();Indice++){
  4.         if (vVector.elementAt(Indice)){
  5.           grafica(g, Indice, "View");
  6.         }
  7.       }
  8.     }
  9.   }

El método grafica, solo visualizará los datos de la variable elegida, y usará g2.setPaintMode();
Código Java:
Ver original
  1. void grafica(Graphics g, int Indice, String Oper){
  2.   //Recarga una gráfica para mostrarla u ocultarla
  3.     Graphics2D g2 = gVector.elementAt(Indice)
  4. //    Graphics2D g2 = (Graphics2D)g;
  5.  
  6.     float zDepth = dVector.elementAt(Indice);
  7.     Color color = cVector.elementAt(Indice);
  8.     double[] aX = Double_double(xVector.elementAt(Indice));
  9.     double[] aY = Double_double(yVector.elementAt(Indice));
  10.     g2.setColor(color);
  11.     g2.setStroke(new BasicStroke(zDepth));
  12.     if (Oper.equals("Hide")){
  13.       g2.setXORMode(getBackground());
  14.     }
  15.     if (Oper.equals("View")){
  16.       g2.setPaintMode();
  17.     }
  18.     if (aX.length == 1){
  19.       g2.drawLine ((int)aX[0], (int)aX[0], (int)aY[0], (int)aY[0]);
  20.     } else {
  21.       System.out.print(nVector.elementAt(Indice)+"\n");
  22.       for (int j = 0;j<aY.length-1;j++){
  23.         g2.drawLine ((int)aX[j], (int)aY[j], (int)aX[j+1], (int)aY[j+1]);
  24.       }
  25.     }+
  26.   }

Todo lo anterior funciona, puesto que puedo ver las gráficas...

La pregunta es si yo saco al método dibujar del método paint y lo pongo en un botón de esta manera:
Código Java:
Ver original
  1. private void jbDibujarActionPerformed(java.awt.event.ActionEvent evt) {  
  2.     dibujar(g1d);
  3.     paint(g1d);
  4. //    repaint();
  5.   }
¿Porqué no me dibuja al presionar el botón?

La idea anterior es que Paint no cambie los vectores solo los muestre.

Código Java:
Ver original
  1. public void paint(Graphics g) {
  2.     g1d = g;
  3.     super.paint(g1d);
  4.     if (MisGraficos!=null){
  5.       MisGraficos.graficar(g1d);
  6.     }
  7.   }
Los cambios se realizarían al presionar el botón quien llama a repaint, update o paint (cualquiera que sea el caso). ¿Pero porqué no funciona?
__________________
Jose Luis Bernal Zambrano
Please response to:
[email protected]

Última edición por joseluisbz; 18/05/2010 a las 16:39