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

setXORMode, setPaintMode, Borrar una gráfica de muchas

Estas en el tema de setXORMode, setPaintMode, Borrar una gráfica de muchas en el foro de Java en Foros del Web. Cordial Saludo: Estoy tratando de implementar una clase que me grafique diferentes señales; hasta ahora la clase grafica varias señales, la inquitud está es en ...
  #1 (permalink)  
Antiguo 11/05/2010, 18:58
 
Fecha de Ingreso: febrero-2007
Ubicación: Barranquilla, Colombia
Mensajes: 181
Antigüedad: 17 años, 2 meses
Puntos: 3
setXORMode, setPaintMode, Borrar una gráfica de muchas

Cordial Saludo:

Estoy tratando de implementar una clase que me grafique diferentes señales; hasta ahora la clase grafica varias señales, la inquitud está es en borrar una de ellas.
Mi clase borra, pero deja vestigios de la señal que recien fue borrada u ocultada...

Pongo el código de mi clase para que por favor si pueden me ayuden... aclarar..

Código Java:
Ver original
  1. class Graficar extends javax.swing.JFrame {
  2.   private int numVble;
  3.   private Vector<Color> cVector = new Vector<Color>();    //Vector de Color de la Variable
  4.   private Vector<String> nVector = new Vector<String>();  //Vector de Nombre de la Variable
  5.   private Vector<Graphics2D> gVector = new Vector<Graphics2D>();//Vector de Graphic de la Variable
  6.   private Vector<Double []> xVector = new Vector<Double []>();//Vector de Arreglo de X de la Variable
  7.   private Vector<Double []> yVector = new Vector<Double []>();//Vector de Arreglo de Y de la Variable
  8.   private Vector<Double> xMin = new Vector<Double>();//Vector de Valor Mínimo del Arreglo de X de la Variable
  9.   private Vector<Double> yMin = new Vector<Double>();//Vector de Valor Mínimo del Arreglo de Y de la Variable
  10.   private Vector<Double> xMax = new Vector<Double>();//Vector de Valor Máximo del Arreglo de X de la Variable
  11.   private Vector<Double> yMax = new Vector<Double>();//Vector de Valor Máximo del Arreglo de Y de la Variable
  12.   private Vector<Float> dVector = new Vector<Float>();//Vector de Espesor de la Variable
  13.   private int PosX, PosY, Largo, Ancho;
  14.   String VbleX, VbleY; //Agragar Nombre de Variables X y Y
  15.   String TitleV, TitleH; //Agrega Título Vertical(Izquierda) y Título Horizontal(Debajo)
  16.   String TitleM, TitleS; //Título Principal y Título Secundario
  17.   Canvas Lienzo;
  18.   private double MaxX, MinX, MaxY, MinY; //Almacena Máximos y Mínimos de Coordenadas X y Y
  19.   Graficar(int xPos, int yPos, int xWidth, int yLarge){
  20.     numVble = 0;
  21.     Lienzo = new Canvas();
  22.     setDimension(xWidth,yLarge);
  23.     setPosition(xPos,yPos);
  24.     Lienzo.setBackground(Color.LIGHT_GRAY);
  25.     Lienzo.setForeground(Color.DARK_GRAY);
  26.   }
  27.   void setPosition(int xPos, int yPos) {
  28.   //Asignar la posición del Lienzo
  29.     PosX = xPos;
  30.     PosY = yPos;
  31.     Lienzo.setLocation(PosX, PosY);
  32.   }
  33.   void getPosition(int xPos, int yPos) {
  34.   //Obtener la posición del Lienzo
  35.     xPos = PosX;
  36.     yPos = PosY;
  37.   }
  38.   void setDimension(int xWidth, int yLarge) {
  39.   //Asignar la Dimensión del Lienzo
  40.     Ancho = xWidth;
  41.     Largo = yLarge;
  42.     Lienzo.setSize(Ancho, Largo);
  43.   }
  44.   void getDimension(int xWidth, int yLarge) {
  45.   //Obtener la Dimensión del Lienzo
  46.     xWidth = Ancho;
  47.     yLarge = Largo;
  48.   }
  49.   double getMax(double[] data){
  50.   //Obtener el valor MAYOR del Arreglo
  51.     if (data.length <1) throw new RuntimeException("Arreglo de datos vacío");
  52.     double Max = data[0];
  53.     for (int i=0;i<data.length;i++){
  54.       if (Max < data[i])
  55.         Max = data[i];
  56.     }
  57.     return Max;
  58.   }
  59.   double getMin(double[] data){
  60.   //Obtener el valor MENOR del Arreglo
  61.     if (data.length <1) throw new RuntimeException("Arreglo de datos vacío");
  62.     double Min = data[0];
  63.     for (int i=0;i<data.length;i++){
  64.       if (Min > data[i])
  65.         Min = data[i];
  66.     }
  67.     return Min;
  68.   }
  69.   double getMax(Vector<Double> data){
  70.   //Obtener el valor MAYOR del Vector
  71.     if (data.size() <1) throw new RuntimeException("Arreglo de datos vacío");
  72.     double Max = data.elementAt(0);
  73.     for (int i=0;i<data.size();i++){
  74.       if (Max < data.elementAt(i))
  75.         Max = data.elementAt(i);
  76.     }
  77.     return Max;
  78.   }
  79.   double getMin(Vector<Double> data){
  80.   //Obtener el valor MENOR del Vector
  81.     if (data.size() <1) throw new RuntimeException("Arreglo de datos vacío");
  82.     double Min = data.elementAt(0);
  83.     for (int i=0;i<data.size();i++){
  84.       if (Min > data.elementAt(i))
  85.         Min = data.elementAt(i);
  86.     }
  87.     return Min;
  88.   }
  89.   Double [] double_Double (double[] ddata){
  90.   //Convierte los datos de double a Double para operar con Vectores
  91.     Double[] Ddata = new Double[ddata.length];
  92.     for (int i=0;i<ddata.length;i++){
  93.       Ddata[i] = ddata[i];
  94.     }
  95.     return Ddata;
  96.   }
  97.   double [] Double_double (Double[] Ddata){
  98.   //Restaura los datos de Double a double para operar con arreglos
  99.     double[] ddata = new double[Ddata.length];
  100.     for (int i=0;i<Ddata.length;i++){
  101.       ddata[i] = Ddata[i];
  102.     }
  103.     return ddata;
  104.   }
  105.   int addVble(Graphics g, String nVble, double[] aX, double[] aY, Color VbleColor, float zDepth){
  106.   //Agrega una variable a Graficar, llamada nVble, de Color VbleColor y Grosor zDepth
  107.     if (nVector.contains(nVble)) throw new RuntimeException("La Variable ya existe");
  108.     if(aX.length != aY.length) throw new RuntimeException("Tallas diferentes");
  109.     if(aX.length == 0||aY.length == 0) throw new RuntimeException("Arreglos de datos vacíos");
  110.     Graphics2D g2 = (Graphics2D)g;
  111.     Double[] vX = double_Double(aX); //Convierte el Arreglo double vX a Vector Double vX
  112.     Double[] vY = double_Double(aY); //Convierte el Arreglo double vY a Vector Double vY
  113.     xMin.add(getMin(aX)); //Agrega el Mínimo valor del Arreglo aX al Vector xMin
  114.     xMax.add(getMax(aX)); //Agrega el Máximo valor del Arreglo aX al Vector xMax
  115.     yMin.add(getMin(aY)); //Agrega el Mínimo valor del Arreglo aY al Vector yMin
  116.     yMax.add(getMax(aY)); //Agrega el Máximo valor del Arreglo aY al Vector yMin
  117.     nVector.add(nVble);
  118.     cVector.add(VbleColor);
  119.     dVector.add(zDepth);
  120.     gVector.add(g2);
  121.     xVector.add(vX);
  122.     yVector.add(vY);
  123.    
  124.     MinX = getMin(xMin);  //Halla el Mínimo Valor de X, del Vector xMin
  125.     MaxX = getMax(xMax);  //Halla el Máximo Valor de X, del Vector xMax
  126.     MinY = getMin(yMin);  //Halla el Mínimo Valor de Y, del Vector yMin
  127.     MaxY = getMax(yMax);  //Halla el Máximo Valor de Y, del Vector yMax
  128.  
  129.     System.out.print("addVble \n");
  130.     System.out.print(nVble+" getMin(aX):"+getMin(aX)+" MinX :"+MinX+"\n");
  131.     System.out.print(nVble+" getMax(aX):"+getMax(aX)+" MaxX :"+MaxX+"\n");
  132.     System.out.print(nVble+" getMin(aY):"+getMin(aY)+" MinY :"+MinY+"\n");
  133.     System.out.print(nVble+" getMax(aY):"+getMax(aY)+" MaxY :"+MaxY+"\n");
  134.     System.out.print(" \n");
  135.     numVble += 1;
  136.     return numVble;
  137.   }
  138.   int numVble() {
  139.   //Retorna el número de variables que hay almacenadas
  140.     return numVble;
  141.   }
  142.   int delVble(String nVble){
  143.   //Elimina una variable a Graficar llamada nVble
  144.     if (!nVector.contains(nVble)) throw new RuntimeException("La Variable no existe");
  145.     int Indice = nVector.indexOf(nVble);
  146.     xMin.remove(Indice);  //Borra el Mínimo valor de X del Vector xMin
  147.     xMax.remove(Indice);  //Borra el Máximo valor de X del Vector xMin
  148.     yMin.remove(Indice);  //Borra el Mínimo valor de Y del Vector yMin
  149.     yMax.remove(Indice);  //Borra el Máximo valor de Y del Vector yMin
  150.     nVector.remove(Indice);
  151.     cVector.remove(Indice);
  152.     dVector.remove(Indice);
  153.     gVector.remove(Indice);
  154.     xVector.remove(Indice);
  155.     yVector.remove(Indice);
  156.  
  157.     MinX = getMin(xMin);  //Halla el Mínimo Valor de X, del Vector xMin
  158.     MaxX = getMax(xMax);  //Halla el Máximo Valor de X, del Vector xMax
  159.     MinY = getMin(yMin);  //Halla el Mínimo Valor de Y, del Vector yMin
  160.     MaxY = getMax(yMax);  //Halla el Máximo Valor de Y, del Vector yMax
  161.  
  162.     System.out.print("delVble \n");
  163.     System.out.print(nVble+" MinX :"+MinX+"\n");
  164.     System.out.print(nVble+" MaxX :"+MaxX+"\n");
  165.     System.out.print(nVble+" MinY :"+MinY+"\n");
  166.     System.out.print(nVble+" MaxY :"+MaxY+"\n");
  167.     System.out.print(" \n");
  168.     numVble -= 1;
  169.     return numVble;
  170.   }
  171.   boolean Exist(String nVble){
  172.   //Verifica si existe una Variable llamada nVble
  173.     return nVector.contains(nVble);
  174.   }
  175.   void ViewAll(){
  176.   //Muestra todas las graficas almacenadas en los vectores
  177.     for (int Indice = 0; Indice<nVector.size();Indice++){
  178.       grafica(Indice, "View");
  179.     }
  180.   }
  181.   void HideAll(){
  182.   //Oculta todas las graficas almacenadas en los vectores
  183.     for (int Indice = 0; Indice<nVector.size();Indice++){
  184.       grafica(Indice, "Hide");
  185.     }
  186.   }
  187.   void ViewVble(String nVble){
  188.   //Muestra la grafica de la Variable llamada nVble
  189.     if (!nVector.contains(nVble)) throw new RuntimeException("La Variable no existe");
  190.     int Indice = nVector.indexOf(nVble);
  191.     grafica(Indice, "View");
  192.   }
  193.   void HideVble(String nVble){
  194.   //Oculta la grafica de la Variable llamada nVble
  195.     if (!nVector.contains(nVble)) throw new RuntimeException("La Variable no existe");
  196.     int Indice = nVector.indexOf(nVble);
  197.     grafica(Indice, "Hide");
  198.   }
  199.   void grafica(int Indice, String Oper){
  200.   //Recarga una gráfica para mostrarla u ocultarla
  201.     Graphics2D g2 = gVector.elementAt(Indice);
  202.     float zDepth = dVector.elementAt(Indice);
  203.     Color color = cVector.elementAt(Indice);
  204.     double[] aX = Double_double(xVector.elementAt(Indice));
  205.     double[] aY = Double_double(yVector.elementAt(Indice));
  206.     g2.setColor(color);
  207.     g2.setStroke(new BasicStroke(zDepth));
  208.     if (Oper.equals("Hide")){
  209.       g2.setXORMode(getBackground());
  210.     }
  211.     if (Oper.equals("View")){
  212.       g2.setPaintMode();
  213.     }
  214.     if (aX.length == 1){
  215.       g2.drawLine ((int)aX[0], (int)aX[0], (int)aY[0], (int)aY[0]);
  216.     } else {
  217.       for (int j = 0;j<aY.length-1;j++){
  218.         //g2.draw( new Line2D.Double((int)vX[i], (int)vX[i+1], (int)vY[i], (int)vY[i+1]));
  219.         g2.drawLine ((int)aX[j], (int)aY[j], (int)aX[j+1], (int)aY[j+1]);
  220.       }
  221.     }
  222.     repaint();
  223.   }
  224.   String[] AllVbles(){
  225.   //Retorna un vector con los nombres de las variables almacenadas
  226.     String[] Vbles = new String[nVector.size()];
  227.     for (int i = 0; i<nVector.size();i++){
  228.       Vbles[i] = nVector.elementAt(i);
  229.     }
  230.     return Vbles;
  231.   }
  232. }
