如何获取Gridlayout的坐标

时间:2010-03-15 09:15:09

标签: java grid-layout

我将JPanel设置为GridLayout(6,6),尺寸为(600,600) 网格的每个单元格将显示具有不同宽度和高度的一个图片。 图片首先添加到JLabel,然后JLabel添加到单元格中。

如何检索单元格中图片的坐标而不是单元格的坐标?到目前为止,即使在屏幕上显示不同大小的图片,也会给出这些相等高度和宽度的坐标。

e.g。

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]

我使用GridLayout而不是gridBagLayout的原因是,我希望每张图片都有边界。如果我使用GridBagLayout,网格将根据图片大小进行扩展。 我希望网格大小为固定大小。

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());
}

编辑:我试过这个但没有工作: - (

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

如何获得这些输出?

java.awt.Rectangle[x=300,y=100,width=50,height=40]
java.awt.Rectangle[x=400,y=400,width=60,height=50]

1 个答案:

答案 0 :(得分:1)

您的图片是否以所需尺寸显示?

我是这么认为的。

无论如何,根据您的代码似乎,我猜它会获得标签大小,而不是图标大小。与任何JComponent一样,JLabel实际上是Container实例。因此,它们的大小取决于约束。因此,在GridLayout中,JLabel将具有单元格的大小,而包含的Icon将具有图像的大小。

作为一个结果,要获得图像大小,您必须调用((JLabel) component).getIcon()才能检索有效的图像尺寸。