Вопрос

Я установил для своей JPanel значение GridLayout (6,6) с размером (600,600) В каждой ячейке сетки будет отображаться одно изображение разной ширины и высоты.Сначала изображение добавляется в JLabel, а затем JLabel добавляется в ячейки.

Как можно получить координаты изображений в ячейках, а не координаты ячеек?Пока что out выдает эти координаты, которые равны высоте и ширине, даже на экране изображения показаны в разных размерах.

например ,

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]
Это было полезно?

Решение

Отображаются ли ваши изображения в желаемом размере ?

я так думаю.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top