__________________
Jose Luis Bernal Zambrano
Please response to:
[email protected]

Última edición por joseluisbz; 11/05/2010 a las 21:27
  #2 (permalink)  
Antiguo 11/05/2010, 19:07
 
Fecha de Ingreso: febrero-2007
Ubicación: Barranquilla, Colombia
Mensajes: 181
Antigüedad: 17 años, 2 meses
Puntos: 3
Respuesta: setXORMode, setPaintMode, Borrar una gráfica de muchas

El modo de uso es el siguiente:

Código Java:
Ver original
  1. public void paint( Graphics g ) {
  2.   super.paint( g );
  3.   Graficar MisGraficos = new Graficar(10,10,400,400);
  4.   double misT[] = {100,120,140,160,180,200,220,240};
  5.   double misX[] = {110,120,230,140,150,160,270,180};
  6.   double misY[] = {140,55,90,200,140,124,210,60};
  7.   double misZ[] = {125,300,170,150,110,110,200,100};
  8.   MisGraficos.addVble(g,"a", misT, misX, Color.RED, (float)1);
  9.   MisGraficos.addVble(g,"b", misT, misY, Color.GREEN, (float)1.1);
  10.   MisGraficos.addVble(g,"c", misT, misZ, Color.BLUE, (float)1.2);
  11.   MisGraficos.ViewAll();
  12.   MisGraficos.HideVble("a");
  13.   MisGraficos.delVble("c");
  14.   MisGraficos.HideAll();
  15. } // fin del método paint

