可以。我在写我的球课,球没有显示。我尝试将其他组件添加到容器中并显示它们,因此我认为可以安全地假设问题出在我的球上。类别代码:
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JComponent;
public class Ball extends JComponent {
public Ball() {
ballX = (Window.WINDOW_WIDTH - BALL_DIAMETER) / 2;
ballY = (Window.WINDOW_HEIGHT - BALL_DIAMETER) / 2;
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawRect(5, 5, 50, 50);
g.setColor(Color.GREEN);
g.fillOval(ballX, ballY, BALL_DIAMETER, BALL_DIAMETER);
g.dispose();
}
public void setX(int x) {
ballX = x;
}
public void setY(int y) {
ballY = y;
}
private int ballX;
private int ballY;
public static final int BALL_DIAMETER = 30;
}
第一个rect用于测试。看起来也不是。。。。
2条答案
按热度按时间zengzsys1#
没有看到将球添加到容器的代码,回答您的问题有点困难。
但是,您的代码有一些问题:
您在构造函数中设置球的位置,使用一些常量-假设您要在组件的中间绘制球,您应该通过调用getsize并当场进行数学计算,在paintcomponent方法中计算球的位置
在paintcomponent方法的末尾处理graphics对象,即使您没有创建它,也不要这样做,删除该方法调用(这可能是罪魁祸首)
你没有保持图形对象的状态。创建一个副本(使用图形对象的create方法)并在最后处理它,或者恢复在方法末尾更改的状态(更改为color.green之前设置的颜色)
w51jfk4q2#
确保组件的首选大小大于(0,0):