图像被使用Swing切断

时间:2011-08-27 11:06:15

标签: eclipse swing size java

我正在写一个基于平铺的平台游戏。目前我正试图让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();  
    }
}

2 个答案:

答案 0 :(得分:5)

  

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

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

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

Pane pane = new Pane();
pane.setPreferredSize(...);
pane.setMinimumSize(...);

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

答案 1 :(得分:4)

JComponent基本上可以做到这一点,并且可以非常轻松地返回MinimumSizePreferredSize,对大多数standard Swing LayoutManagers有效,示例here