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

Cuadricula en java [Vector]

Estas en el tema de Cuadricula en java [Vector] en el foro de Java en Foros del Web. Os cuento necesito crear una cuadricula en Java. Se como crear la cuadricula con el drawRect y con dos for. Mi problema es que quiero ...
  #1 (permalink)  
Antiguo 12/05/2012, 12:02
 
Fecha de Ingreso: diciembre-2011
Mensajes: 30
Antigüedad: 12 años, 4 meses
Puntos: 0
Cuadricula en java [Vector]

Os cuento necesito crear una cuadricula en Java. Se como crear la cuadricula con el drawRect y con dos for. Mi problema es que quiero crear un vector/array de esos cuadrados.

A ver si me explico que cada objeto rectangulo ocupe una componente de dicho vector. ¡Que no se como crear! Para luego pintar cada cuadradito de forma independiente.

El problema es que no se como crear el vector de objetos Graphics.

PD:No se si me estoy explicando muy bien.

Muchas gracias :D.
  #2 (permalink)  
Antiguo 12/05/2012, 16:57
 
Fecha de Ingreso: diciembre-2011
Mensajes: 30
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: Cuadricula en java [Vector]

He conseguido avanzar con el código aquí esta:

Código Javascript:
Ver original
  1. import java.awt.*;
  2. import javax.swing.*;
  3.  
  4. /**
  5.  *
  6.  * @author Pacheco
  7.  */
  8.  
  9.     class Cuadricula extends JComponent{
  10.        
  11.            int posicionx=0;
  12.            int posiciony=0;
  13.  
  14.  
  15.          public Cuadricula(int x,int y){
  16.  
  17.              posicionx=x;
  18.              posiciony=y;
  19.  
  20.          }
  21.  
  22.         public void paintComponent (Graphics g){
  23.  
  24.             super.paintComponent(g);
  25.             g.drawRect(posicionx,posiciony,60,60);
  26.  
  27.         }
  28.     }
  29.  
  30. public class IconosVI {
  31.  
  32.     public static void main (String [] args){
  33.  
  34.         JFrame ventana=new JFrame("V1");
  35.         ventana.setSize(400, 400);
  36.  
  37.         Cuadricula casillas[]=new Cuadricula[5];
  38.  
  39.         casillas[1]=new Cuadricula(0,0);
  40.  
  41.         casillas[3]=new Cuadricula(60,60);
  42.  
  43.         ventana.getContentPane().add(casillas[1]);
  44.         ventana.getContentPane().add(casillas[3]);
  45.  
  46.  
  47.         ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  48.         ventana.setVisible(true);
  49.     }
  50.  
  51. }

El problema es que solo consigo que me dibuje una casilla (la última que pongo en el código). ¿Porque? He probado con repaint pero no consigo que me salgan 2 o 3 (más de una) cuadricula.

Gracias :D.
  #3 (permalink)  
Antiguo 12/05/2012, 18:50
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Cuadricula en java [Vector]

Buenas,

Java y los layouts pueden ser una pesadilla. El problema es múltiple:

1º - Tienes que poner el layout del contenido como absoluto (se hace pasando null al método setLayout)

2º - Tienes que indicar que el componente Cuadricula empiece en los puntos x,y y que tengan como tamaño width+1 y height+1 (método setBounds). Tiene que ser más 1, o el componente no dibujará bien la línea inferior y derecha.

3º - Tienes que llamar a drawRect con las coordenadas de comienzo 0,0 (esto es porque el componente se situa anteriormente en la posición deseada ya).

Código Java:
Ver original
  1. import java.awt.Graphics;
  2. import javax.swing.JComponent;
  3. import javax.swing.JFrame;
  4.  
  5. /**
  6.  *
  7.  * @author Pacheco
  8.  */
  9.  
  10.  
  11.          
  12.     class Cuadricula extends JComponent{
  13.        
  14.         final int height = 60;
  15.         final int width = 60;
  16.         int posicionx=0;
  17.         int posiciony=0;
  18.  
  19.  
  20.          public Cuadricula(int x,int y){            
  21.              setBounds(x,y,width+1, height+1);  
  22.              
  23.          }
  24.  
  25.     @Override
  26.         public void paintComponent (Graphics g){      
  27.          
  28.             super.paintComponent(g);          
  29.             g.drawRect(0,0,width,height);
  30.         }
  31.     }
  32.  
  33. public class IconosVI {
  34.  
  35.     public static void main (String [] args){
  36.  
  37.         JFrame ventana=new JFrame("V1");
  38.         ventana.setSize(400, 400);
  39.  
  40.         Cuadricula casillas[] = new Cuadricula[5];
  41.  
  42.         casillas[1] = new Cuadricula(0, 0);
  43.         casillas[3] = new Cuadricula(60, 60);
  44.         ventana.getContentPane().add(casillas[1]);
  45.          ventana.getContentPane().add(casillas[3]);
  46.      
  47.        
  48.        
  49.         ventana.getContentPane().setLayout(null);
  50.          
  51.        
  52.  
  53.         ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  54.         ventana.setVisible(true);
  55.        
  56.        
  57.        
  58.     }
  59.  
  60. }
  #4 (permalink)  
Antiguo 13/05/2012, 04:07
 
Fecha de Ingreso: diciembre-2011
Mensajes: 30
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: Cuadricula en java [Vector]

Muchas gracias por las respuestas. :D Lo he entendido perfectamente (menos lo que hay que sumar 1 que no entiendo el porque). Solo que ahora tengo un problema. Para realizar todo el programa necesito saber que casilla clico con el ratón (para poder pintarla). Por tanto cada casilla tiene que tener unas coordenadas distintas. No puedo hacer que cada casilla empiece en (0,0). Porque necesito saber que casilla clico según las cordenadas del ratón y de dicha casilla. Esa era la única idea que se me había ocurrido para realizar la disticion entre casillas y ratón.