primero que todo defino unas variables del tipo X versus Y,
en el arreglo misT[] hágase de cuenta que es el tiempo y misX[], misY[], misY[] son las funciones que deben tener el mismo número de datos.

Agrego las variables, el nombre, lo datos de X y los datos de Y por último el color y el grosor de la linea de dibujo.
Todo sale bien hasta cuando llamo:
MisGraficos.HideVble("a");
Quedan vestigios de la señal, es decir, aunque "oculte" la señal se quedan viendo pedazos de lineas rojas...

Por favor de tener una duda acerca de mi clase porque no entiendan yo les explico con mucho gusto...

Pienso yo que uno de los motivos es el uso de setXORMode, setPaintMode... bueno agradezco por adelantado su colaboración..
__________________
Jose Luis Bernal Zambrano
Please response to:
[email protected]

Última edición por joseluisbz; 11/05/2010 a las 21:27
  #3 (permalink)  
Antiguo 13/05/2010, 17:09
 
Fecha de Ingreso: mayo-2010
Mensajes: 38
Antigüedad: 13 años, 11 meses
Puntos: 0
Respuesta: setXORMode, setPaintMode, Borrar una gráfica de muchas

Aun no has solucionada nada?
  #4 (permalink)  
Antiguo 15/05/2010, 22:21
 
Fecha de Ingreso: febrero-2007
Ubicación: Barranquilla, Colombia
Mensajes: 181
Antigüedad: 17 años, 2 meses
Puntos: 3
Respuesta: setXORMode, setPaintMode, Borrar una gráfica de muchas

El mensaje no tuvo respuesta... será porque el código es muy largo?
Voy a tratar de poner algo más entendible...

Le cambié el nombre a la clase... de Graficar a GTrama... para indicar que hereda de Frame

