gpt4 book ai didi

java - Graphics2D DrawImage不代表图像大小

转载 作者:行者123 更新时间:2023-12-01 23:11:03 27 4
gpt4 key购买 nike

我目前正在开发 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. 您可以在覆盖 getPreferredSize() 后使用 getWidth()getHeight()

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

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

关于java - Graphics2D DrawImage不代表图像大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21971758/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com