调整图像大小以适应适合其大小的JLabel的整体

时间:2013-11-09 23:17:23

标签: java swing graphics

在你提问之前,我已经在网站上查找了这个问题,遗憾的是,所提供的解决方案对我没有用,所以我必须再次提出要求,看看我能做错什么。

我得到的最近的成就是我得到的这个(我最应该使用一个尝试并在我检索图像时捕获,我将保存以供以后使用):

private void asignarTile(Tile tile, JPanel panel){

    if(tile.getTipo() == 0){

        ImageIcon ii = new ImageIcon("pasto.png");
        Image image = ii.getImage();
        Image newimg = image.getScaledInstance(32, 32, java.awt.Image.SCALE_SMOOTH);
        ii = new ImageIcon(newimg);
        tile.setIcon(ii);
        panel.add(tile);
    }
}

现在,虽然没有注意到,但我必须提到代码确实适用于特定大小,但之后它不会使图像的大小适应JLabel,这意味着首先我将拥有:

enter image description here

但在我调整大小后,我会有这个:

enter image description here

我认为注意Tile扩展JLabel是有用的,这些是更改(columna表示列,fila表示行,也许我应该开始用英语完全编写代码)

package gui;

import javax.swing.JLabel;

public class Tile extends JLabel{

    private int fila, columna, tipo;

    public int getFila() {
        return fila;
    }

    public void setFila(int x) {
        this.fila = x;
    }

    public int getColumna() {
        return columna;
    }

    public void setColumna(int y) {
        this.columna = y;
    }

    public int getTipo(){
        return tipo;
    }

    public void setTipo(int tipo){
        if(tipo >= 0 || tipo <= 6)
            this.tipo = tipo;
    }

    public Tile(int x, int y, int tipo) {
        this.setFila(x);
        this.setColumna(y);
        this.setTipo(tipo);
    }

}

作为结论,我必须说我已经考虑过将一个componentListener添加到Tile,因为它扩展了一个JLabel,但是我也尝试将图像大小调整为标签的尺寸无济于事,因为它给了我一个例外说它的尺寸为0,而且它们不能为0。

感谢您阅读!

3 个答案:

答案 0 :(得分:3)

您可以尝试使用Darryl的Stretch Icon进行动态调整大小。

否则你会扩展JComponent(而不是JLabel),你是否拥有自定义的图像绘制。有关如何绘制缩放图像的示例,请参阅Background Panel

答案 1 :(得分:1)

我建议您尝试创建或查找更大的图块图像。如果你试图拉伸图像,你会降低它,但这不是缩小的。

答案 2 :(得分:0)

此代码看起来不错。 这是代码审查建议:

  • 可序列化类 Tile.java 未声明long类型的静态最终serialVersionUID字段。 解决方案:将生成的序列版本ID添加到所选类型。