Código Java:
Ver original
  1. class GTrama extends Frame {
  2.   private Vector<Color> cVector = new Vector<Color>();    //Vector de Color de la Variable
  3.   private Vector<Boolean> vVector = new Vector<Boolean>();    //Vector de Visibilidad de la Variable
  4.   private Vector<String> nVector = new Vector<String>();  //Vector de Nombre de la Variable
  5.   private Vector<Graphics2D> gVector = new Vector<Graphics2D>();//Vector de Graphic de la Variable
  6.   private Vector<Double []> xVector = new Vector<Double []>();//Vector de Arreglo de X de la Variable
  7.   private Vector<Double []> yVector = new Vector<Double []>();//Vector de Arreglo de Y de la Variable
  8.   private Vector<Double> xMin = new Vector<Double>();//Vector de Valor Mínimo del Arreglo de X de la Variable
  9.   private Vector<Double> yMin = new Vector<Double>();//Vector de Valor Mínimo del Arreglo de Y de la Variable
  10.   private Vector<Double> xMax = new Vector<Double>();//Vector de Valor Máximo del Arreglo de X de la Variable
  11.   private Vector<Double> yMax = new Vector<Double>();//Vector de Valor Máximo del Arreglo de Y de la Variable
  12.   private Vector<Float> dVector = new Vector<Float>();//Vector de Espesor de la Variable
  13.   private int PosX, PosY, Largo, Ancho;
  14.   String VbleX, VbleY; //Agragar Nombre de Variables X y Y
  15.   String TitleV, TitleH; //Agrega Título Vertical(Izquierda) y Título Horizontal(Debajo)
  16.   String TitleM, TitleS; //Título Principal y Título Secundario
  17.   private double MaxX, MinX, MaxY, MinY; //Almacena Máximos y Mínimos de Coordenadas X y Y
  18.  
  19.   GTrama(int xPos, int yPos, int xWidth, int yLarge){
  20.   }
  21.  
  22.   void ViewAll(Graphics g){
  23.   //Muestra todas las graficas almacenadas en los vectores
  24.     for (int Indice = 0; Indice<nVector.size();Indice++){
  25.       grafica(g, Indice, "View");
  26.     }
  27.   }
  28.   void HideAll(Graphics g){
  29.   //Oculta todas las graficas almacenadas en los vectores
  30.     for (int Indice = 0; Indice<nVector.size();Indice++){
  31.       grafica(g, Indice, "Hide");
  32.     }
  33.   }
  34.   void ViewVble(Graphics g, String nVble){
  35.   //Muestra la grafica de la Variable llamada nVble
  36.     if (!nVector.contains(nVble)) throw new RuntimeException("La Variable no existe");
  37.     int Indice = nVector.indexOf(nVble);
  38.     grafica(g, Indice, "View");
  39.   }
  40.   void HideVble(Graphics g, String nVble){
  41.   //Oculta la grafica de la Variable llamada nVble
  42.     if (!nVector.contains(nVble)) throw new RuntimeException("La Variable no existe");
  43.     int Indice = nVector.indexOf(nVble);
  44.     grafica(g, Indice, "Hide");
  45.   }
  46. }


Como NO pude implementar un arreglo de tipo double:
Código Java:
Ver original
  1. private Vector<double []> xVector = new Vector<double []>();
  2. private Vector<double []> yVector = new Vector<double []>();

Me tocó hacer un Vector de tipo arreglo de Objeto tipo Double:
Código Java:
Ver original
  1. private Vector<Double []> xVector = new Vector<Double []>();
  2. private Vector<Double []> yVector = new Vector<Double []>();

HE EXTRAIDO LOS MÉTODOS DE LA CLASE PARA EXPLICARLOS POR FUERA, PERO REALMENTE SON MÉTODOS DE GTrama

Y por supuesto no pude hacer uso de System.ArrayCopy más bien hacer la copia o conversión manual...

Código Java:
Ver original
  1. Double [] double_Double (double[] ddata){
  2.   //Convierte los datos de double a Double para operar con Vectores
  3.     Double[] Ddata = new Double[ddata.length];
  4.     for (int i=0;i<ddata.length;i++){
  5.       Ddata[i] = ddata[i];
  6.     }
  7.     return Ddata;
  8.   }
  9.   double [] Double_double (Double[] Ddata){
  10.   //Restaura los datos de Double a double para operar con arreglos
  11.     double[] ddata = new double[Ddata.length];
  12.     for (int i=0;i<Ddata.length;i++){
  13.       ddata[i] = Ddata[i];
  14.     }
  15.     return ddata;
  16.   }

Es por ello que me tocó implementar dos métodos para hallar los mínimos y dos métodos para hallar los máximos...
Código Java:
Ver original
  1. double getMax(double[] data){
  2.   //Obtener el valor MAYOR del Arreglo
  3.     if (data.length <1) throw new RuntimeException("Arreglo de datos vacío");
  4.     double Max = data[0];
  5.     for (int i=0;i<data.length;i++)
  6.       if (Max < data[i])
  7.         Max = data[i];
  8.     return Max;
  9.   }
  10.   double getMin(double[] data){
  11.   //Obtener el valor MENOR del Arreglo
  12.     if (data.length <1) throw new RuntimeException("Arreglo de datos vacío");
  13.     double Min = data[0];
  14.     for (int i=0;i<data.length;i++)
  15.       if (Min > data[i])
  16.         Min = data[i];
  17.     return Min;
  18.   }
  19.   double getMax(Vector<Double> data){
  20.     if (data.size() <1) throw new RuntimeException("Arreglo de datos vacío");
  21.     double Max = data.elementAt(0);
  22.     for (int i=0;i<data.size();i++)
  23.       if (Max < data.elementAt(i))
  24.         Max = data.elementAt(i);
  25.     return Max;
  26.   }
  27.   double getMin(Vector<Double> data){
  28.     if (data.size() <1) throw new RuntimeException("Arreglo de datos vacío");
  29.     double Min = data.elementAt(0);
  30.     for (int i=0;i<data.size();i++)
  31.       if (Min > data.elementAt(i))
  32.         Min = data.elementAt(i);
  33.     return Min;
  34.   }


