1

質問する前に、ウェブサイトでこの問題を調べましたが、提供された解決策は残念ながらうまくいきませんでした。

私が持っているコードで達成した最も近い成果はこれです(画像を取得するときは、間違いなくトライアンドキャッチを使用する必要があります。後で保存します):

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);
    }

}

結論として、JLabel を拡張するので、ComponentListener を Tile に追加することを検討したと言わなければなりませんが、ラベルの寸法に合わせて画像のサイズを変更しようとしても無駄でした。 0、まあ、それらが 0 になることはありません。

読んでくれてありがとう!

4

3 に答える 3

1

より大きなタイル画像を作成または検索することをお勧めします。画像を引き伸ばそうとすると劣化しますが、縮小はそうではありません。

于 2013-11-10T00:41:56.613 に答える
0

このコードは良さそうです。コードレビューの提案は次のとおりです。

  • シリアライズ可能クラスTile.javaは、long 型の static final serialVersionUID フィールドを宣言しません。解決策:生成されたシリアル バージョン ID を選択したタイプに追加します。
于 2013-11-11T11:36:55.567 に答える