私が書いているチェスプログラムのために、いくつかの画像を拡大縮小しようとしています。画像のスケーリングの感覚をつかむために小さなプログラムを作成しようとしましたが、画像の表示で問題が発生しました。基本的に、その ImageIcon (アイコン) があり、コードのポーンの上にある場合にのみ、画像が適切に表示されます。存在しない場合は、コード内のポーンの下にあるか、画像ソースが異なるポーンであり、黒い四角として表示されます。ポーンをスケーリングしようとしないと、アイコンがあるかどうかに関係なく、全体がうまく機能します。ポーンとアイコンが持つ唯一の関連性は、それらがソース画像を共有することだけなので、この全体が私を本当に困惑させます。誰でもこれに光を当てることができますか?
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import javax.swing.*;
public class resizeImg extends JFrame{
public void generateGui(){
JPanel mainPanel=new JPanel();
getContentPane().add(mainPanel);
JPanel main=new JPanel();
main.setBorder(BorderFactory.createLineBorder(new Color(0,0,0)));
main.setSize(400,400);
mainPanel.add(main);
mainPanel.setLayout(null);
ImageIcon icon=new ImageIcon(Toolkit.getDefaultToolkit().getImage("resources/pawn.jpg"));
//if you remove the above ImageIcon the image just displays as a black square
Image pawn=scale(Toolkit.getDefaultToolkit().getImage("resources/pawn.jpg"));
JLabel pawnContainer=new JLabel(new ImageIcon(pawn));
main.add(pawnContainer);
setSize(400,400);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public BufferedImage scale(Image i){
BufferedImage resized=new BufferedImage(50,50,BufferedImage.TYPE_INT_RGB);
Graphics2D g=resized.createGraphics();
g.drawImage(i,0,0,50,50,null);
g.dispose();
return resized;
}
public static void main(String[] args){
SwingUtilities.invokeLater(new Runnable(){
public void run(){
resizeImg imgObject=new resizeImg();
imgObject.generateGui();
imgObject.setVisible(true);
}
});
}
}