Agregar una Variable a los vectores de la clase...
Código Java:
Ver original
  1. int addVble(Graphics g, String nVble, double[] aX, double[] aY, Color VbleColor, float zDepth, boolean bVisible){
  2.   //Agrega una variable a Graficar, llamada nVble, de Color VbleColor y Grosor zDepth
  3.     if (nVector.contains(nVble)) throw new RuntimeException("La Variable ya existe");
  4.     if(aX.length != aY.length) throw new RuntimeException("Tallas diferentes");
  5.     if(aX.length == 0||aY.length == 0) throw new RuntimeException("Arreglos de datos vacíos");
  6.     Graphics2D g2 = (Graphics2D)g;
  7.  
  8.     //Agrega el Mínimo y el Máximo valor de los Arreglos aX y aY a los Vectores xMin, XMax, yMin y yMax
  9.     xMin.add(getMin(aX));
  10.     xMax.add(getMax(aX));
  11.     yMin.add(getMin(aY));
  12.     yMax.add(getMax(aY));
  13.     gVector.add(g2);
  14.     nVector.add(nVble);
  15.     Double[] vX = double_Double(aX); //Convierte el Arreglo double vX a Vector Double vX
  16.     Double[] vY = double_Double(aY); //Convierte el Arreglo double vY a Vector Double vY
  17.     xVector.add(vX);
  18.     yVector.add(vY);
  19.     cVector.add(VbleColor);
  20.     dVector.add(zDepth);
  21.     vVector.add(bVisible);
  22.  
  23.     //Halla el Mínimo Valor xMin y yMin y el Máximo valor de xMax y yMax
  24.     MinX = getMin(xMin);
  25.     MaxX = getMax(xMax);
  26.     MinY = getMin(yMin);
  27.     MaxY = getMax(yMax);
  28.     return nVector.size();
  29.   }

Borrar una variable de los vectores...
Código Java:
Ver original
  1. int delVble(String nVble){
  2.   //Elimina una variable a Graficar llamada nVble
  3.     if (!nVector.contains(nVble)) throw new RuntimeException("La Variable no existe");
  4.     int Indice = nVector.indexOf(nVble);
  5.     xMin.remove(Indice);
  6.     xMax.remove(Indice);
  7.     yMin.remove(Indice);
  8.     yMax.remove(Indice);
  9.     gVector.remove(Indice);
  10.     nVector.remove(Indice);
  11.     xVector.remove(Indice);
  12.     yVector.remove(Indice);
  13.     cVector.remove(Indice);
  14.     dVector.remove(Indice);
  15.     vVector.remove(Indice);
  16.  
  17.     //Halla el Mínimo Valor xMin y yMin y el Máximo valor de xMax y yMax
  18.     MinX = getMin(xMin);  
  19.     MaxX = getMax(xMax);
  20.     MinY = getMin(yMin);
  21.     MaxY = getMax(yMax);
  22.     return nVector.size();
  23.   }


ACA ESTA La DUDA FUERTE
Método grafica..lo que hace es graficar u ocultar las lineas de alguna variable indicada en la variable Indice... g2.setXORMode(getBackground()); Por ejemplo al tratar de borrar una línea me deja unos punticos, es decir, no la borra toda...
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.     Color color = cVector.elementAt(Indice);
  5.     double[] aX = Double_double(xVector.elementAt(Indice));
  6.     double[] aY = Double_double(yVector.elementAt(Indice));
  7.     g2.setColor(color);
  8.     g2.setStroke(new BasicStroke(zDepth));
  9.     if (Oper.equals("Hide")){
  10.       g2.setXORMode(getBackground());
  11.     }
  12.     if (Oper.equals("View")){
  13.       g2.setPaintMode();
  14.     }
  15.     if (aX.length == 1){
  16.       g2.drawLine ((int)aX[0], (int)aX[0], (int)aY[0], (int)aY[0]);
  17.     } else {
  18.       for (int j = 0;j<aY.length-1;j++){
  19.         g2.drawLine ((int)aX[j], (int)aY[j], (int)aX[j+1], (int)aY[j+1]);
  20.       }
  21.     }
  22.     g.drawImage(GrafImagen, PosX, PosX, this);
  23.     //repaint();
  24.   }

Aca está la manera en que uso la clase...
Código Java:
Ver original
  1. public void paint( Graphics g ) {
  2.     GTrama MisGraficos = new GTrama(10,10,400,400);
  3.     double misT[] = {100,120,140,160,180,200,220,240};
  4.     double misX[] = {110,120,230,140,150,160,270,180};
  5.     double misY[] = {140,55,90,200,140,124,210,60};
  6.     double misZ[] = {125,300,170,150,110,110,200,100};
  7.     MisGraficos.addVble(g ,"a", misT, misX, Color.RED, (float)1, true);
  8.     MisGraficos.addVble(g ,"b", misT, misY, Color.GREEN, (float)1.1,true);
  9.     MisGraficos.addVble(g ,"c", misT, misZ, Color.BLUE, (float)1.2, true);
  10.     MisGraficos.ViewAll(g );
  11.   }

Por favor si aún no se entiende mi código por favor me avisan
__________________
Jose Luis Bernal Zambrano
Please response to:
[email protected]

Última edición por joseluisbz; 15/05/2010 a las 22:48
  #5 (permalink)  
Antiguo 15/05/2010, 23:59
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: setXORMode, setPaintMode, Borrar una gráfica de muchas

Hola:

En general borrar pintando encima es bastante complejo, precisamente por lo que te está sucediendo, se quedan puntitos sin borrar.

Si quieres hacerlo así, tienes que asegurarte muy mucho de que los puntos x,y que borras son exactamente los que pintas, haciendo exactamente las mismas cuentas o guardándolos en algún sitio para borrarlos después sin necesidad de calcularlos.

