0

JPanel を GridLayout (6,6)、ディメンション (600,600) に設定しました。グリッドの各セルには、幅と高さが異なる 1 つの画像が表示されます。画像は最初に 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]

gridBagLayout の代わりに GridLayout を使用した理由は、各写真に境界線を持たせたいからです。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]
4

1 に答える 1

1

画像は目的のサイズで表示されますか?

そう思います。

とにかく、あなたのコードのように見えることから、アイコンのサイズではなく、ラベルのサイズを取得していると思います。JLabel は、他の JComponent と同様に、実際には Container インスタンスです。そのため、それらのサイズは制約に依存します。結果として、GridLayout では、JLabel はセルのサイズになり、含まれる Icon は画像のサイズになります。

((JLabel) component).getIcon()結果として、画像サイズを取得するには、有効な画像サイズを取得できるように呼び出す必要があります。

于 2010-03-15T09:25:17.230 に答える