我正在尝试为我正在编写的国际象棋程序获取一些图像。我尝试编写一个小程序来感受缩放图像,但我遇到了图像显示问题。基本上,只有存在 ImageIcon(图标)并且它位于代码中的 pawn 上方时,图像才会正确显示。如果它不存在,则它在代码中的 pawn 下面,或者图像来源不同 pawn 显示为黑色方块。如果我不尝试缩放 pawn,那么无论图标是否存在,整个事情都可以正常工作。这整个事情真的让我感到困惑,因为唯一的关联 pawn 和 icon 是它们共享一个源图像。任何人都可以对此有所了解吗?
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);
            }
        });
    }
}