如何在单元格边界内放置图像?
我的意思是不占用其他细胞的空间? 在下面的代码中,选择随机单元格来显示图像。一个单元格中的一个图像。 问题是,图像似乎也需要其他细胞。 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;
}
答案 0 :(得分:2)
这是什么问题?您对同一主题有大约5个问题。您发布的随机代码是无用的,除非人们已经阅读了之前的所有4个问题,并且对您正在做的事情有所了解。我知道我已经读过它们但仍然不明白。
细胞没有边界。将组件添加到单元格时,单元格将是您添加的组件的大小。由于您只有一些被占用的单元格,因此您的大部分单元格都没有实际大小。
所以假设你想要一个新的组件到一个未被占用的单元格,例如在位置(3,4),我想你需要查看第3行的所有单元格以确定该行的最大高度。然后,您需要查看第4列中的所有单元格以确定最大宽度。将两者合并,你就拥有了细胞的大小。
你已经知道如何获得约束,所以你应该能够弄清楚其余部分。
然后,我可能不知道你在做什么,因此我的回答只是一个大问题。
如果您需要更多帮助,请发布SSCCE。
答案 1 :(得分:1)
回顾关于基本相同代码的recent question,请尝试将ImageIcon
添加到this example中的JLabel
。