图像被使用Swing切断

jbi*_*lls 3 java eclipse size swing

我正在写一个基于平铺的平台游戏.目前我正试图让400块瓷砖一次显示出来.这是我的小组.在顶部和左侧,一切都很好,但在右侧和底部,图像被几个像素切断.每张图片为32*32.全部blocks都是初始化的.没有为空.这有什么不对?

public class Pane extends JPanel implements ActionListener{

    private static final long serialVersionUID = 1L;
    Timer timer;
    boolean setup = false;
    Block[][] blocks;
    Level level;
    public Pane()
    {
        level = new Level();
        level.Generate();
        blocks = level.Parse();
        setBackground(Color.WHITE);
        timer = new Timer(25, this);
        timer.start();
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D)g;
        for(Block[] b : blocks)
        {
            for(Block bx : b)
            {
                // Debug code if(bx.letter.equals("D"))
                // Debug codeSystem.out.println(bx.y*32 +" = "+ bx.x*32);
                g2d.drawImage(bx.bpic, bx.x*32, bx.y*32, this);
            }
        }
        Toolkit.getDefaultToolkit().sync();
        g.dispose();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        repaint();  
    }
}
Run Code Online (Sandbox Code Playgroud)

Hei*_*bug 5

在右侧和底侧,图像被几个像素切断

如果你的意思是整个面板的右侧和底侧(不是单个瓷砖),那么它可能是与LayoutManager相关的问题.解决方案取决于您用于添加JPanel的组件的布局管理器.

您可以尝试使用以下命令指定JPanel的最小/首选大小:

Pane pane = new Pane();
pane.setPreferredSize(...);
pane.setMinimumSize(...);
Run Code Online (Sandbox Code Playgroud)

为了根据生成的图像的大小(32*COL,32*ROW)指定其最小尺寸.不幸的是,setPreferredSize调用的有效性取决于Pane父组件的布局管理器.