El xor mode presenta además otro problema. Imagina que pintas en modo normal el mismo pixel dos veces, porque han salido dos puntos x,y distintos pero al redondearlos, caen en el mismo pixel

(1.2, 2.3) ---> se pinta en pixel 1,2
(1.3, 2.4) ---> se pinta también en pixel 1,2

Como es modo de pintado normal, el punto queda pintado. Ahora quieres borrarlo echando las mismas cuentas y con xor. Vas a pintar dos veces con xor el mismo punto en pixels. El primer pintado te lo borrará, pero el segundo te lo volverá a pintar. Si estás echando exactamente las mismas cuentas para borrar (parece que sí), quizás los puntitos que te quedan son porque en el mismo pixel caen varios puntos distintos (un número par) de la gráfica.

No tengo muy claro lo que haces en el código, pero ¿no puedes borrar pintando del color del background?. Normalmente se borra con xor si se pinta también con xor, es una forma de respetar el fondo u otras gráficas que haya por debajo, pero hay que pintar también con xor, ya que si pintas de forma normal, "machacas" el fondo al pintar y al borrar con xor usando el mismo color, obtendrás directamente negro, no el fondo original que hubiera.

Es cualquier caso, es casi mejor borrar todo y repintarlo entero, o guardar cada trozo en un BufferedImage distinto y luego componerlos. Se supone que es menos eficiente, pero si el número de puntos de las gráficas que quieras pintar no es muy grande, puede no notarse diferencia y tienes que ver también si es más eficiente pintarlo todo cada vez o echar todas las cuentas que necesitarás para asegurarte del perfecto borrado.

Se bueno.
__________________
Apuntes Java
Wiki de Programación

Última edición por chuidiang; 16/05/2010 a las 00:16
  #6 (permalink)  
Antiguo 16/05/2010, 15:18
 
Fecha de Ingreso: febrero-2007
Ubicación: Barranquilla, Colombia
Mensajes: 181
Antigüedad: 17 años, 2 meses
Puntos: 3
Respuesta: setXORMode, setPaintMode, Borrar una gráfica de muchas

Cada gráfica tiene la información necesaria para borrarla

Nombre, que es único y con la cual se identifican las funciones o variables:
Código Java:
Ver original
  1. private Vector<String> nVector = new Vector<String>();

Color, el color con el cual se debe dibujar
Código Java:
Ver original
  1. private Vector<Color> cVector = new Vector<Color>();

Espesor de Línea:
Código Java:
Ver original
  1. private Vector<Float> dVector = new Vector<Float>();

Datos de la función en parejas tipo X y Y
Código Java:
Ver original
  1. private Vector<Double []> xVector = new Vector<Double []>();
  2. private Vector<Double []> yVector = new Vector<Double []>();

Información de tipo Graphic
Código Java:
Ver original
  1. private Vector<Graphics2D> gVector = new Vector<Graphics2D>();

Visibilidad: (No está implementada del todo) Es un atributo que permitiría en vez de usar setXORMode, borrar todas las gráficas y graficar todas las variables cuya visibilidad sea "true" y dejar ocultadas aquellas cuya visibilidad sea false.
Código Java:
Ver original
  1. private Vector<Boolean> vVector = new Vector<Boolean>();

La cuestión o duda está en que debe haber un orden para usar setXORMode?


Por otro lado esto se presenta al usar esos métodos...
Código Java:
Ver original
  1. public void paint( Graphics g ) {
  2.   GTrama MisGraficos = new GTrama(10,10,400,400);
  3.   double misT[] = {100,120,140,160,180,200,220,240};
  4.   double misX[] = {110,120,230,140,150,160,270,180};
  5.   double misY[] = {140,55,90,200,140,124,210,60};
  6.   double misZ[] = {125,300,170,150,110,110,200,100};
  7.   MisGraficos.addVble(g ,"a", misT, misX, Color.RED, (float)1, true);
  8.   MisGraficos.addVble(g ,"b", misT, misY, Color.GREEN, (float)1.1,true);
  9.   MisGraficos.addVble(g ,"c", misT, misZ, Color.BLUE, (float)1.2, true);
  10.   MisGraficos.ViewAll(g );
  11.   MisGraficos.HideVble(g,"a");
  12.   MisGraficos.delVble("c");
  13.   MisGraficos.HideAll(g);
  14. }
Como se puede ver, los métodos HideVble y/o HideAll, utilizan los mismos valores de espesor de su gráfica respectiva por lo que no deben quedar vestigios...
__________________
Jose Luis Bernal Zambrano
Please response to:
[email protected]
  #7 (permalink)  
Antiguo 16/05/2010, 21:52
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: setXORMode, setPaintMode, Borrar una gráfica de muchas

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.
__________________
Apuntes Java
Wiki de Programación
  #8 (permalink)  
Antiguo 17/05/2010, 11:50
 
Fecha de Ingreso: febrero-2007
Ubicación: Barranquilla, Colombia
Mensajes: 181
Antigüedad: 17 años, 2 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
  #9 (permalink)  
Antiguo 18/05/2010, 16:41
 
Fecha de Ingreso: febrero-2007
Ubicación: Barranquilla, Colombia
Mensajes: 181
Antigüedad: 17 años, 2 meses
Puntos: 3
Respuesta: setXORMode, setPaintMode, Borrar una gráfica de muchas

Si alguien me puede dar una mano por favor...
Bueno he puesto como tengo definida mi clase GTrama, se llama así porque hereda de Frame..
¿Habría alguna diferencia si la pongo a heredar de Canvas?
O si creo una nueva clase que se llame GCanvas que herede de canvas y que tenga un miembro de la clase GTrama

