我目前正在开发一个用于制作Connect 4的项目,我遇到了一些坐标系问题。我有一个800x600px png图像,显示'板',它由一个8x6网格组成,每个位置是一个100x100px的方形...至少在GIMP2和文件系统中是这样的。然而,当我使用Graphics2D的drawImage()方法将图像绘制到800x600 JFrame上时,它会从底部伸出。我是否需要在此系统中考虑JFrame的边框和内容,或者我错过了其他内容?
谢谢!
P.S。这是执行绘图的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);
}
}
}
}
}
答案 0 :(得分:3)
覆盖paintComponent
而不是paint
并致电super.paintComponent(g)
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
...
}
覆盖getPreferredSize()
JPanel
@Override
public Dimension getPreferredSize() {
return new Dimension(800, 600);
}
不要在paintComponent
方法中创建图片。在构造函数中执行。
public class GameBoard extends JPanel {
ImageIcon img;
public GameBoard() {
img = new ImageIcon(...);
}
pack()
您的框架,不 setSize()
,JPanel
的首选尺寸将得到尊重(通过您的覆盖{{ 1}})。
您可以在覆盖getPreferredSize()
后使用getWidth()
和getHeight()
getPreferredSize()
处理所有这些事情,如果没有帮助,请发布一个我们可以测试的可运行示例。