Как да получите координатите на Gridlayout

Зададох своя 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]

person Jessy    schedule 15.03.2010    source източник


Отговори (1)


Вашите изображения показват ли се в желания размер?

така мисля.

Както и да е, от това, което кодът ви изглежда прави, предполагам, че получава размера на етикетите, а не размера на иконите. JLabel, като всеки JComponent, всъщност е екземпляр на контейнер. Като такъв техният размер зависи от ограниченията. В резултат на това в GridLayout JLabel ще има размера на клетка, докато съдържащата се икона ще има размера на изображението.

Като следствие, за да получите размер на изображението, трябва да извикате ((JLabel) component).getIcon(), за да можете да извлечете ефективно измерение на изображението.

person Riduidel    schedule 15.03.2010