我有一个JComponent子类,正在使用它在屏幕上绘制形状。在构造函数中,我试图将ballX和ballY的 X 和 Y 大小值设置为一半JComponent,并且我认为做错了。我已经对此进行了很多查找,但找不到补救措施。代码如下。请记住,这是我第一次真正的Swing / Graphics2D创业。
JComponent
ballX
ballY
public class PongCanvas extends JComponent { //Vars to hold XY values and Dimension values. private int batXDim, batYDim; private int b1X, b1Y; private int b2X, b2Y; private int ballRad, ballX, ballY; public PongCanvas() {//Instantiate vars. batXDim = 20; batYDim = 100; b1X = 0; b1Y = 0; b2X = 0; b2Y = 0; ballRad = 20; ballX = getWidth() / 2; ballY = getHeight() / 2; } public void paint(Graphics g) {//Main paint Method. //Cast Graphics to Graphics2D. Graphics2D g2 = (Graphics2D) g; //Enable antialiasing. g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); //Draw background. g2.setPaint(Color.black); g2.fillRect(0, 0, getWidth(), getHeight()); //Draw ball. g2.setPaint(Color.white); g2.fillOval(ballX, ballY, ballRad, ballRad); //Draw bat 1. g2.fillRect(b1X, b1Y, batXDim, batYDim); //Draw bat 2. g2.fillRect(b2X, b2Y, batXDim, batYDim); } }
覆盖getPreferredSize()您JComponent以返回您的首选大小,并从其宽度和高度的一半开始Dimension。为此,它在中KineticModel调用。setPreferredSize()DisplayPanel
getPreferredSize()
Dimension
KineticModel
setPreferredSize()
DisplayPanel
附录:通过解释,当前的方法失败,因为从结果getWidth()和getHeight()是 无效的 ,直到 validate()被称为封闭容器上,通常作为的结果pack()。
getWidth()
getHeight()
validate()
pack()