1

在你问之前,我已经在网站上查找了这个问题,不幸的是,提供的解决方案对我不起作用,所以我必须再次求助,看看我可能做错了什么。

我所拥有的代码最接近的成就是这样的(当我检索图像时,我绝对应该使用 try 和 catch,我将其保存以备后用):

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,这意味着首先我将拥有这个:

在此处输入图像描述

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

在此处输入图像描述

我认为注意到 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。

感谢您的阅读!

4

3 回答 3

3

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

否则,您将扩展 JComponent(而不是 JLabel)并自己自定义图像绘制。有关如何绘制缩放图像的示例,请参见背景面板。

于 2013-11-10T00:19:43.857 回答
1

我建议您尝试创建或查找更大的平铺图像。如果你试图拉伸图像,你会降低它的质量,但对于收缩来说就不是这样了。

于 2013-11-10T00:41:56.613 回答
0

这段代码看起来不错。这是一个代码审查建议:

  • 可序列化类Tile.java没有声明 long 类型的静态最终 serialVersionUID 字段。解决方案:将生成的序列版本 ID 添加到所选类型。
于 2013-11-11T11:36:55.567 回答