質問する前に、ウェブサイトでこの問題を調べましたが、提供された解決策は残念ながらうまくいきませんでした。
私が持っているコードで達成した最も近い成果はこれです(画像を取得するときは、間違いなくトライアンドキャッチを使用する必要があります。後で保存します):
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 になることはありません。
読んでくれてありがとう!