Ver Mensaje Individual
  #5 (permalink)  
Antiguo 26/06/2014, 13:11
Avatar de freddy31DA
freddy31DA
 
Fecha de Ingreso: junio-2012
Mensajes: 84
Antigüedad: 11 años, 11 meses
Puntos: 2
Respuesta: dibujar rectángulos con listas enlazadas simples

¿Estás añadiendo elementos siempre en las mismas coordenadas? Si es así, te estará pintando n rectángulos uno encima de otro y sólo verás 1, ya que estás dibujando una y otra vez lo mismo.

Idem con tu bucle de 10 que pinta 5 rectangulos. Si dibujas los mismos 5 rectangulos 10 veces, verás 5 rectangulos.


Se bueno.[/QUOTE]

Hola buenas, Al momento de registrar coordenadas lo que ago es agregar un nuevo elemento a lista. La primera vez es así: en la clase lista:
Código Java:
Ver original
  1. public void agregar_elemento(int x, int y, int a, int h){
  2.                     Elemento nuevo = new Elemento();
  3.                     nuevo.setX(x);
  4.                     nuevo.setY(y);
  5.                     nuevo.setA(a);
  6.                     nuevo.setH(h);
  7.                     if(cabecera==null){
  8.                         cabecera = nuevo;
  9.                     }
Por primer vez se registran las cordenadas: de la presentación:
Código Java:
Ver original
  1. public static void registrar(){
  2.            
  3.             int x, y, a, h;
  4.             x = 100;
  5.             y = 40;
  6.             a = 60;
  7.             h = 55;
  8.             obj.agregar_elemento(x, y, a, h);
  9.             System.out.println("Elemento agregado correctamente.");
  10.         }
Con esos valores, la cordenada más importante es la X, en el segundo registro multiplico la variable X por 2 que se ve en la clase lista en el metodo registrar:
Código Java:
Ver original
  1. if(cabecera==null){
  2.                         cabecera = nuevo;
  3.                     }else{
  4.                         nuevo.setX(x*2);
Bueno con está coordena ya con otro valor el cuadrado se va a desplazar a la derecha ya tendria valor 200 a la coordenada Y no le muevo nada por que es la que mantiene todos en forma horizontal..


En el ciclo for si así es E TENIDO UN ERROR LÓGICO en fin si ago esto:
y lo arreglo ya funciona el ciclo. Crea una variable x este su valor se le suma 100;

Código Java:
Ver original
  1. public void paint(Graphics nuevo){
  2.  
  3.                     super.paintComponent(nuevo); //llama al metodo paint.
  4.                     this.setBackground(Color.WHITE);
  5.                     int x = 0;
  6.                     for (int i = 0; i < 10; i++) {
  7.                                 x = x + 100;
  8.                                 nuevo.setColor(Color.RED);
  9.                                 nuevo.fillRect(x, 90, 50, 60);
  10.                                
  11.                     }
  12.                  
  13.             }
Con esto logro hacer que se dibujen los 100 cuadrados
[] [] [] [] [] [] [] [] [] []

Ahora la solución que e planteado a sido ya no tomar el valor original que viene de la clase presentación de la cordenada X. e creado una variable llamada guarda que se inicia en 0 está a incrementar de 100 en 100. Además modifique el ingrese de datos comun que usaba ahora inserto asi solo para este caso. :D

Código Java:
Ver original
  1. public void agregar_elemento(int x, int y, int a, int h){
  2.                     Elemento nuevo = new Elemento();
  3.                    
  4.                     if(cabecera==null){
  5.                             guarda = 100;
  6.                             nuevo.setX(guarda);
  7.                             nuevo.setY(y);
  8.                             nuevo.setA(a);
  9.                             nuevo.setH(h);
  10.                         cabecera = nuevo;
  11.                     }else{
  12.                          guarda = guarda + 100;
  13.                        
  14.                          nuevo.setX(guarda);
  15.                          nuevo.setY(y);
  16.                          nuevo.setA(a);
  17.                          nuevo.setH(h);
  18.                          
  19.                         Elemento p = cabecera;
  20.  
  21.                         while(p.siguiente!=null){
  22.                             p = p.siguiente;
  23.                         }
  24.                         p.siguiente = nuevo;
  25.                     }
  26.                 }
La variable guarda está creada al inicio de la clase por aquí
Código Java:
Ver original
  1. public class Lista extends JPanel{
  2.     Elemento cabecera;  
  3.     static int guarda = 0;  
  4.     public Lista(){
  5.         cabecera = null;
  6.        }
  7. ....................

Al final queda toda la clase lista.java así por el momento me falta agregar nombres a los elementos eso ya es facil.

Código Java:
Ver original
  1. package listassimples2d_freddyalc;
  2. import java.awt.Color;
  3. import java.awt.Graphics;
  4. import javax.swing.JPanel;
  5.  
  6. public class Lista extends JPanel{
  7.     Elemento cabecera;  
  8.     static int guarda = 0;  
  9.     public Lista(){
  10.         cabecera = null;
  11.        }
  12.                 public void agregar_elemento(int x, int y, int a, int h){
  13.                     Elemento nuevo = new Elemento();
  14.                    
  15.                     if(cabecera==null){
  16.                             guarda = 100;
  17.                             nuevo.setX(guarda);
  18.                             nuevo.setY(y);
  19.                             nuevo.setA(a);
  20.                             nuevo.setH(h);
  21.                         cabecera = nuevo;
  22.                     }else{
  23.                          guarda = guarda + 100;
  24.                        
  25.                          nuevo.setX(guarda);
  26.                          nuevo.setY(y);
  27.                          nuevo.setA(a);
  28.                          nuevo.setH(h);
  29.                          
  30.                         Elemento p = cabecera;
  31.  
  32.                         while(p.siguiente!=null){
  33.                             p = p.siguiente;
  34.                         }
  35.                         p.siguiente = nuevo;
  36.                     }
  37.                 }
  38.    
  39.                 public void mostrar_Cordenadas(){
  40.                         Elemento p = cabecera;
  41.                         String coordenadas="";
  42.                         while(p!=null){
  43.                            
  44.                             coordenadas += "x = "+ p.getX()+" y = "+ p.getY()+" ancho = "+p.getA()+" altura = "+p.getH()+"\n";
  45.                           p = p.siguiente;
  46.                      }
  47.                         System.out.println(coordenadas);
  48.                 }
  49.                    
  50.    
  51.        public void paint(Graphics nuevo){
  52.                
  53.                
  54.                
  55.                     super.paintComponent(nuevo); //llama al metodo paint.
  56.                     this.setBackground(Color.WHITE);
  57.                     Elemento p = cabecera;
  58.                     while(p!=null){
  59.                              nuevo.setColor(Color.RED);
  60.                              nuevo.fillRect(p.getX(), p.getY(), p.getA(), p.getH());
  61.                           p = p.siguiente;
  62.                     }
  63.                  
  64.             }
  65.  
  66.  
  67.        
  68.         }
La clase presentación agregue al menu la opcion de ver cordenadas.
queda así.
Código Java:
Ver original
  1. package listassimples2d_freddyalc;
  2. import java.awt.Color;
  3. import javax.swing.JFrame;
  4. import java.util.Scanner;
  5. public class Presentacion {
  6.     static Scanner leer = new Scanner(System.in);
  7.     static Lista  obj = new Lista();
  8.          
  9.  
  10.         public static int menu(){
  11.             int opc;
  12.             do{
  13.            System.out.println("---------------------- LISTAS MENU PRINCIPAL ----------------------");
  14.            System.out.println("Ingrese [1] uno para registrar un elemento");
  15.            System.out.println("Ingrese [2] para mostrar elementos.");
  16.            System.out.println("Ingrese [3] para mostrar cordenadas.");
  17.            System.out.println("Ingrese [4] para SALIR");
  18.            System.out.print("\n >> ");
  19.            opc = leer.nextInt();
  20.            
  21.             }while(opc<0 || opc>4);
  22.            return opc;
  23.         }
  24.        
  25.         public static void registrar(){
  26.            
  27.             int x, y, a, h;
  28.             x = 100;
  29.             y = 40;
  30.             a = 60;
  31.             h = 55;
  32.             obj.agregar_elemento(x, y, a, h);
  33.            
  34.            
  35.             System.out.println("Elemento agregado correctamente.");
  36.         }
  37.         public static void mostrar(){
  38.               JFrame marco = new JFrame("Listas representación Grafica");  
  39.               marco.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  40.              
  41.              
  42.               obj.setBackground(Color.WHITE);
  43.               marco.add(obj);
  44.               marco.setSize(1000, 500);
  45.               marco.setVisible(true);
  46. //            System.out.println(obj.mostrar_Elementos());
  47.         }
  48.    
  49.             public static void    mostrar_coordenadas(){
  50.                     obj.mostrar_Cordenadas();
  51.             }
  52.     public static void main(String[] args) {
  53.        
  54.            int opc;
  55.            do{
  56.                opc = menu();
  57.                
  58.                switch(opc){
  59.                    case 1:
  60.                        
  61.                        registrar();
  62.                        
  63.                        break;
  64.                        
  65.                    case 2:
  66.                        
  67.                        mostrar();
  68.                        break;
  69.                    case 3:
  70.                         mostrar_coordenadas();
  71.                        break;
  72.                        
  73.                    case 4:System.exit(0);
  74.                
  75.                }
  76.            
  77.            }while(opc!=4);
  78.        
  79.     }
  80. }
aquí dejo una captura.
http://i61.tinypic.com/2s98xgy.png


Solo me queda agradecerte chuidiang. Además de hacerme ver los errores lógicos que e tenido.
Voy agregar nuevas cosas funciona muy bien