0

我正在尝试在面板中将圆形图形居中。

当我使用此代码时,它工作正常:

private int radius = 50;
private ballSize = radius * 2;

@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.drawOval(getWidth()/2 - radius, 
        getHeight()/2 - radius, ballSize, ballSize);
}

但我想使用这段代码(如下),将 xCoordinate 和 yCoordinate 作为 x 和 y 的参数,因为我需要类中其他方法使用的变量。但是当我使用下面的代码时,圆圈从左上角开始,框架中只有圆圈的左下角。

private class BallPanel extends JPanel {
    private int radius = 50;
    private int xCoordinate = getWidth() / 2 - radius;
    private int yCoordinate = getHeight() / 2 - radius;
    private int ballSize = radius * 2;

    public void moveUp() {
        if (yCoordinate > 0 - radius) {
            yCoordinate--;
            repaint();
        }
    }

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawOval(xCoordinate, yCoordinate, 
            radius * 2, radius * 2);
    }
}

为什么在使用变量作为参数时会导致这个问题,我能做些什么来解决它?

4

1 回答 1

2

面板的宽度和高度在面板创建和显示、放大、缩小之间变化。因此,您应该始终获取当前宽度和当前高度,就像您在第一个示例中所做的那样,以获得正确的。

你不应该改变 yCoordinate moveUp()。您应该更改原始坐标的偏移量:

private int yOffset = 0;
private int ballSize = radius * 2;

public void moveUp() {
    if (computeY() > 0 - radius) {
        yOffset--;
        repaint();
    }
}

@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    g.drawOval(getWidth() / 2 - radius, computeY(), ballSize, ballSize);
}

private int computeY() {
    return (getHeight() / 2 - radius) + yOffset;
}
于 2013-08-31T13:50:03.623 回答