¿Me explico?

Lo que he conseguido es que funcione pero lo veo algo rudimentario no... Porque no guardo las cordenadas en si del draw sino del objeto creado en cuestión.

Código Javascript:
Ver original
  1. import java.awt.Graphics;
  2. import javax.swing.JComponent;
  3. import javax.swing.JFrame;
  4. /**
  5. *
  6. * @author Pacheco
  7. */
  8.  
  9. class Cuadricula extends JComponent{
  10.    
  11.     int height=0;
  12.     int width=0;
  13.     int cordenadax;
  14.     int cordenaday;
  15.    
  16.     public Cuadricula(int x,int y,int h,int w){
  17.  
  18.         cordenadax=x;
  19.         cordenaday=y;
  20.         height=h;
  21.         width=w;
  22.  
  23.         setBounds(x,y,h+1,w+1);
  24.    
  25.     }
  26.  
  27. @Override
  28.  
  29. public void paintComponent (Graphics g){
  30.     super.paintComponent(g);
  31.     g.drawRect(0,0,width,height);
  32. }
  33. }
  34.  
  35. class IconosVI {
  36.    
  37.     public static void main (String [] args){
  38.  
  39.     JFrame ventana=new JFrame("V1");
  40.     ventana.setSize(400, 400);
  41.  
  42.  
  43.  
  44.     Cuadricula casillas[] = new Cuadricula[5];
  45.     casillas[1] = new Cuadricula(0, 0,60,60);
  46.     casillas[3] = new Cuadricula(60, 60,20,20);
  47.  
  48.     System.out.print(casillas[3].cordenadax+" ");
  49.     System.out.print(casillas[3].cordenaday);
  50.  
  51.     System.out.println();
  52.  
  53.     System.out.print(casillas[1].cordenadax+" ");
  54.     System.out.print(casillas[1].cordenaday);
  55.  
  56.    
  57.     ventana.getContentPane().add(casillas[3]);
  58.     ventana.getContentPane().add(casillas[1]);
  59.     ventana.getContentPane().setLayout(null);
  60.     ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  61.     ventana.setVisible(true);
  62. }
  63. }

¿Esta bien? ¿O hay una mejor manera de hacerlo?

Muchísimas gracias :D.

Última edición por Pacheco_1990_2; 13/05/2012 a las 04:22
  #5 (permalink)  
Antiguo 13/05/2012, 04:34
 
Fecha de Ingreso: diciembre-2011
Mensajes: 30
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: Cuadricula en java [Vector]

Y también me doy cuenta de que no se como pintar el interior de cada cuadrado de manera diferente. Las lineas tienen que quedar negras y el interior azul por ejemplo.

¿?¿?¿

Si alguien pudiera ayudarme.

Gracias :D.
  #6 (permalink)  
Antiguo 13/05/2012, 06:04
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Cuadricula en java [Vector]

Así está bien, aunque siempre hay maneras distintas de realizar las cosas.

El +1 (pixel), es porque si lo pruebas sin él, te das cuenta de que no te dibuja dos de las líneas y es porque no cabe el dibujo en el componente, porque es como si te contase el ancho y alto a partir de +1 pixel (que es que se utiliza para dibujar las líneas superior e izquierda).


Sobre lo de dibujar por dentro, es sencillo:


Código Java:
Ver original
  1. g.setColor(Color.Red); //Pones el color que desees
  2. g.fillRect(0,0,width,height);
  3. g.setColor(Color.Black); //Vuelves al anterior
  #7 (permalink)  
Antiguo 13/05/2012, 12:23
 
Fecha de Ingreso: diciembre-2011
Mensajes: 30
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: Cuadricula en java [Vector]

¿Como podria hacer para que cada cuadrado tuviera unas cordenadas diferentes? Quiero decir... El primero 0,0 el segundo 0,60 y asi sucesivamente con todos.

Y no que cada uno empezará en 0,0 es que lo estoy provando y no hay manera de que me los dibuje si no pongo ese setBounds que tu me has puesto...

Gracias :D.
  #8 (permalink)  
Antiguo 14/05/2012, 05:14
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Cuadricula en java [Vector]

Si lo que quieres es realizar una especie de cuadrícula, puedes usar un layout específico como es el GridLayout o el el GridBagLayout (el más complicado, pero más completo).

Te dejo este enlace:
http://inforux.wordpress.com/2009/03...on-gridlayout/

Si tienes dudas, aquí estamos.

Saludos.
  #9 (permalink)  
Antiguo 20/05/2012, 08:57
 
Fecha de Ingreso: diciembre-2011
Mensajes: 30
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: Cuadricula en java [Vector]

Os cuento he implementado el GridLayout.

setLayout(new GridLayout(alto, ancho));

Mi duda es cuando hago el draw.

g.drawRect(x,y,width,height);

¿Las cordenadas x ,y de que me sirven? Si las pongo a 0,0 me funcionan pero si lo hago con el valor de las cordenadas que tienen cada cuadrado no me funciona.

Saludos¡¡
  #10 (permalink)  
Antiguo 20/05/2012, 09:14
 
Fecha de Ingreso: diciembre-2011
Mensajes: 30
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: Cuadricula en java [Vector]

Y otra cosa cuando le pongo a un Boder a el JPanel que contiene el GridLayout y toda la cuadricula. Me queda la cuadricula sin tocar los bordes en plan 10 pixeles y no se porque... ¿Alguna idea de porque puede ser?

Etiquetas: cuadricula
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 16:19.