我正试图将圆形图形置于面板中心。
当我使用此代码时,它可以正常工作:
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);
}
}
为什么在将变量用作参数时会导致此问题,我该怎么做才能解决它?
答案 0 :(得分:2)
面板的宽度和高度在创建面板的时刻与显示,放大,缩小的时刻之间有所不同。因此,您应始终获得当前宽度和当前高度,就像您在第一个示例中所做的那样,以获得正确的宽度和当前高度。
您不应更改moveUp()
中的yCoordinate。您应该更改原始坐标的偏移量:
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;
}