Código Java:
Ver original
  1. class GLienzo extends Canvas {
  2.   GTrama Trama;
  3.   GLienzo(GTrama gt){Trama = gt;}
  4.   public void update(Graphics g) { Trama.graficar(g); }
  5.   public void paint(Graphics g) { Trama.graficar(g); }
  6. }
Les estaré agradecido...
__________________
Jose Luis Bernal Zambrano
Please response to:
[email protected]

Última edición por joseluisbz; 18/05/2010 a las 16:57
  #10 (permalink)  
Antiguo 23/05/2010, 01:13
 
Fecha de Ingreso: febrero-2007
Ubicación: Barranquilla, Colombia
Mensajes: 181
Antigüedad: 17 años, 2 meses
Puntos: 3
De acuerdo Solucionado: setXORMode, setPaintMode, Borrar una gráfica de muchas

SOLUCIONADO

Primero describiré las clases:

Código Java:
Ver original
  1. class GTrama extends Frame {
  2.   private Vector<Color> cVector = new Vector<Color>();
  3.   private Vector<Boolean> vVector = new Vector<Boolean>();
  4.   private Vector<String> nVector = new Vector<String>();
  5.   private Vector<Double []> xVector = new Vector<Double []>();
  6.   private Vector<Double []> yVector = new Vector<Double []>();
  7.   private Vector<Double> xMin = new Vector<Double>();
  8.   private Vector<Double> yMin = new Vector<Double>();
  9.   private Vector<Double> xMax = new Vector<Double>();
  10.   private Vector<Double> yMax = new Vector<Double>();
  11.   private Vector<Float> dVector = new Vector<Float>();
  12.   private double MaxX, MinX, MaxY, MinY;
  13.  
  14.   GTrama(){
  15.   }
  16.   ...
  17. }

Métodos de conversión de tipo de datos de Double a double y viceversa de la clase GTrama
Código Java:
Ver original
  1. Double [] double_Double (double[] ddata){
  2.   //Convierte los datos de double a Double para operar con Vectores
  3.     Double[] Ddata = new Double[ddata.length];
  4.     for (int i=0;i<ddata.length;i++){
  5.       Ddata[i] = ddata[i];
  6.     }
  7.     return Ddata;
  8.   }
  9.  
  10.   double [] Double_double (Double[] Ddata){
  11.   //Restaura los datos de Double a double para operar con arreglos
  12.     double[] ddata = new double[Ddata.length];
  13.     for (int i=0;i<Ddata.length;i++){
  14.       ddata[i] = Ddata[i];
  15.     }
  16.     return ddata;
  17.   }

Métodos para hallar máximos y mínimos de la clase GTrama
Código Java:
Ver original
  1. double getMax(double[] data){
  2.   //Obtener el valor MAYOR del Arreglo
  3.     if (data.length <1) throw new RuntimeException("Arreglo de datos vacío");
  4.     double Max = data[0];
  5.     for (int i=0;i<data.length;i++){
  6.       if (Max < data[i])
  7.         Max = data[i];
  8.     }
  9.     return Max;
  10.   }
  11.   double getMin(double[] data){
  12.   //Obtener el valor MENOR del Arreglo
  13.     if (data.length <1) throw new RuntimeException("Arreglo de datos vacío");
  14.     double Min = data[0];
  15.     for (int i=0;i<data.length;i++){
  16.       if (Min > data[i])
  17.         Min = data[i];
  18.     }
  19.     return Min;
  20.   }
  21.   double getMax(Vector<Double> data){
  22.   //Obtener el valor MAYOR del Vector
  23.     if (data.size() <1) throw new RuntimeException("Arreglo de datos vacío");
  24.     double Max = data.elementAt(0);
  25.     for (int i=0;i<data.size();i++){
  26.       if (Max < data.elementAt(i))
  27.         Max = data.elementAt(i);
  28.     }
  29.     return Max;
  30.   }
  31.   double getMin(Vector<Double> data){
  32.   //Obtener el valor MENOR del Vector
  33.     if (data.size() <1) throw new RuntimeException("Arreglo de datos vacío");
  34.     double Min = data.elementAt(0);
  35.     for (int i=0;i<data.size();i++){
  36.       if (Min > data.elementAt(i))
  37.         Min = data.elementAt(i);
  38.     }
  39.     return Min;
  40.   }

Métodos de visualización y ocultamiento de las variables en los vectores en la clase GTrama
Código Java:
Ver original
  1. void ViewAll(){
  2.   //Muestra todas las graficas almacenadas en los vectores
  3.     for (int Indice = 0; Indice<nVector.size();Indice++){
  4.       vVector.set(Indice, true);
  5.     }
  6.   }
  7.   void HideAll(){
  8.   //Oculta todas las graficas almacenadas en los vectores
  9.     for (int Indice = 0; Indice<nVector.size();Indice++){
  10.       vVector.set(Indice, false);
  11.     }
  12.   }
  13.   void ViewVble(String nVble){
  14.   //Muestra la grafica de la Variable llamada nVble
  15.     if (!nVector.contains(nVble)) throw new RuntimeException("La Variable no existe");
  16.     int Indice = nVector.indexOf(nVble);
  17.     vVector.set(Indice, true);
  18.   }
  19.   void HideVble(String nVble){
  20.   //Oculta la grafica de la Variable llamada nVble
  21.     if (!nVector.contains(nVble)) throw new RuntimeException("La Variable no existe");
  22.     int Indice = nVector.indexOf(nVble);
  23.     vVector.set(Indice, false);
  24.   }

