2010-03-15 5 views
0

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

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

например.

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

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

Я так считаю.

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

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

Смежные вопросы