Pregunta

Me puse mis JPanel a GridLayout (6,6), la dimensión (600600) Cada celda de la cuadrícula mostrará uno imágenes con diferentes anchuras y alturas. La imagen primero añadir a un JLabel, y la JLabel después se añadió a las células.

¿Cómo se puede recuperado la coordenada de las imágenes en las células y no las coordenadas de las células? Hasta ahora, la salida dar a estas coordenadas, que igual altura y anchura, incluso en la pantalla las imágenes mostraron en diferentes tamaños.

por ejemplo.

java.awt.Rectangle[x=100,y=100,width=100,height=100]
java.awt.Rectangle[x=200,y=100,width=100,height=100]
java.awt.Rectangle[x=300,y=100,width=100,height=100]

La razón por la que he utilizado en lugar de GridLayout GridBagLayout es que, quiero que cada uno de imágenes tienen límite. Si uso GridBagLayout, la red se ampliará de acuerdo con el tamaño de la imagen. Quiero tamaño de la cuadrícula a ser de tamaño fijo.

JPanel pDraw = new JPanel(new GridLayout(6,6));
pDraw.setPreferredSize(new Dimension(600,600));

for (int i =0; i<(6*6); i++)
{           
   //get random number for height and width of the image
   int x = rand.nextInt(40)+(50);
   int y = rand.nextInt(40)+(50);   

   ImageIcon icon = createImageIcon("bird.jpg");    

   //rescale the image according to the size selected
   Image img = icon.getImage().getScaledInstance(x,y,img.SCALE_SMOOTH);         
   icon.setImage(img ); 
   JLabel label = new JLabel(icon);
   pDraw.add(label);    
}

for(Component component:components)
{
   //retrieve the coordinate
   System.out.println(component.getBounds());
}

Editado: He intentado esto pero no funciona: - (

for(Component component: pDraw.getComponents()){
  System.out.println(((JLabel)component).getIcon());
}

¿Cómo puedo obtener una salida como estos?

java.awt.Rectangle[x=300,y=100,width=50,height=40]
java.awt.Rectangle[x=400,y=400,width=60,height=50]
¿Fue útil?

Solución

¿Sus imágenes aparecen en el tamaño deseado?

Creo que sí.

De todos modos, por lo que el código parece hacer, supongo que obtiene el tamaño de las etiquetas, y no el tamaño iconos. JLabel, como cualquier JComponent, son en realidad instancia de contenedores. Como tal, su tamaño depende de las limitaciones. Como consecuencia, en un GridLayout, un JLabel tendrá el tamaño de una célula, mientras que el Icono contenida tendrá el tamaño de la imagen.

Como consquence, para obtener tamaño de la imagen, usted tiene que llamar ((JLabel) component).getIcon() a ser capaz de recuperar la dimensión efectiva de la imagen.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top