paintComponent没有在整个JPanel中绘图

时间:2018-02-15 20:23:52

标签: java swing jframe jpanel paintcomponent

我试图制作游戏蛇并遇到问题。我所拥有的是一个名为Segment的类,用于创建保持x和y位置的对象以及蛇的方向。该类扩展了JPanel并重写了paintComponent()方法。然后,我将一个Segment类型的对象添加到另一个类的JFrame中。我用来移动/改变蛇方向的方法(目前实际上只是一个方格)工作得很好但我的问题是:

当方块达到框架宽度的大约一半或框架高度的一半时,它将停止被绘制。我已经将JPanel的背景变为浅灰色了,所以我知道当它停止时,方块没有到达JPanel的末尾。下面是我的简单paintComponent()方法和类中扩展JFrame的部分,我添加对象。

long result = end - start;

我也知道对象的位置并没有停止更新,所以它只是在整个面板/框架中绘制正方形的问题。感谢任何帮助!

这是一个MCVE:

System.nanoTime

1 个答案:

答案 0 :(得分:3)

不要覆盖Segment类的getX()和getY()。

这些是所有Swing组件的方法。它们获取父容器中组件的当前位置。

使用不同的方法名称来控制蛇的绘画位置。由于您的变量名称是xPos和yPos,因此可以使用getXPos()和getYPos()。

所以会发生的是蛇相对于Segment面板以xPos / yPos绘制,而Segment面板也是相对于其父容器以xPos / yPos绘制的。