JComponent子类未出现

时间:2014-03-11 19:38:38

标签: java swing paintcomponent

好。我正在写我的 Ball 课程并且没有显示球。我尝试将其他组件添加到我的容器中并显示它们,所以我认为可以安全地假设问题是我的球。类代码:

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 个答案:

答案 0 :(得分:2)

确保您的组件的首选大小大于(0,0):

@Override
public Dimension getPreferredSize() {
    return new Dimension(500, 500);
}

答案 1 :(得分:1)

没有看到将球添加到容器的代码,回答你的问题有点难。

但是,您的代码存在一些问题:

  1. 您正在构造函数中使用一些常量设置球的位置 - 假设您想在组件的中间绘制球,您应该通过调用getSize并进行数学计算paintComponent方法中的位置当场
  2. 你在paintComponent方法的末尾处理了Graphics对象,即使你没有创建它,也不要这样做,删除那个方法调用(这可能是罪魁祸首)
  3. 您没有保持Graphics对象的状态。创建一个副本(使用Graphics对象的create方法)并在最后处理它,或者通过恢复在方法结束时更改的状态(在将其更改为Color.GREEN之前设置的颜色)