如何在单元格边界内显示图像

时间:2010-03-08 01:27:34

标签: java image gridbaglayout

如何在单元格边界内放置图像?

我的意思是不占用其他细胞的空间? 在下面的代码中,选择随机单元格来显示图像。一个单元格中的一个图像。 问题是,图像似乎也需要其他细胞。 alt text http://www.freeimagehosting.net/image.php?9f84119a63.jpg

...
setPreferredSize(new Dimension(600,600)); 
final int ROWS = 6;
final int COLS = 6;
final int IMAGES = 10;

setLayout(new GridBagLayout());
GridBagConstraints gc = new GridBagConstraints();
gc.weightx = 1d; 
gc.weighty = 1d;
gc.insets = new Insets(0, 0, 0, 0);//top, left, bottom, and right 
gc.fill = GridBagConstraints.NONE; 

JLabel[][] label = new JLabel[ROWS][COLS];          
Random rand = new Random();

// fill the panel with labels
for (int i=0;i<IMAGES;i++){
   ImageIcon icon = createImageIcon("myImage.jpg");
   int r, c;
   do{    
      //pick random cell which is empty to avoid overlap image in the same cell
     r = (int)Math.floor(Math.random() * ROWS);
     c = (int)Math.floor(Math.random() * COLS); 
   } while (label[r][c]!=null); 

   //scale the image                            
   int x = rand.nextInt(20)+30;
   int y = rand.nextInt(20)+30;                     
   Image image = icon.getImage().getScaledInstance(x,y, Image.SCALE_SMOOTH);
   icon.setImage(image);

   JLabel lbl = new JLabel(icon); 
   gc.gridx = r;
   gc.gridy = c;            
   add(lbl, gc); //add image to the cell        
   label[r][c] = lbl; 
}

2 个答案:

答案 0 :(得分:2)

这是什么问题?您对同一主题有大约5个问题。您发布的随机代码是无用的,除非人们已经阅读了之前的所有4个问题,并且对您正在做的事情有所了解。我知道我已经读过它们但仍然不明白。

细胞没有边界。将组件添加到单元格时,单元格将是您添加的组件的大小。由于您只有一些被占用的单元格,因此您的大部分单元格都没有实际大小。

所以假设你想要一个新的组件到一个未被占用的单元格,例如在位置(3,4),我想你需要查看第3行的所有单元格以确定该行的最大高度。然后,您需要查看第4列中的所有单元格以确定最大宽度。将两者合并,你就拥有了细胞的大小。

你已经知道如何获得约束,所以你应该能够弄清楚其余部分。

然后,我可能不知道你在做什么,因此我的回答只是一个大问题。

如果您需要更多帮助,请发布SSCCE

答案 1 :(得分:1)

回顾关于基本相同代码的recent question,请尝试将ImageIcon添加到this example中的JLabel