图形2D 绘图图像不代表图像大小



我目前正在做一个制作Connect 4的项目,我的坐标系遇到了一些问题。我有一个 800x600px 的 png 图像,它显示了"板",它由一个 8x6 的网格组成,每个位置都是一个 100x100px 的正方形......至少在 GIMP2 和文件系统中是这样。但是,当我使用Graphics2D的drawImage()方法将图像绘制到800x600 JFrame上时,它会从底部粘下来。我是否需要考虑 JFrame 的边界和这个系统中的东西,还是我错过了其他东西?

谢谢!

附言这是执行绘图的 JPanel 类。

public class GameBoard extends JPanel { 
public GameBoard() {
}
public void paint(Graphics g) {
    Graphics2D g2d = (Graphics2D) g;
    //Write messages
    if (!(GameManager.getInstance().getMessage() == null)) {
        g2d.drawString(GameManager.getInstance().getMessage(), 400, 25);
    }

    //Draw board graphic        
    ImageIcon bg = new ImageIcon("res/board.png");
    g2d.drawImage(bg.getImage(), 0, 0, 800, 600, this);
    //Draw counters

    for (int columns = 0; columns < 8; columns++) {
        for (int rows = 0; rows < 6; rows++) {
            if (!(GameManager.getInstance().getState(columns, rows) == null)) {
                Counter cTemp = GameManager.getInstance().getState(columns, rows);
                g2d.drawImage(cTemp.getImage(), cTemp.getX(), cTemp.getY(), 100, 100, this);
            }                   
        }
    }       
}

}

  1. 覆盖paintComponent而不是paint并调用super.paintComponent(g)

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        ...
    }
    
  2. 覆盖JPanelgetPreferredSize()

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(800, 600);
    }
    
  3. 不要paintComponent 方法中创建映像。在构造函数中执行此操作。

    public class GameBoard extends JPanel { 
        ImageIcon img;
        public GameBoard() {
            img = new ImageIcon(...);
        }
    
  4. pack()您的框架,请不要setSize(),并且将尊重JPanel的首选大小(通过您的覆盖getPreferredSize())。

  5. 您可以在覆盖后只使用getWidth()getHeight() getPreferredSize()

    drawImage(bg.getImage(), 0, 0, getWidth(), getHeight(), this);
    

处理所有这些事情,如果它没有帮助,发布一个我们可以测试的可运行示例。

相关内容

  • 没有找到相关文章

最新更新