我有一个JComponent子类,用于在屏幕上绘制形状。在构造函数中,我试图将ballX和ballY设置为JComponent的X和Y大小值的一半,我认为我做错了。我已经查了很多次了,找不到补救办法。代码如下。请记住,这是我第一次真正的Swing/Graphics2D冒险。
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);
}
}发布于 2011-11-05 02:28:09
在getPreferredSize()中重写JComponent以返回首选的大小,并以该Dimension的一半宽度和高度开始。为了同一目的,这个KineticModel调用DisplayPanel中的setPreferredSize()。
增编:作为解释,您当前的方法失败了,因为来自getWidth()和getHeight()的结果是无效的,直到在容器上调用了validate(),通常是pack()的结果。
发布于 2011-11-05 07:22:28
我同意垃圾神的回答。(+1)
将ballX和ballY在paintComponent(g)中移动如下
if (ballX==0 && ballY==0) {
ballX = getWidth()/2;
ballY = getHeight()/2;
}https://stackoverflow.com/questions/8017561
复制相似问题