El método addVble ya no hace referencia ningún objeto Graphics, ni se almacena (no se necesita)
Código Java:
Ver original
  1. int addVble(String nVble, double[] aX, double[] aY, Color VbleColor, float zDepth, boolean bVisible){
  2.   //Agrega una variable a Graficar, llamada nVble, de Color VbleColor y Grosor zDepth
  3.     if (nVector.contains(nVble)) throw new RuntimeException("La Variable ya existe");
  4.     if(aX.length != aY.length) throw new RuntimeException("Tallas diferentes");
  5.     if(aX.length == 0||aY.length == 0) throw new RuntimeException("Arreglos de datos vacíos");
  6.     xMin.add(getMin(aX));
  7.     xMax.add(getMax(aX));
  8.     yMin.add(getMin(aY));
  9.     yMax.add(getMax(aY));
  10.     nVector.add(nVble);
  11.     Double[] vX = double_Double(aX);
  12.     Double[] vY = double_Double(aY);
  13.     xVector.add(vX);
  14.     yVector.add(vY);
  15.     cVector.add(VbleColor);
  16.     dVector.add(zDepth);
  17.     vVector.add(bVisible);
  18.  
  19.     MinX = getMin(xMin);
  20.     MaxX = getMax(xMax);
  21.     MinY = getMin(yMin);
  22.     MaxY = getMax(yMax);
  23.     return nVector.size();
  24.   }


El método delVble ya no hace referencia ningún objeto Graphics, ni se elimina (no existe)
Código Java:
Ver original
  1. int delVble(String nVble){
  2.   //Elimina una variable a Graficar llamada nVble
  3.     if (!nVector.contains(nVble)) throw new RuntimeException("La Variable no existe");
  4.     int Indice = nVector.indexOf(nVble);
  5.     xMin.remove(Indice);
  6.     xMax.remove(Indice);
  7.     yMin.remove(Indice);
  8.     yMax.remove(Indice);
  9.     nVector.remove(Indice);
  10.     xVector.remove(Indice);
  11.     yVector.remove(Indice);
  12.     cVector.remove(Indice);
  13.     dVector.remove(Indice);
  14.     vVector.remove(Indice);
  15.  
  16.     MinX = getMin(xMin);
  17.     MaxX = getMax(xMax);
  18.     MinY = getMin(yMin);
  19.     MaxY = getMax(yMax);
  20.     return nVector.size();
  21.   }


El nuevo objeto referente gráfico es de tipo BufferedImage
Código Java:
Ver original
  1. void PlotAll(BufferedImage bi){
  2.   //Grafica todas las variables Visibles almacenadas en los vectores
  3.     if (!nVector.isEmpty()){
  4.       for (int Indice = 0; Indice<nVector.size();Indice++){
  5.         if (vVector.elementAt(Indice)){
  6.           PlotVble(bi, Indice);
  7.         }
  8.       }
  9.     }
  10.   }

El nuevo objeto referente gráfico es de tipo BufferedImage
Código Java:
Ver original
  1. void PlotVble(BufferedImage bi, int Indice){
  2.   //Recarga una gráfica para mostrarla
  3.     Graphics2D g2d = bi.createGraphics();
  4.     float zDepth = dVector.elementAt(Indice);
  5.     Color color = cVector.elementAt(Indice);
  6.     double[] aX = Double_double(xVector.elementAt(Indice));
  7.     double[] aY = Double_double(yVector.elementAt(Indice));
  8.     g2d.setColor(color);
  9.     g2d.setStroke(new BasicStroke(zDepth));
  10.     g2d.setPaintMode();
  11.     if (aX.length == 1){
  12.       g2d.drawLine ((int)aX[0], (int)aX[0], (int)aY[0], (int)aY[0]);
  13.     } else {
  14.       for (int j = 0;j<aY.length-1;j++){
  15.         g2d.drawLine ((int)aX[j], (int)aY[j], (int)aX[j+1], (int)aY[j+1]);
  16.       }
  17.     }
  18.     g2d.dispose();
  19.   }

Forma de Uso
Código Java:
Ver original
  1. public class Graficador extends javax.swing.JFrame {
  2.     /** Creates new form Graficador */
  3.   GTrama MisGraficos;
  4.   public Graficador() {
  5.     super( "Dibujo de figuras en 2D" );
  6.     setVisible(true);
  7.     initComponents();
  8.     bImage = new  BufferedImage(super.getWidth(),super.getHeight(),BufferedImage.TYPE_INT_RGB);  
  9.   }
  10.  
  11.   public void paint(Graphics g) {
  12.     super.paint(g);
  13.     if (MisGraficos!=null){
  14.       MisGraficos.PlotAll(bImage);
  15.     }
  16.     g.drawImage(bImage, 0, 0, this);
  17.   }
  18.  
  19.    private void jbDibujarActionPerformed(java.awt.event.ActionEvent evt) {
  20.     dibujar();
  21.     repaint();
  22.    }

El método dibujar agrega las variables a los vectores y manipula su presentación
Código Java:
Ver original
  1. public void dibujar(){
  2.     // super.paint( Grafica );
  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("a", misT, misX, Color.RED, (float)1, false);
  11.     MisGraficos.addVble("b", misT, misY, Color.GREEN, (float)1,false);
  12.     MisGraficos.addVble("c", misT, misZ, Color.BLUE, (float)1, false);
  13.     MisGraficos.addVble("d", misT, misP, Color.LIGHT_GRAY, (float)2, false);
  14.     MisGraficos.addVble("e", misT, misQ, Color.DARK_GRAY, (float)2,false);
  15.     MisGraficos.ViewAll();
  16.     MisGraficos.ViewVble("e");
  17.     MisGraficos.ViewVble("d");
  18.   }

El botón jbDibujar llama al método dibujar que inicializa los vectores, luego del repaint, se pinta la información contenida en los vectores.

Gracias por su ayuda...
__________________
Jose Luis Bernal Zambrano
Please response to:
[email protected]

Etiquetas: arreglos, paint, setpaintmode, setxormode, vectores, graficos
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 07:36.