Frage

Ich habe meine JPanel auf Gridlayout (6,6), mit Dimension (600600) Jede Zelle des Gitters wird man Bilder mit unterschiedlichen Breiten und Höhen anzuzeigen. Das Bild hinzufügen, zuerst zu einem JLabel und die JLabel dann zu den Zellen gegeben.

Wie kann die Koordinaten der Bilder in den Zellen wiedergewonnen und die Koordinate nicht von Zellen? Bisher ist die aus gibt diese, die gleiche Höhe koordinieren und Breite auch auf dem Bildschirm, die in verschiedenen Größen zeigten Bilder.

z.

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]

Der Grund, warum ich Gridlayout statt GridBagLayout verwendet wird, ist, dass ich mag, dass jedes Bild Grenze haben. Wenn ich GridBagLayout verwenden, wird das Raster entsprechend der Bildgröße erweitern. Ich möchte Rastergröße in fix Größe sein.

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

EDITED: Ich habe versucht, dies aber nicht funktioniert: - (

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

Wie kann ich eine Ausgabe wie diese bekommen?

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

Lösung

Sie Ihre Bilder in der gewünschten Größe angezeigt werden?

ich denke so.

Wie auch immer, von dem, was Ihr Code zu tun scheint, ich denke, es wird die Etiketten der Größe und nicht die Größe Ikonen. JLabel, wie jede JComponent, ist in der Tat Container-Instanz. Als solches hängt ihre Größe auf Einschränkungen. Als Folge in einem Gridlayout, hat eine JLabel die Größe einer Zelle, während die enthaltene Symbol wird die Größe des Bildes hat.

Als consquence, die Bildgröße zu erhalten, müssen Sie ((JLabel) component).getIcon() anrufen zu können, effektive Bild Dimension abgerufen werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top