سؤال

قمت بتعيين 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]
هل كانت مفيدة؟

المحلول

هل تظهر صورك في الحجم المطلوب؟

اظن ذلك.

على أي حال، من ما يبدو أن الكود الخاص بك يفعله، أعتقد أنه يحصل على حجم الملصقات وليس حجم الرموز. Jlabel، مثل أي jComponent، هي في الواقع حالة حاوية. على هذا النحو، يعتمد حجمها على القيود. نتيجة لذلك، في Gridlayout، سيكون لدى Jlabel حجم خلية، في حين أن الأيقونة الواردة سيكون حجم الصورة.

ككونسوتي، للحصول على حجم الصورة، يجب عليك الاتصال ((JLabel) component).getIcon() لتكون قادرا على استرداد بعد صورة فعالة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top