Как получить координату Gridlayout - PullRequest
0 голосов
/ 15 марта 2010

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

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

, например

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 Ответ

1 голос
/ 15 марта 2010

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

я так думаю.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...