使用GridLayout的Java相册

时间:2012-01-01 20:04:50

标签: java swing positioning bufferedimage grid-layout

我想用Java制作简单的相册。要做到这一点,我认为这将是使用gridlayout协调图片的最简单方法。

我有我的照片'bufferedimages,我正在尝试使用以下代码将它们添加到gridlayout中,

    BufferedImage a = GUI.createImage(current);
    Image b = Toolkit.getDefaultToolkit().createImage(a.getSource());

    Icon pic = new ImageIcon(b);        
    JButton picB = new JButton("Picture 1", pic );
    selectB.setVerticalTextPosition(AbstractButton.BOTTOM);
    selectB.setHorizontalTextPosition(AbstractButton.CENTER); //aka LEFT, for left-to-right locales
    add(picB);

我也试图使用以下代码缩小我的bufferedimage,

int w = a.getWidth();
    int h = a.getHeight();
    BufferedImage after = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
    AffineTransform at = new AffineTransform();
    at.scale(0.6, 0.6);
    AffineTransformOp scaleOp = new AffineTransformOp(at, AffineTransformOp.TYPE_BILINEAR);
    after = scaleOp.filter(a, after);

然而,eventhoug我最小化图片的大小,按钮大于图片,我无法组织图片。

您有任何建议或新解决方案吗?

感谢。

2 个答案:

答案 0 :(得分:1)

picB.setInsets(new Insets(1, 1, 1, 1));

BufferedImage也是一个Image,因此似乎不需要b

BufferedImage有一个关联的图形,因此可以按如下方式进行调整:

BufferedImage scaled = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
scaled.getGraphics().drawImage(original, 0, 0, width, height, null);

答案 1 :(得分:1)

感谢您的回答,我也处理了以下情况;

我没有使用scale,而是创建了一个名为resize

的新函数
public static BufferedImage resize(BufferedImage img, int newW, int newH) {
    int w = img.getWidth();
    int h = img.getHeight();
    BufferedImage dimg = dimg = new BufferedImage(newW, newH, img.getType());
    Graphics2D g = dimg.createGraphics();
    g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
    g.drawImage(img, 0, 0, newW, newH, 0, 0, w, h, null);
    g.dispose();
    return dimg;
}

然后到我名为bf的bufferedimage,我调用了resize func并将其转换为图标

bf = resize(bf, bf.getWidth()/3, bf.getHeight()/3);
Image im = Toolkit.getDefaultToolkit().createImage(bf.getSource());
Icon ic = new ImageIcon(im);

然后我添加了带图像的按钮

JButton bt = new JButton("Picture", ic);
bt.setVerticalTextPosition(AbstractButton.BOTTOM);
bt.setHorizontalTextPosition(AbstractButton.CENTER);
add(bt);