为什么getHeight()不等于帧高?

时间:2015-03-09 03:54:08

标签: java swing graphics awt jcomponent

我正在制作一个围绕框架移动的bounc * ing立方体。为了检测帧的边界,我使用了JFrame中JComponent的getHeight()和getWidth()并计算了可能的边界,以便多维数据集可以反弹。

getWidth()完全正常。但是,我不能让它在getHeight()的边界上反弹。

当cu *到达窗口顶部时,它会在反弹前保持大约10个像素。

以下是此问题的屏幕截图。

enter image description here

这是我的代码:

public class Cube {
    final public static int DIMENSION = 100;
    private final static int D_X = 20;
    private final static int D_Y = -20;
    private final static int SPEED = 1;
    private int xVelBK;
    private int yVelBK;
    private int xVel;
    private int yVel;
    private CubePoint[] pts;

    public  Cube(int x, int y){
    xVel = SPEED;
    yVel = SPEED;

    pts = new CubePoint[8];

    pts[0] = new CubePoint(x,y);
    pts[1] = new CubePoint(x,y - DIMENSION);
    pts[2] = new CubePoint(x + DIMENSION,y - DIMENSION);
    pts[3] = new CubePoint(x + DIMENSION,y);

    pts[4] = new CubePoint(x + D_X,y + D_Y);
    pts[5] = new CubePoint(x + D_X,y + D_Y - DIMENSION);
    pts[6] = new CubePoint(x + D_X + DIMENSION,y + D_Y - DIMENSION);
    pts[7] = new CubePoint(x + D_X + DIMENSION,y + D_Y);
    }

    public void move(int componentWidth, int componentHeight){
    ......

    //bug in here
    if (pts[0].getY()  - DIMENSION - D_Y <= 0 ) {
        yVel = SPEED;
    }

    .......
    }
..........
}

以下是组件:

public class CubeComponent extends JComponent {
    ...........

    private Cube cube;
    private Timer timer;
    private CubePoint originMousePos;
    private CubePoint closest;
    private Font font;
    private int mode;


    private int delay = DEFAULT_DELAY ;

    private int mouseToClosestX;
    private int mouseToClosestY;

    class CubeMoveListener implements ActionListener{
    @Override
    public void actionPerformed(ActionEvent e){
        cube.move(getWidth(),getHeight());
        repaint();
    }

    }



    @Override
    public void paintComponent(Graphics g){
    Graphics2D g2 = (Graphics2D)g;

    cube.draw(g2);
    }

}

1 个答案:

答案 0 :(得分:4)

据我所知:

 if (pts[0].getY()  - DIMENSION - D_Y <= 0 ) {

应该用于确定多维数据集何时到达组件的底部,因此您应该测试“&gt;”

if ( pts[0].getY() >= componentHeight) {

应该在立方体到达顶部时用于测试。所以它应该是:

if ( pts[0].getY() <= 0) {

关键是:

  1. 其中一个垂直测试需要测试“&lt; = 0”。
  2. 水平和垂直测试的结构应该相同,您只需要更改变量名称。